[compiler-rt] r184405 - [sanitizer] Handle EVIOxxxx ioctls.

Evgeniy Stepanov eugeni.stepanov at gmail.com
Fri Jun 21 03:56:58 PDT 2013


I think fixed it in a different way in r184539.

On Thu, Jun 20, 2013 at 11:02 PM,  <Andrea_DiBiagio at sn.scee.net> wrote:
> Hi Evgeniy,
>
> After r184405 I get compilation errors when building
> "compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc".
> The problem is caused by the lack of definition for `struct
> input_keymap_entry' in my version of <linux/input.h>.
>
> In my understanding, the problem is that r184405 requires at least a Linux
> 2.6.37.
> To be more specific, it requires the following change:
> http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/include/uapi/linux/input.h?id=607ca46e97a1b6594b29647d98a32d545c24bdff
>
>
> I have a Ubuntu 10.04 with a linux 2.6.32-48-generic and a clean build of
> the llvm compiler-rt (make && make install) fails for me.
> I fixed the problem on my machine applying the patch in attachment to this
> email which checks for the value of macro EV_VERSION (which should be the
> version of the event structure; defined by input.h).
> However I don't know enough about the sanitizer. I hope that this patch
> can be of help.
>
>
>
> Cheers,
> Andrea Di Biagio
> SN Systems - Sony Computer Entertainment
>
> llvm-commits-bounces at cs.uiuc.edu wrote on 20/06/2013 10:19:28:
>
>> From: Evgeniy Stepanov <eugeni.stepanov at gmail.com>
>> To: llvm-commits at cs.uiuc.edu
>> Date: 20/06/2013 10:23
>> Subject: [compiler-rt] r184405 - [sanitizer] Handle EVIOxxxx ioctls.
>> Sent by: llvm-commits-bounces at cs.uiuc.edu
>>
>> Author: eugenis
>> Date: Thu Jun 20 04:19:28 2013
>> New Revision: 184405
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=184405&view=rev
>> Log:
>> [sanitizer] Handle EVIOxxxx ioctls.
>>
>> Added:
>>     compiler-rt/trunk/lib/sanitizer_common/tests/
>> sanitizer_ioctl_test.cc   (with props)
>> Modified:
>>     compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt
>>     compiler-rt/trunk/lib/sanitizer_common/
>> sanitizer_common_interceptors_ioctl.inc
>>
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
>> compiler-rt/trunk/lib/sanitizer_common/sanitizer_platform_limits_posix.h
>>     compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/
>> sanitizer_common/CMakeLists.txt?rev=184405&r1=184404&r2=184405&view=diff
>>
> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/CMakeLists.txt Thu Jun 20
>> 04:19:28 2013
>> @@ -40,6 +40,7 @@ set(SANITIZER_HEADERS
>>    sanitizer_atomic.h
>>    sanitizer_common.h
>>    sanitizer_common_interceptors.inc
>> +  sanitizer_common_interceptors_ioctl.inc
>>    sanitizer_common_interceptors_scanf.inc
>>    sanitizer_common_syscalls.inc
>>    sanitizer_flags.h
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/
>> sanitizer_common_interceptors_ioctl.inc
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/
>> sanitizer_common/sanitizer_common_interceptors_ioctl.inc?
>> rev=184405&r1=184404&r2=184405&view=diff
>>
> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/
>> sanitizer_common_interceptors_ioctl.inc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/
>> sanitizer_common_interceptors_ioctl.inc Thu Jun 20 04:19:28 2013
>> @@ -130,6 +130,26 @@ static void ioctl_table_fill() {
>>    _(CDROMVOLCTRL, READ, struct_cdrom_volctrl_sz);
>>    _(CDROMVOLREAD, WRITE, struct_cdrom_volctrl_sz);
>>    _(CDROM_GET_UPC, WRITE, 8);
>> +  _(EVIOCGABS, WRITE, struct_input_absinfo_sz); // fixup
>> +  _(EVIOCGBIT, WRITE, struct_input_id_sz); // fixup
>> +  _(EVIOCGEFFECTS, WRITE, sizeof(int));
>> +  _(EVIOCGID, WRITE, struct_input_id_sz);
>> +  _(EVIOCGKEY, WRITE, 0);
>> +  _(EVIOCGKEYCODE, WRITE, sizeof(int) * 2);
>> +  _(EVIOCGLED, WRITE, 0);
>> +  _(EVIOCGNAME, WRITE, 0);
>> +  _(EVIOCGPHYS, WRITE, 0);
>> +  _(EVIOCGRAB, READ, sizeof(int));
>> +  _(EVIOCGREP, WRITE, sizeof(int) * 2);
>> +  _(EVIOCGSND, WRITE, 0);
>> +  _(EVIOCGSW, WRITE, 0);
>> +  _(EVIOCGUNIQ, WRITE, 0);
>> +  _(EVIOCGVERSION, WRITE, sizeof(int));
>> +  _(EVIOCRMFF, READ, sizeof(int));
>> +  _(EVIOCSABS, READ, struct_input_absinfo_sz); // fixup
>> +  _(EVIOCSFF, READ, struct_ff_effect_sz);
>> +  _(EVIOCSKEYCODE, READ, sizeof(int) * 2);
>> +  _(EVIOCSREP, READ, sizeof(int) * 2);
>>    _(FDCLRPRM, NONE, 0);
>>    _(FDDEFPRM, READ, struct_floppy_struct_sz);
>>    _(FDFLUSH, NONE, 0);
>> @@ -350,6 +370,9 @@ static void ioctl_table_fill() {
>>    _(EQL_GETSLAVECFG, WRITE, struct_ifreq_sz);
>>    _(EQL_SETMASTRCFG, WRITE, struct_ifreq_sz);
>>    _(EQL_SETSLAVECFG, WRITE, struct_ifreq_sz);
>> +  _(EVIOCGKEYCODE_V2, WRITE, struct_input_keymap_entry_sz);
>> +  _(EVIOCGPROP, WRITE, 0);
>> +  _(EVIOCSKEYCODE_V2, READ, struct_input_keymap_entry_sz);
>>    _(FS_IOC_GETFLAGS, WRITE, sizeof(int));
>>    _(FS_IOC_GETVERSION, WRITE, sizeof(int));
>>    _(FS_IOC_SETFLAGS, READ, sizeof(int));
>> @@ -463,7 +486,18 @@ static void ioctl_init() {
>>    ioctl_initialized = true;
>>  }
>>
>> -static const ioctl_desc *ioctl_lookup(unsigned req) {
>> +// Handle the most evil ioctls that encode argument value as part
>> of request id.
>> +static unsigned ioctl_request_fixup(unsigned req) {
>> +  if ((req & ~0x3fff001fU) == IOCTL_EVIOCGBIT)
>> +    return IOCTL_EVIOCGBIT;
>> +  if ((req & ~0x3fU) == IOCTL_EVIOCGABS)
>> +    return IOCTL_EVIOCGABS;
>> +  if ((req & ~0x3fU) == IOCTL_EVIOCSABS)
>> +    return IOCTL_EVIOCSABS;
>> +  return req;
>> +}
>> +
>> +static const ioctl_desc *ioctl_table_lookup(unsigned req) {
>>    int left = 0;
>>    int right = ioctl_table_size;
>>    while (left < right) {
>> @@ -479,10 +513,27 @@ static const ioctl_desc *ioctl_lookup(un
>>      return 0;
>>  }
>>
>> +static const ioctl_desc *ioctl_lookup(unsigned req) {
>> +  req = ioctl_request_fixup(req);
>> +  const ioctl_desc *desc = ioctl_table_lookup(req);
>> +  if (desc) return desc;
>> +
>> +  // Try stripping access size from the request id.
>> +  desc = ioctl_table_lookup(req & ~0x3fff0000U);
>> +  // Sanity check: requests that encode access size are either read
>> or write and
>> +  // have size of 0 in the table.
>> +  if (desc && desc->size == 0 &&
>> +      (desc->type == ioctl_desc::WRITE || desc->type ==
> ioctl_desc::READ))
>> +    return desc;
>> +  return 0;
>> +}
>> +
>>  static void ioctl_common_pre(void *ctx, const ioctl_desc *desc, int d,
>>                               unsigned request, void *arg) {
>> -  if (desc->type == ioctl_desc::READ)
>> -    COMMON_INTERCEPTOR_READ_RANGE(ctx, arg, desc->size);
>> +  if (desc->type == ioctl_desc::READ) {
>> +    unsigned size = desc->size ? desc->size : IOC_SIZE(request);
>> +    COMMON_INTERCEPTOR_READ_RANGE(ctx, arg, size);
>> +  }
>>    if (desc->type != ioctl_desc::CUSTOM)
>>      return;
>>    switch (request) {
>> @@ -499,7 +550,8 @@ static void ioctl_common_post(void *ctx,
>>                                unsigned request, void *arg) {
>>    if (desc->type == ioctl_desc::WRITE) {
>>      // FIXME: add verbose output
>> -    COMMON_INTERCEPTOR_WRITE_RANGE(ctx, arg, desc->size);
>> +    unsigned size = desc->size ? desc->size : IOC_SIZE(request);
>> +    COMMON_INTERCEPTOR_WRITE_RANGE(ctx, arg, size);
>>    }
>>    if (desc->type != ioctl_desc::CUSTOM)
>>      return;
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/
>> sanitizer_platform_limits_posix.cc
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/
>> sanitizer_common/sanitizer_platform_limits_posix.cc?
>> rev=184405&r1=184404&r2=184405&view=diff
>>
> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/
>> sanitizer_platform_limits_posix.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/
>> sanitizer_platform_limits_posix.cc Thu Jun 20 04:19:28 2013
>> @@ -46,6 +46,8 @@
>>  #include <linux/fd.h>
>>  #include <linux/fs.h>
>>  #include <linux/hdreg.h>
>> +#include <linux/input.h>
>> +#include <linux/ioctl.h>
>>  #include <linux/soundcard.h>
>>  #endif
>>
>> @@ -173,6 +175,7 @@ namespace __sanitizer {
>>    unsigned struct_copr_buffer_sz = sizeof(struct copr_buffer);
>>    unsigned struct_copr_debug_buf_sz = sizeof(struct copr_debug_buf);
>>    unsigned struct_copr_msg_sz = sizeof(struct copr_msg);
>> +  unsigned struct_ff_effect_sz = sizeof(struct ff_effect);
>>    unsigned struct_floppy_drive_params_sz = sizeof(struct
>> floppy_drive_params);
>>    unsigned struct_floppy_drive_struct_sz = sizeof(struct
>> floppy_drive_struct);
>>    unsigned struct_floppy_fdc_state_sz = sizeof(struct
> floppy_fdc_state);
>> @@ -183,6 +186,8 @@ namespace __sanitizer {
>>    unsigned struct_format_descr_sz = sizeof(struct format_descr);
>>    unsigned struct_hd_driveid_sz = sizeof(struct hd_driveid);
>>    unsigned struct_hd_geometry_sz = sizeof(struct hd_geometry);
>> +  unsigned struct_input_absinfo_sz = sizeof(struct input_absinfo);
>> +  unsigned struct_input_id_sz = sizeof(struct input_id);
>>    unsigned struct_midi_info_sz = sizeof(struct midi_info);
>>    unsigned struct_mtget_sz = sizeof(struct mtget);
>>    unsigned struct_mtop_sz = sizeof(struct mtop);
>> @@ -199,15 +204,16 @@ namespace __sanitizer {
>>  #endif
>>
>>  #if SANITIZER_LINUX && !SANITIZER_ANDROID
>> +  unsigned mpu_command_rec_sz = sizeof(mpu_command_rec);
>>    unsigned struct_audio_buf_info_sz = sizeof(struct audio_buf_info);
>>    unsigned struct_ax25_parms_struct_sz = sizeof(struct
> ax25_parms_struct);
>>    unsigned struct_cyclades_monitor_sz = sizeof(struct
> cyclades_monitor);
>> +  unsigned struct_input_keymap_entry_sz = sizeof(struct
> input_keymap_entry);
>>    unsigned struct_ipx_config_data_sz = sizeof(struct ipx_config_data);
>>    unsigned struct_kbdiacrs_sz = sizeof(struct kbdiacrs);
>>    unsigned struct_kbentry_sz = sizeof(struct kbentry);
>>    unsigned struct_kbkeycode_sz = sizeof(struct kbkeycode);
>>    unsigned struct_kbsentry_sz = sizeof(struct kbsentry);
>> -  unsigned mpu_command_rec_sz = sizeof(mpu_command_rec);
>>    unsigned struct_mtconfiginfo_sz = sizeof(struct mtconfiginfo);
>>    unsigned struct_nr_parms_struct_sz = sizeof(struct nr_parms_struct);
>>    unsigned struct_ppp_stats_sz = sizeof(struct ppp_stats);
>> @@ -275,6 +281,26 @@ namespace __sanitizer {
>>    unsigned IOCTL_SIOCGETVIFCNT = SIOCGETVIFCNT;
>>  #endif
>>  #if SANITIZER_LINUX
>> +  unsigned IOCTL_EVIOCGABS = EVIOCGABS(0);
>> +  unsigned IOCTL_EVIOCGBIT = EVIOCGBIT(0, 0);
>> +  unsigned IOCTL_EVIOCGEFFECTS = EVIOCGEFFECTS;
>> +  unsigned IOCTL_EVIOCGID = EVIOCGID;
>> +  unsigned IOCTL_EVIOCGKEY = EVIOCGKEY(0);
>> +  unsigned IOCTL_EVIOCGKEYCODE = EVIOCGKEYCODE;
>> +  unsigned IOCTL_EVIOCGLED = EVIOCGLED(0);
>> +  unsigned IOCTL_EVIOCGNAME = EVIOCGNAME(0);
>> +  unsigned IOCTL_EVIOCGPHYS = EVIOCGPHYS(0);
>> +  unsigned IOCTL_EVIOCGRAB = EVIOCGRAB;
>> +  unsigned IOCTL_EVIOCGREP = EVIOCGREP;
>> +  unsigned IOCTL_EVIOCGSND = EVIOCGSND(0);
>> +  unsigned IOCTL_EVIOCGSW = EVIOCGSW(0);
>> +  unsigned IOCTL_EVIOCGUNIQ = EVIOCGUNIQ(0);
>> +  unsigned IOCTL_EVIOCGVERSION = EVIOCGVERSION;
>> +  unsigned IOCTL_EVIOCRMFF = EVIOCRMFF;
>> +  unsigned IOCTL_EVIOCSABS = EVIOCSABS(0);
>> +  unsigned IOCTL_EVIOCSFF = EVIOCSFF;
>> +  unsigned IOCTL_EVIOCSKEYCODE = EVIOCSKEYCODE;
>> +  unsigned IOCTL_EVIOCSREP = EVIOCSREP;
>>    unsigned IOCTL_BLKFLSBUF = BLKFLSBUF;
>>    unsigned IOCTL_BLKGETSIZE = BLKGETSIZE;
>>    unsigned IOCTL_BLKRAGET = BLKRAGET;
>> @@ -530,6 +556,9 @@ namespace __sanitizer {
>>    unsigned IOCTL_EQL_GETSLAVECFG = EQL_GETSLAVECFG;
>>    unsigned IOCTL_EQL_SETMASTRCFG = EQL_SETMASTRCFG;
>>    unsigned IOCTL_EQL_SETSLAVECFG = EQL_SETSLAVECFG;
>> +  unsigned IOCTL_EVIOCGKEYCODE_V2 = EVIOCGKEYCODE_V2;
>> +  unsigned IOCTL_EVIOCGPROP = EVIOCGPROP(0);
>> +  unsigned IOCTL_EVIOCSKEYCODE_V2 = EVIOCSKEYCODE_V2;
>>    unsigned IOCTL_FS_IOC_GETFLAGS = FS_IOC_GETFLAGS;
>>    unsigned IOCTL_FS_IOC_GETVERSION = FS_IOC_GETVERSION;
>>    unsigned IOCTL_FS_IOC_SETFLAGS = FS_IOC_SETFLAGS;
>> @@ -635,6 +664,8 @@ CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi
>>  CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_name);
>>  CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr);
>>  CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phnum);
>> +
>> +COMPILER_CHECK(IOC_SIZE(0x12345678) == _IOC_SIZE(0x12345678));
>>  #endif
>>
>>  CHECK_TYPE_SIZE(addrinfo);
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/
>> sanitizer_platform_limits_posix.h
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/
>> sanitizer_common/sanitizer_platform_limits_posix.h?
>> rev=184405&r1=184404&r2=184405&view=diff
>>
> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/
>> sanitizer_platform_limits_posix.h (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/
>> sanitizer_platform_limits_posix.h Thu Jun 20 04:19:28 2013
>> @@ -160,6 +160,8 @@ namespace __sanitizer {
>>    };
>>  #endif
>>
>> +#define IOC_SIZE(nr) (((nr) >> 16) & 0x3fff)
>> +
>>    extern unsigned struct_arpreq_sz;
>>    extern unsigned struct_ifreq_sz;
>>    extern unsigned struct_termios_sz;
>> @@ -177,6 +179,7 @@ namespace __sanitizer {
>>    extern unsigned struct_copr_buffer_sz;
>>    extern unsigned struct_copr_debug_buf_sz;
>>    extern unsigned struct_copr_msg_sz;
>> +  extern unsigned struct_ff_effect_sz;
>>    extern unsigned struct_floppy_drive_params_sz;
>>    extern unsigned struct_floppy_drive_struct_sz;
>>    extern unsigned struct_floppy_fdc_state_sz;
>> @@ -187,6 +190,8 @@ namespace __sanitizer {
>>    extern unsigned struct_format_descr_sz;
>>    extern unsigned struct_hd_driveid_sz;
>>    extern unsigned struct_hd_geometry_sz;
>> +  extern unsigned struct_input_absinfo_sz;
>> +  extern unsigned struct_input_id_sz;
>>    extern unsigned struct_midi_info_sz;
>>    extern unsigned struct_mtget_sz;
>>    extern unsigned struct_mtop_sz;
>> @@ -203,15 +208,16 @@ namespace __sanitizer {
>>  #endif
>>
>>  #if SANITIZER_LINUX && !SANITIZER_ANDROID
>> +  extern unsigned mpu_command_rec_sz;
>>    extern unsigned struct_audio_buf_info_sz;
>>    extern unsigned struct_ax25_parms_struct_sz;
>>    extern unsigned struct_cyclades_monitor_sz;
>> +  extern unsigned struct_input_keymap_entry_sz;
>>    extern unsigned struct_ipx_config_data_sz;
>>    extern unsigned struct_kbdiacrs_sz;
>>    extern unsigned struct_kbentry_sz;
>>    extern unsigned struct_kbkeycode_sz;
>>    extern unsigned struct_kbsentry_sz;
>> -  extern unsigned mpu_command_rec_sz;
>>    extern unsigned struct_mtconfiginfo_sz;
>>    extern unsigned struct_nr_parms_struct_sz;
>>    extern unsigned struct_ppp_stats_sz;
>> @@ -279,6 +285,26 @@ namespace __sanitizer {
>>    extern unsigned IOCTL_SIOCGETVIFCNT;
>>  #endif
>>  #if SANITIZER_LINUX
>> +  extern unsigned IOCTL_EVIOCGABS;
>> +  extern unsigned IOCTL_EVIOCGBIT;
>> +  extern unsigned IOCTL_EVIOCGEFFECTS;
>> +  extern unsigned IOCTL_EVIOCGID;
>> +  extern unsigned IOCTL_EVIOCGKEY;
>> +  extern unsigned IOCTL_EVIOCGKEYCODE;
>> +  extern unsigned IOCTL_EVIOCGLED;
>> +  extern unsigned IOCTL_EVIOCGNAME;
>> +  extern unsigned IOCTL_EVIOCGPHYS;
>> +  extern unsigned IOCTL_EVIOCGRAB;
>> +  extern unsigned IOCTL_EVIOCGREP;
>> +  extern unsigned IOCTL_EVIOCGSND;
>> +  extern unsigned IOCTL_EVIOCGSW;
>> +  extern unsigned IOCTL_EVIOCGUNIQ;
>> +  extern unsigned IOCTL_EVIOCGVERSION;
>> +  extern unsigned IOCTL_EVIOCRMFF;
>> +  extern unsigned IOCTL_EVIOCSABS;
>> +  extern unsigned IOCTL_EVIOCSFF;
>> +  extern unsigned IOCTL_EVIOCSKEYCODE;
>> +  extern unsigned IOCTL_EVIOCSREP;
>>    extern unsigned IOCTL_BLKFLSBUF;
>>    extern unsigned IOCTL_BLKGETSIZE;
>>    extern unsigned IOCTL_BLKRAGET;
>> @@ -534,6 +560,9 @@ namespace __sanitizer {
>>    extern unsigned IOCTL_EQL_GETSLAVECFG;
>>    extern unsigned IOCTL_EQL_SETMASTRCFG;
>>    extern unsigned IOCTL_EQL_SETSLAVECFG;
>> +  extern unsigned IOCTL_EVIOCGKEYCODE_V2;
>> +  extern unsigned IOCTL_EVIOCGPROP;
>> +  extern unsigned IOCTL_EVIOCSKEYCODE_V2;
>>    extern unsigned IOCTL_FS_IOC_GETFLAGS;
>>    extern unsigned IOCTL_FS_IOC_GETVERSION;
>>    extern unsigned IOCTL_FS_IOC_SETFLAGS;
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/
>>
> sanitizer_common/tests/CMakeLists.txt?rev=184405&r1=184404&r2=184405&view=diff
>>
> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt
> (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/tests/CMakeLists.txt Thu
>> Jun 20 04:19:28 2013
>> @@ -5,6 +5,7 @@ set(SANITIZER_UNITTESTS
>>    sanitizer_atomic_test.cc
>>    sanitizer_common_test.cc
>>    sanitizer_flags_test.cc
>> +  sanitizer_ioctl_test.cc
>>    sanitizer_libc_test.cc
>>    sanitizer_linux_test.cc
>>    sanitizer_list_test.cc
>> @@ -31,7 +32,8 @@ set(SANITIZER_TEST_CFLAGS_COMMON
>>    -I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common
>>    -DGTEST_HAS_RTTI=0
>>    -O2 -g -fno-rtti
>> -  -Wall -Werror -Werror=sign-compare)
>> +  -Wall -Werror -Werror=sign-compare
>> +  -Wno-unused-function)
>>
>>  set(SANITIZER_TEST_LINK_FLAGS_COMMON
>>    -lstdc++ -ldl)
>>
>> Added:
> compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_ioctl_test.cc
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/
>> sanitizer_common/tests/sanitizer_ioctl_test.cc?rev=184405&view=auto
>>
> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/tests/
>> sanitizer_ioctl_test.cc (added)
>> +++ compiler-rt/trunk/lib/sanitizer_common/tests/
>> sanitizer_ioctl_test.cc Thu Jun 20 04:19:28 2013
>> @@ -0,0 +1,72 @@
>> +//===-- sanitizer_ioctl_test.cc
>> -------------------------------------------===//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>>
> ===----------------------------------------------------------------------===//
>> +//
>> +// Tests for ioctl interceptor implementation in sanitizer_common.
>> +//
>> +//
>>
> ===----------------------------------------------------------------------===//
>> +
>> +#include "sanitizer_common/sanitizer_platform.h"
>> +#if SANITIZER_LINUX
>> +
>> +#include <linux/input.h>
>> +#include <vector>
>> +
>> +#include "interception/interception.h"
>> +#include "sanitizer_test_utils.h"
>> +#include "sanitizer_common/sanitizer_platform_limits_posix.h"
>> +#include "sanitizer_common/sanitizer_common.h"
>> +#include "gtest/gtest.h"
>> +
>> +
>> +using namespace __sanitizer;
>> +
>> +#define COMMON_INTERCEPTOR_READ_RANGE(ctx, ptr, sz) \
>> +  do {                                              \
>> +    (void) ctx;                                     \
>> +    (void) ptr;                                     \
>> +    (void) sz;                                      \
>> +  } while (0)
>> +#define COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ptr, sz) \
>> +  do {                                               \
>> +    (void) ctx;                                      \
>> +    (void) ptr;                                      \
>> +    (void) sz;                                       \
>> +  } while (0)
>> +
>> +#include "sanitizer_common/sanitizer_common_interceptors_ioctl.inc"
>> +
>> +static struct IoctlInit {
>> +  IoctlInit() { ioctl_init(); }
>> +} ioctl_static_initializer;
>> +
>> +TEST(SanitizerIoctl, Fixup) {
>> +  EXPECT_EQ((unsigned)FIONBIO, ioctl_request_fixup(FIONBIO));
>> +
>> +  EXPECT_EQ(EVIOCGBIT(0, 0), ioctl_request_fixup(EVIOCGBIT(0, 16)));
>> +  EXPECT_EQ(EVIOCGBIT(0, 0), ioctl_request_fixup(EVIOCGBIT(1, 16)));
>> +  EXPECT_EQ(EVIOCGBIT(0, 0), ioctl_request_fixup(EVIOCGBIT(1, 17)));
>> +  EXPECT_EQ(EVIOCGBIT(0, 0), ioctl_request_fixup(EVIOCGBIT(31, 16)));
>> +  EXPECT_NE(EVIOCGBIT(0, 0), ioctl_request_fixup(EVIOCGBIT(32, 16)));
>> +
>> +  EXPECT_EQ(EVIOCGABS(0), ioctl_request_fixup(EVIOCGABS(0)));
>> +  EXPECT_EQ(EVIOCGABS(0), ioctl_request_fixup(EVIOCGABS(5)));
>> +  EXPECT_EQ(EVIOCGABS(0), ioctl_request_fixup(EVIOCGABS(63)));
>> +  EXPECT_NE(EVIOCGABS(0), ioctl_request_fixup(EVIOCGABS(64)));
>> +
>> +  EXPECT_EQ(EVIOCSABS(0), ioctl_request_fixup(EVIOCSABS(0)));
>> +  EXPECT_EQ(EVIOCSABS(0), ioctl_request_fixup(EVIOCSABS(5)));
>> +  EXPECT_EQ(EVIOCSABS(0), ioctl_request_fixup(EVIOCSABS(63)));
>> +  EXPECT_NE(EVIOCSABS(0), ioctl_request_fixup(EVIOCSABS(64)));
>> +
>> +  const ioctl_desc *desc = ioctl_lookup(EVIOCGKEY(16));
>> +  EXPECT_NE((void *)0, desc);
>> +  EXPECT_EQ(EVIOCGKEY(0), desc->req);
>> +}
>> +
>> +#endif // SANITIZER_LINUX
>>
>> Propchange: compiler-rt/trunk/lib/sanitizer_common/tests/
>> sanitizer_ioctl_test.cc
>>
> ------------------------------------------------------------------------------
>>     svn:eol-style = LF
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
> **********************************************************************
> This email and any files transmitted with it are confidential and intended
> solely for the use of the individual or entity to whom they are addressed.
> If you have received this email in error please notify postmaster at scee.net
> This footnote also confirms that this email message has been checked for
> all known viruses.
> Sony Computer Entertainment Europe Limited
> Registered Office: 10 Great Marlborough Street, London W1F 7LP, United
> Kingdom
> Registered in England: 3277793
> **********************************************************************
>
> P Please consider the environment before printing this e-mail



More information about the llvm-commits mailing list