From: Steve M. <ste...@li...> - 2012-10-23 17:26:42
|
Hi, Two patches to add support for AArch64, the new 64-bit processor architecture from ARM. Patch 1: Update errno and ioctl definitions for newer Linux Patch 2: Add AArch64 support to strace Cheers, -- Steve McIntyre ste...@li... <http://www.linaro.org/> Linaro.org | Open source software for ARM SoCs |
From: Steve M. <ste...@li...> - 2012-10-23 17:26:10
|
Update errno and ioctl definitions for newer Linux Signed-off-by: Steve McIntyre <ste...@li...> --- linux/errnoent.h | 4 +- linux/ioctlent.h.in | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+), 2 deletions(-) diff --git a/linux/errnoent.h b/linux/errnoent.h index e43bff5..c2ac683 100644 --- a/linux/errnoent.h +++ b/linux/errnoent.h @@ -519,8 +519,8 @@ "ERESTARTNOHAND", /* 514 */ "ENOIOCTLCMD", /* 515 */ "ERESTART_RESTARTBLOCK", /* 516 */ - "ERRNO_517", /* 517 */ - "ERRNO_518", /* 518 */ + "EPROBE_DEFER", /* 517 */ + "EOPENSTALE", /* 518 */ "ERRNO_519", /* 519 */ "ERRNO_520", /* 520 */ "EBADHANDLE", /* 521 */ diff --git a/linux/ioctlent.h.in b/linux/ioctlent.h.in index 98ebbcc..1ca126a 100644 --- a/linux/ioctlent.h.in +++ b/linux/ioctlent.h.in @@ -2,6 +2,7 @@ {"linux/fs.h", "FIBMAP", 0x0001}, {"linux/fs.h", "FIGETBSZ", 0x0002}, {"linux/fd.h", "FDGETPRM", 0x0204}, + {"linux/fd.h", "FDGETPRM32", 0x0204}, {"linux/fd.h", "FDGETMAXERRS", 0x020e}, {"linux/fd.h", "FDGETDRVTYP", 0x020f}, {"linux/fd.h", "FDGETDRVPRM", 0x0211}, @@ -114,6 +115,7 @@ {"linux/fs.h", "BLKPBSZGET", 0x127b}, {"linux/fs.h", "BLKDISCARDZEROES", 0x127c}, {"linux/fs.h", "BLKSECDISCARD", 0x127d}, + {"linux/fs.h", "BLKROTATIONAL", 0x127e}, {"rdma/ib_user_mad.h", "IB_USER_MAD_REGISTER_AGENT", 0x1b01}, {"rdma/ib_user_mad.h", "IB_USER_MAD_UNREGISTER_AGENT", 0x1b02}, {"rdma/ib_user_mad.h", "IB_USER_MAD_ENABLE_PKEY", 0x1b03}, @@ -166,6 +168,7 @@ {"linux/firewire-cdev.h", "FW_CDEV_IOC_SEND_PHY_PACKET", 0x2315}, {"linux/firewire-cdev.h", "FW_CDEV_IOC_RECEIVE_PHY_PACKETS", 0x2316}, {"linux/firewire-cdev.h", "FW_CDEV_IOC_SET_ISO_CHANNELS", 0x2317}, + {"linux/firewire-cdev.h", "FW_CDEV_IOC_FLUSH_ISO", 0x2318}, {"linux/perf_event.h", "PERF_EVENT_IOC_ENABLE", 0x2400}, {"linux/perf_event.h", "PERF_EVENT_IOC_DISABLE", 0x2401}, {"linux/perf_event.h", "PERF_EVENT_IOC_REFRESH", 0x2402}, @@ -266,6 +269,7 @@ {"linux/cciss_ioctl.h", "CCISS_BIG_PASSTHRU", 0x4212}, {"linux/cciss_ioctl.h", "CCISS_BIG_PASSTHRU32", 0x4212}, {"linux/soundcard.h", "SNDCTL_COPR_RESET", 0x4300}, + {"sound/compress_offload.h", "SNDRV_COMPRESS_IOCTL_VERSION", 0x4300}, {"linux/capi.h", "CAPI_REGISTER", 0x4301}, {"linux/soundcard.h", "SNDCTL_COPR_LOAD", 0x4301}, {"linux/soundcard.h", "SNDCTL_COPR_RDATA", 0x4302}, @@ -280,14 +284,25 @@ {"linux/soundcard.h", "SNDCTL_COPR_SENDMSG", 0x4308}, {"linux/capi.h", "CAPI_GET_PROFILE", 0x4309}, {"linux/soundcard.h", "SNDCTL_COPR_RCVMSG", 0x4309}, + {"sound/compress_offload.h", "SNDRV_COMPRESS_GET_CAPS", 0x4310}, + {"sound/compress_offload.h", "SNDRV_COMPRESS_GET_CODEC_CAPS", 0x4311}, + {"sound/compress_offload.h", "SNDRV_COMPRESS_SET_PARAMS", 0x4312}, + {"sound/compress_offload.h", "SNDRV_COMPRESS_GET_PARAMS", 0x4313}, {"linux/capi.h", "CAPI_MANUFACTURER_CMD", 0x4320}, + {"sound/compress_offload.h", "SNDRV_COMPRESS_TSTAMP", 0x4320}, {"linux/capi.h", "CAPI_GET_ERRCODE", 0x4321}, + {"sound/compress_offload.h", "SNDRV_COMPRESS_AVAIL", 0x4321}, {"linux/capi.h", "CAPI_INSTALLED", 0x4322}, {"linux/capi.h", "CAPI_GET_FLAGS", 0x4323}, {"linux/capi.h", "CAPI_SET_FLAGS", 0x4324}, {"linux/capi.h", "CAPI_CLR_FLAGS", 0x4325}, {"linux/capi.h", "CAPI_NCCI_OPENCOUNT", 0x4326}, {"linux/capi.h", "CAPI_NCCI_GETUNIT", 0x4327}, + {"sound/compress_offload.h", "SNDRV_COMPRESS_PAUSE", 0x4330}, + {"sound/compress_offload.h", "SNDRV_COMPRESS_RESUME", 0x4331}, + {"sound/compress_offload.h", "SNDRV_COMPRESS_START", 0x4332}, + {"sound/compress_offload.h", "SNDRV_COMPRESS_STOP", 0x4333}, + {"sound/compress_offload.h", "SNDRV_COMPRESS_DRAIN", 0x4334}, {"linux/input.h", "EVIOCGVERSION", 0x4501}, {"linux/input.h", "EVIOCGID", 0x4502}, {"linux/input.h", "EVIOCGREP", 0x4503}, @@ -299,6 +314,7 @@ {"linux/input.h", "EVIOCRMFF", 0x4581}, {"linux/input.h", "EVIOCGEFFECTS", 0x4584}, {"linux/input.h", "EVIOCGRAB", 0x4590}, + {"linux/input.h", "EVIOCSCLOCKID", 0x45a0}, {"linux/fb.h", "FBIOGET_VSCREENINFO", 0x4600}, {"video/da8xx-fb.h", "FBIOGET_CONTRAST", 0x4601}, {"linux/fb.h", "FBIOPUT_VSCREENINFO", 0x4601}, @@ -558,6 +574,7 @@ {"mtd/mtd-abi.h", "MEMISLOCKED", 0x4d17}, {"mtd/mtd-abi.h", "MEMWRITE", 0x4d18}, {"linux/soundcard.h", "SOUND_MIXER_INFO", 0x4d65}, + {"linux/soundcard.h", "SOUND_OLD_MIXER_INFO", 0x4d65}, {"linux/soundcard.h", "SOUND_MIXER_ACCESS", 0x4d66}, {"linux/soundcard.h", "SOUND_MIXER_AGC", 0x4d67}, {"linux/soundcard.h", "SOUND_MIXER_3DSE", 0x4d68}, @@ -569,6 +586,9 @@ {"linux/soundcard.h", "SOUND_MIXER_GETLEVELS", 0x4d74}, {"linux/soundcard.h", "SOUND_MIXER_SETLEVELS", 0x4d75}, {"linux/soundcard.h", "OSS_GETVERSION", 0x4d76}, + {"linux/nvme.h", "NVME_IOCTL_ID", 0x4e40}, + {"linux/nvme.h", "NVME_IOCTL_ADMIN_CMD", 0x4e41}, + {"linux/nvme.h", "NVME_IOCTL_SUBMIT_IO", 0x4e42}, {"mtd/ubi-user.h", "UBI_IOCVOLUP", 0x4f00}, {"mtd/ubi-user.h", "UBI_IOCEBER", 0x4f01}, {"mtd/ubi-user.h", "UBI_IOCEBCH", 0x4f02}, @@ -737,21 +757,91 @@ {"sound/asound.h", "SNDRV_TIMER_IOCTL_PVERSION", 0x5400}, {"linux/soundcard.h", "SNDCTL_TMR_TIMEBASE", 0x5401}, {"sound/asound.h", "SNDRV_TIMER_IOCTL_NEXT_DEVICE", 0x5401}, + {"asm-generic/ioctls.h", "TCGETS", 0x5401}, {"linux/soundcard.h", "SNDCTL_TMR_START", 0x5402}, {"sound/asound.h", "SNDRV_TIMER_IOCTL_TREAD", 0x5402}, + {"asm-generic/ioctls.h", "TCSETS", 0x5402}, {"linux/soundcard.h", "SNDCTL_TMR_STOP", 0x5403}, {"sound/asound.h", "SNDRV_TIMER_IOCTL_GINFO", 0x5403}, + {"asm-generic/ioctls.h", "TCSETSW", 0x5403}, {"linux/soundcard.h", "SNDCTL_TMR_CONTINUE", 0x5404}, {"sound/asound.h", "SNDRV_TIMER_IOCTL_GPARAMS", 0x5404}, + {"asm-generic/ioctls.h", "TCSETSF", 0x5404}, {"linux/soundcard.h", "SNDCTL_TMR_TEMPO", 0x5405}, {"sound/asound.h", "SNDRV_TIMER_IOCTL_GSTATUS", 0x5405}, + {"asm-generic/ioctls.h", "TCGETA", 0x5405}, {"linux/soundcard.h", "SNDCTL_TMR_SOURCE", 0x5406}, + {"asm-generic/ioctls.h", "TCSETA", 0x5406}, {"linux/soundcard.h", "SNDCTL_TMR_METRONOME", 0x5407}, + {"asm-generic/ioctls.h", "TCSETAW", 0x5407}, {"linux/soundcard.h", "SNDCTL_TMR_SELECT", 0x5408}, + {"asm-generic/ioctls.h", "TCSETAF", 0x5408}, + {"asm-generic/ioctls.h", "TCSBRK", 0x5409}, + {"asm-generic/ioctls.h", "TCXONC", 0x540a}, + {"asm-generic/ioctls.h", "TCFLSH", 0x540b}, + {"asm-generic/ioctls.h", "TIOCEXCL", 0x540c}, + {"asm-generic/ioctls.h", "TIOCNXCL", 0x540d}, + {"asm-generic/ioctls.h", "TIOCSCTTY", 0x540e}, + {"asm-generic/ioctls.h", "TIOCGPGRP", 0x540f}, {"sound/asound.h", "SNDRV_TIMER_IOCTL_SELECT", 0x5410}, + {"asm-generic/ioctls.h", "TIOCSPGRP", 0x5410}, {"sound/asound.h", "SNDRV_TIMER_IOCTL_INFO", 0x5411}, + {"asm-generic/ioctls.h", "TIOCOUTQ", 0x5411}, {"sound/asound.h", "SNDRV_TIMER_IOCTL_PARAMS", 0x5412}, + {"asm-generic/ioctls.h", "TIOCSTI", 0x5412}, + {"asm-generic/ioctls.h", "TIOCGWINSZ", 0x5413}, {"sound/asound.h", "SNDRV_TIMER_IOCTL_STATUS", 0x5414}, + {"asm-generic/ioctls.h", "TIOCSWINSZ", 0x5414}, + {"asm-generic/ioctls.h", "TIOCMGET", 0x5415}, + {"asm-generic/ioctls.h", "TIOCMBIS", 0x5416}, + {"asm-generic/ioctls.h", "TIOCMBIC", 0x5417}, + {"asm-generic/ioctls.h", "TIOCMSET", 0x5418}, + {"asm-generic/ioctls.h", "TIOCGSOFTCAR", 0x5419}, + {"asm-generic/ioctls.h", "TIOCSSOFTCAR", 0x541a}, + {"asm-generic/ioctls.h", "FIONREAD", 0x541b}, + {"asm-generic/ioctls.h", "TIOCLINUX", 0x541c}, + {"asm-generic/ioctls.h", "TIOCCONS", 0x541d}, + {"asm-generic/ioctls.h", "TIOCGSERIAL", 0x541e}, + {"asm-generic/ioctls.h", "TIOCSSERIAL", 0x541f}, + {"asm-generic/ioctls.h", "TIOCPKT", 0x5420}, + {"asm-generic/ioctls.h", "FIONBIO", 0x5421}, + {"asm-generic/ioctls.h", "TIOCNOTTY", 0x5422}, + {"asm-generic/ioctls.h", "TIOCSETD", 0x5423}, + {"asm-generic/ioctls.h", "TIOCGETD", 0x5424}, + {"asm-generic/ioctls.h", "TCSBRKP", 0x5425}, + {"asm-generic/ioctls.h", "TIOCSBRK", 0x5427}, + {"asm-generic/ioctls.h", "TIOCCBRK", 0x5428}, + {"asm-generic/ioctls.h", "TIOCGSID", 0x5429}, + {"asm-generic/ioctls.h", "TCGETS2", 0x542a}, + {"asm-generic/ioctls.h", "TCSETS2", 0x542b}, + {"asm-generic/ioctls.h", "TCSETSW2", 0x542c}, + {"asm-generic/ioctls.h", "TCSETSF2", 0x542d}, + {"asm-generic/ioctls.h", "TIOCGRS485", 0x542e}, + {"asm-generic/ioctls.h", "TIOCSRS485", 0x542f}, + {"asm-generic/ioctls.h", "TIOCGPTN", 0x5430}, + {"asm-generic/ioctls.h", "TIOCSPTLCK", 0x5431}, + {"asm-generic/ioctls.h", "TCGETX", 0x5432}, + {"asm-generic/ioctls.h", "TIOCGDEV", 0x5432}, + {"asm-generic/ioctls.h", "TCSETX", 0x5433}, + {"asm-generic/ioctls.h", "TCSETXF", 0x5434}, + {"asm-generic/ioctls.h", "TCSETXW", 0x5435}, + {"asm-generic/ioctls.h", "TIOCSIG", 0x5436}, + {"asm-generic/ioctls.h", "TIOCVHANGUP", 0x5437}, + {"asm-generic/ioctls.h", "FIONCLEX", 0x5450}, + {"asm-generic/ioctls.h", "FIOCLEX", 0x5451}, + {"asm-generic/ioctls.h", "FIOASYNC", 0x5452}, + {"asm-generic/ioctls.h", "TIOCSERCONFIG", 0x5453}, + {"asm-generic/ioctls.h", "TIOCSERGWILD", 0x5454}, + {"asm-generic/ioctls.h", "TIOCSERSWILD", 0x5455}, + {"asm-generic/ioctls.h", "TIOCGLCKTRMIOS", 0x5456}, + {"asm-generic/ioctls.h", "TIOCSLCKTRMIOS", 0x5457}, + {"asm-generic/ioctls.h", "TIOCSERGSTRUCT", 0x5458}, + {"asm-generic/ioctls.h", "TIOCSERGETLSR", 0x5459}, + {"asm-generic/ioctls.h", "TIOCSERGETMULTI", 0x545a}, + {"asm-generic/ioctls.h", "TIOCSERSETMULTI", 0x545b}, + {"asm-generic/ioctls.h", "TIOCMIWAIT", 0x545c}, + {"asm-generic/ioctls.h", "TIOCGICOUNT", 0x545d}, + {"asm-generic/ioctls.h", "FIOQSIZE", 0x5460}, {"sound/asound.h", "SNDRV_TIMER_IOCTL_START", 0x54a0}, {"sound/asound.h", "SNDRV_TIMER_IOCTL_STOP", 0x54a1}, {"sound/asound.h", "SNDRV_TIMER_IOCTL_CONTINUE", 0x54a2}, @@ -852,7 +942,9 @@ {"linux/vt.h", "VT_SETMODE", 0x5602}, {"linux/vt.h", "VT_GETSTATE", 0x5603}, {"linux/videodev2.h", "VIDIOC_G_FMT", 0x5604}, + {"linux/v4l2-subdev.h", "VIDIOC_SUBDEV_G_FMT", 0x5604}, {"linux/vt.h", "VT_SENDSIG", 0x5604}, + {"linux/v4l2-subdev.h", "VIDIOC_SUBDEV_S_FMT", 0x5605}, {"linux/videodev2.h", "VIDIOC_S_FMT", 0x5605}, {"linux/vt.h", "VT_RELDISP", 0x5605}, {"linux/vt.h", "VT_ACTIVATE", 0x5606}, @@ -901,6 +993,8 @@ {"linux/videodev2.h", "VIDIOC_S_FREQUENCY", 0x5639}, {"linux/videodev2.h", "VIDIOC_CROPCAP", 0x563a}, {"linux/videodev2.h", "VIDIOC_G_CROP", 0x563b}, + {"linux/v4l2-subdev.h", "VIDIOC_SUBDEV_G_CROP", 0x563b}, + {"linux/v4l2-subdev.h", "VIDIOC_SUBDEV_S_CROP", 0x563c}, {"linux/videodev2.h", "VIDIOC_S_CROP", 0x563c}, {"linux/videodev2.h", "VIDIOC_G_JPEGCOMP", 0x563d}, {"linux/videodev2.h", "VIDIOC_S_JPEGCOMP", 0x563e}, @@ -935,9 +1029,17 @@ {"linux/videodev2.h", "VIDIOC_UNSUBSCRIBE_EVENT", 0x565b}, {"linux/videodev2.h", "VIDIOC_CREATE_BUFS", 0x565c}, {"linux/videodev2.h", "VIDIOC_PREPARE_BUF", 0x565d}, + {"linux/videodev2.h", "VIDIOC_G_SELECTION", 0x565e}, + {"linux/videodev2.h", "VIDIOC_S_SELECTION", 0x565f}, + {"linux/videodev2.h", "VIDIOC_DECODER_CMD", 0x5660}, + {"linux/videodev2.h", "VIDIOC_TRY_DECODER_CMD", 0x5661}, + {"linux/videodev2.h", "VIDIOC_ENUM_DV_TIMINGS", 0x5662}, + {"linux/videodev2.h", "VIDIOC_QUERY_DV_TIMINGS", 0x5663}, + {"linux/videodev2.h", "VIDIOC_DV_TIMINGS_CAP", 0x5664}, {"linux/ivtvfb.h", "IVTVFB_IOC_DMA_FRAME", 0x56c0}, {"linux/ivtv.h", "IVTV_IOC_DMA_FRAME", 0x56c0}, {"media/si4713.h", "SI4713_IOC_MEASURE_RNL", 0x56c0}, + {"linux/ivtv.h", "IVTV_IOC_PASSTHROUGH_MODE", 0x56c1}, {"media/davinci/vpfe_capture.h", "VPFE_CMD_S_CCDC_RAW_PARAMS", 0x56c1}, {"sound/asound.h", "SNDRV_RAWMIDI_IOCTL_PVERSION", 0x5700}, {"linux/watchdog.h", "WDIOC_GETSUPPORT", 0x5700}, @@ -1387,6 +1489,8 @@ {"linux/rtc.h", "RTC_WKALM_RD", 0x7010}, {"linux/rtc.h", "RTC_PLL_GET", 0x7011}, {"linux/rtc.h", "RTC_PLL_SET", 0x7012}, + {"linux/rtc.h", "RTC_VL_READ", 0x7013}, + {"linux/rtc.h", "RTC_VL_CLR", 0x7014}, {"linux/nvram.h", "NVRAM_INIT", 0x7040}, {"linux/nvram.h", "NVRAM_SETCKS", 0x7041}, {"linux/ppdev.h", "PPSETMODE", 0x7080}, @@ -1619,6 +1723,13 @@ {"linux/media.h", "MEDIA_IOC_ENUM_ENTITIES", 0x7c01}, {"linux/media.h", "MEDIA_IOC_ENUM_LINKS", 0x7c02}, {"linux/media.h", "MEDIA_IOC_SETUP_LINK", 0x7c03}, + {"asm-generic/sockios.h", "FIOSETOWN", 0x8901}, + {"asm-generic/sockios.h", "SIOCSPGRP", 0x8902}, + {"asm-generic/sockios.h", "FIOGETOWN", 0x8903}, + {"asm-generic/sockios.h", "SIOCGPGRP", 0x8904}, + {"asm-generic/sockios.h", "SIOCATMARK", 0x8905}, + {"asm-generic/sockios.h", "SIOCGSTAMP", 0x8906}, + {"asm-generic/sockios.h", "SIOCGSTAMPNS", 0x8907}, {"linux/sockios.h", "SIOCADDRT", 0x890b}, {"linux/sockios.h", "SIOCDELRT", 0x890c}, {"linux/sockios.h", "SIOCRTMSG", 0x890d}, @@ -1787,6 +1898,9 @@ {"linux/kvm.h", "KVM_SET_USER_MEMORY_REGION", 0xae46}, {"linux/kvm.h", "KVM_SET_TSS_ADDR", 0xae47}, {"linux/kvm.h", "KVM_SET_IDENTITY_MAP_ADDR", 0xae48}, + {"linux/kvm.h", "KVM_S390_UCAS_MAP", 0xae50}, + {"linux/kvm.h", "KVM_S390_UCAS_UNMAP", 0xae51}, + {"linux/kvm.h", "KVM_S390_VCPU_FAULT", 0xae52}, {"linux/kvm.h", "KVM_CREATE_IRQCHIP", 0xae60}, {"linux/kvm.h", "KVM_IRQ_LINE", 0xae61}, {"linux/kvm.h", "KVM_GET_IRQCHIP", 0xae62}, @@ -1852,12 +1966,19 @@ {"linux/kvm.h", "KVM_SET_TSC_KHZ", 0xaea2}, {"linux/kvm.h", "KVM_ENABLE_CAP", 0xaea3}, {"linux/kvm.h", "KVM_GET_TSC_KHZ", 0xaea3}, + {"linux/kvm.h", "KVM_ASSIGN_SET_INTX_MASK", 0xaea4}, {"linux/kvm.h", "KVM_GET_XSAVE", 0xaea4}, {"linux/kvm.h", "KVM_SET_XSAVE", 0xaea5}, + {"linux/kvm.h", "KVM_SIGNAL_MSI", 0xaea5}, {"linux/kvm.h", "KVM_GET_XCRS", 0xaea6}, + {"linux/kvm.h", "KVM_PPC_GET_SMMU_INFO", 0xaea6}, {"linux/kvm.h", "KVM_SET_XCRS", 0xaea7}, {"linux/kvm.h", "KVM_CREATE_SPAPR_TCE", 0xaea8}, {"linux/kvm.h", "KVM_ALLOCATE_RMA", 0xaea9}, + {"linux/kvm.h", "KVM_DIRTY_TLB", 0xaeaa}, + {"linux/kvm.h", "KVM_GET_ONE_REG", 0xaeab}, + {"linux/kvm.h", "KVM_SET_ONE_REG", 0xaeac}, + {"linux/kvm.h", "KVM_KVMCLOCK_CTRL", 0xaead}, {"linux/vhost.h", "VHOST_GET_FEATURES", 0xaf00}, {"linux/vhost.h", "VHOST_SET_FEATURES", 0xaf00}, {"linux/vhost.h", "VHOST_SET_OWNER", 0xaf01}, -- 1.7.10.4 Cheers, -- Steve McIntyre ste...@li... <http://www.linaro.org/> Linaro.org | Open source software for ARM SoCs |
From: Steve M. <ste...@li...> - 2012-10-23 17:26:26
|
Add AArch64 support to strace AArch64 has been included in Linux from 3.7 onwards. Add support for AArch64 in strace, tested on Linux in a simulator. * configure.ac: Support AArch64. * defs.h: Support AArch64. * ipc.c: Support AArch64. * process.c: Support AArch64. * syscall.c: Support AArch64. Uses new PTRACE_GETREGSET ptrace request instead of PTRACE_GETREGS, so also include sys/uio.h and elf.h for needed definitions. * linux/aarch64/*: Set up definitions for AArch64. Initially based on ARM defs, added syscallent.h based on kernel 3.7 version of asm-generic/unistd.h. Signed-off-by: Steve McIntyre <ste...@li...> --- configure.ac | 4 + defs.h | 5 +- ipc.c | 2 +- linux/aarch64/ioctlent.h.in | 1 + linux/aarch64/syscallent.h | 1096 +++++++++++++++++++++++++++++++++++++++++++ process.c | 7 +- syscall.c | 34 ++ 7 files changed, 1143 insertions(+), 6 deletions(-) create mode 100644 linux/aarch64/ioctlent.h.in create mode 100644 linux/aarch64/syscallent.h diff --git a/configure.ac b/configure.ac index a9f8d15..f44eaf1 100644 --- a/configure.ac +++ b/configure.ac @@ -56,6 +56,10 @@ arm*) arch=arm AC_DEFINE([ARM], 1, [Define for the ARM architecture.]) ;; +aarch64*) + arch=aarch64 + AC_DEFINE([AARCH64], 1, [Define for the AArch64 architecture.]) + ;; avr32*) arch=avr32 AC_DEFINE([AVR32], 1, [Define for the AVR32 architecture.]) diff --git a/defs.h b/defs.h index 7814bbd..b0846cd 100644 --- a/defs.h +++ b/defs.h @@ -134,7 +134,7 @@ extern char *stpcpy(char *dst, const char *src); # define LINUX_MIPS64 #endif -#if (defined(LINUXSPARC) || defined(X86_64) || defined(ARM) || defined(AVR32)) && defined(__GLIBC__) +#if (defined(LINUXSPARC) || defined(X86_64) || defined(ARM) || defined(AARCH64) || defined(AVR32)) && defined(__GLIBC__) # include <sys/ptrace.h> #else /* Work around awkward prototype in ptrace.h. */ @@ -389,7 +389,8 @@ struct tcb { #if defined(ALPHA) || defined(AVR32) || defined(SPARC) || defined(SPARC64) \ || defined(POWERPC) || defined(IA64) || defined(HPPA) \ || defined(SH) || defined(SH64) || defined(S390) || defined(S390X) \ - || defined(ARM) || defined(MIPS) || defined(BFIN) || defined(TILE) + || defined(ARM) || defined(AARCH64) || defined(MIPS) || defined(BFIN) \ + || defined(TILE) /* This tracee has entered into execve syscall. Expect post-execve SIGTRAP * to happen. (When it is detected, tracee is continued and this bit is cleared.) */ diff --git a/ipc.c b/ipc.c index f4ec522..0bde1cf 100644 --- a/ipc.c +++ b/ipc.c @@ -174,7 +174,7 @@ indirect_ipccall(struct tcb *tcp) #if defined IA64 return tcp->scno < 1024; /* ia32 emulation syscalls are low */ #endif -#if defined(ALPHA) || defined(MIPS) || defined(HPPA) || defined(__ARM_EABI__) +#if defined(ALPHA) || defined(MIPS) || defined(HPPA) || defined(__ARM_EABI__) || defined(AARCH64) return 0; #endif return 1; diff --git a/linux/aarch64/ioctlent.h.in b/linux/aarch64/ioctlent.h.in new file mode 100644 index 0000000..83e6eb2 --- /dev/null +++ b/linux/aarch64/ioctlent.h.in @@ -0,0 +1 @@ +#include "../arm/ioctlent.h.in" diff --git a/linux/aarch64/syscallent.h b/linux/aarch64/syscallent.h new file mode 100644 index 0000000..76b4df3 --- /dev/null +++ b/linux/aarch64/syscallent.h @@ -0,0 +1,1096 @@ + { 2, 0, sys_io_setup, "io_setup" }, /* 0 */ + { 1, 0, sys_io_destroy, "io_destroy" }, /* 1 */ + { 3, 0, sys_io_submit, "io_submit" }, /* 2 */ + { 3, 0, sys_io_cancel, "io_cancel" }, /* 3 */ + { 5, 0, sys_io_getevents, "io_getevents" }, /* 4 */ + { 5, TF, sys_setxattr, "setxattr" }, /* 5 */ + { 5, TF, sys_setxattr, "lsetxattr" }, /* 6 */ + { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 7 */ + { 4, TF, sys_getxattr, "getxattr" }, /* 8 */ + { 4, TF, sys_getxattr, "lgetxattr" }, /* 9 */ + { 4, TD, sys_fgetxattr, "fgetxattr" }, /* 10 */ + { 3, TF, sys_listxattr, "listxattr" }, /* 11 */ + { 3, TF, sys_listxattr, "llistxattr" }, /* 12 */ + { 3, TD, sys_flistxattr, "flistxattr" }, /* 13 */ + { 2, TF, sys_removexattr, "removexattr" }, /* 14 */ + { 2, TF, sys_removexattr, "lremovexattr" }, /* 15 */ + { 2, TD, sys_fremovexattr, "fremovexattr" }, /* 16 */ + { 2, TF, sys_getcwd, "getcwd" }, /* 17 */ + { 4, 0, sys_lookup_dcookie, "lookup_dcookie" }, /* 18 */ + { 2, TD, sys_eventfd2, "eventfd2" }, /* 19 */ + { 1, TD, sys_epoll_create1, "epoll_create1" }, /* 20 */ + { 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 21 */ + { 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 22 */ + { 1, TD, sys_dup, "dup" }, /* 23 */ + { 3, TD, sys_dup3, "dup3" }, /* 24 */ + { 3, TD, sys_fcntl, "fcntl" }, /* 25 */ + { 1, TD, sys_inotify_init1, "inotify_init1" }, /* 26 */ + { 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 27 */ + { 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 28 */ + { 3, TD, sys_ioctl, "ioctl" }, /* 29 */ + { 3, 0, sys_ioprio_set, "ioprio_set" }, /* 30 */ + { 2, 0, sys_ioprio_get, "ioprio_get" }, /* 31 */ + { 2, TD, sys_flock, "flock" }, /* 32 */ + { 4, TD|TF, sys_mknodat, "mknodat" }, /* 33 */ + { 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 34 */ + { 3, TD|TF, sys_unlinkat, "unlinkat" }, /* 35 */ + { 3, TD|TF, sys_symlinkat, "symlinkat" }, /* 36 */ + { 5, TD|TF, sys_linkat, "linkat" }, /* 37 */ + { 4, TD|TF, sys_renameat, "renameat" }, /* 38 */ + { 2, TF, sys_umount2, "umount2" }, /* 39 */ + { 5, TF, sys_mount, "mount" }, /* 40 */ + { 2, TF, sys_pivotroot, "pivot_root" }, /* 41 */ + { 3, 0, sys_nfsservctl, "nfsservctl" }, /* 42 */ + { 2, TF, sys_statfs, "statfs64" }, /* 43 */ + { 2, TD, sys_fstatfs, "fstatfs64" }, /* 44 */ + { 2, TF, sys_truncate, "truncate64" }, /* 45 */ + { 2, TD, sys_ftruncate, "ftruncate64" }, /* 46 */ + { 6, TD, sys_fallocate, "fallocate" }, /* 47 */ + { 3, TD|TF, sys_faccessat, "faccessat" }, /* 48 */ + { 1, TF, sys_chdir, "chdir" }, /* 49 */ + { 1, TD, sys_fchdir, "fchdir" }, /* 50 */ + { 1, TF, sys_chroot, "chroot" }, /* 51 */ + { 2, TD, sys_fchmod, "fchmod" }, /* 52 */ + { 3, TD|TF, sys_fchmodat, "fchmodat" }, /* 53 */ + { 5, TD|TF, sys_fchownat, "fchownat" }, /* 54 */ + { 3, TD, sys_fchown, "fchown" }, /* 55 */ + { 4, TD|TF, sys_openat, "openat" }, /* 56 */ + { 1, TD, sys_close, "close" }, /* 57 */ + { 0, 0, sys_vhangup, "vhangup" }, /* 58 */ + { 2, TD, sys_pipe2, "pipe2" }, /* 59 */ + { 4, 0, sys_quotactl, "quotactl" }, /* 60 */ + { 3, TD, sys_getdents64, "getdents64" }, /* 61 */ + { 3, TD, sys_lseek, "lseek" }, /* 62 */ + { 3, TD, sys_read, "read" }, /* 63 */ + { 3, TD, sys_write, "write" }, /* 64 */ + { 3, TD, sys_readv, "readv" }, /* 65 */ + { 3, TD, sys_writev, "writev" }, /* 66 */ + { 5, TD, sys_pread, "pread64" }, /* 67 */ + { 5, TD, sys_pwrite, "pwrite64" }, /* 68 */ + { 5, TD, sys_preadv, "preadv" }, /* 69 */ + { 5, TD, sys_pwritev, "pwritev" }, /* 70 */ + { 4, TD|TN, sys_sendfile, "sendfile" }, /* 71 */ + { 6, TD, sys_pselect6, "pselect6" }, /* 72 */ + { 5, TD, sys_ppoll, "ppoll" }, /* 73 */ + { 4, TD|TS, sys_signalfd4, "signalfd4" }, /* 74 */ + { 4, TD, sys_vmsplice, "vmsplice" }, /* 75 */ + { 6, TD, sys_splice, "splice" }, /* 76 */ + { 4, TD, sys_tee, "tee" }, /* 77 */ + { 4, TD|TF, sys_readlinkat, "readlinkat" }, /* 78 */ + { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 79 */ + { 2, TD, sys_fstat, "fstat" }, /* 80 */ + { 0, 0, sys_sync, "sync" }, /* 81 */ + { 1, TD, sys_fsync, "fsync" }, /* 82 */ + { 1, TD, sys_fdatasync, "fdatasync" }, /* 83 */ + { 4, TD, sys_sync_file_range, "sync_file_range" }, /* 84 */ + { 2, TD, sys_timerfd_create, "timerfd_create" }, /* 85 */ + { 4, TD, sys_timerfd_settime, "timerfd_settime" }, /* 86 */ + { 2, TD, sys_timerfd_gettime, "timerfd_gettime" }, /* 87 */ + { 4, TD|TF, sys_utimensat, "utimensat" }, /* 88 */ + { 1, TF, sys_acct, "acct" }, /* 89 */ + { 2, 0, sys_capget, "capget" }, /* 90 */ + { 2, 0, sys_capset, "capset" }, /* 91 */ + { 1, 0, sys_personality, "personality" }, /* 92 */ + { 1, TP, sys_exit, "exit" }, /* 93 */ + { 1, TP, sys_exit, "exit_group" }, /* 94 */ + { 5, TP, sys_waitid, "waitid" }, /* 95 */ + { 1, 0, sys_set_tid_address, "set_tid_address" }, /* 96 */ + { 1, TP, sys_unshare, "unshare" }, /* 97 */ + { 6, 0, sys_futex, "futex" }, /* 98 */ + { 2, 0, sys_set_robust_list, "set_robust_list" }, /* 99 */ + { 3, 0, sys_get_robust_list, "get_robust_list" }, /* 100 */ + { 2, 0, sys_nanosleep, "nanosleep" }, /* 101 */ + { 2, 0, sys_getitimer, "getitimer" }, /* 102 */ + { 3, 0, sys_setitimer, "setitimer" }, /* 103 */ + { 4, 0, sys_kexec_load, "kexec_load" }, /* 104 */ + { 3, 0, sys_init_module, "init_module" }, /* 105 */ + { 2, 0, sys_delete_module, "delete_module" }, /* 106 */ + { 3, 0, sys_timer_create, "timer_create" }, /* 107 */ + { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 108 */ + { 1, 0, sys_timer_getoverrun, "timer_getoverrun" }, /* 109 */ + { 4, 0, sys_timer_settime, "timer_settime" }, /* 110 */ + { 1, 0, sys_timer_delete, "timer_delete" }, /* 111 */ + { 2, 0, sys_clock_settime, "clock_settime" }, /* 112 */ + { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 113 */ + { 2, 0, sys_clock_getres, "clock_getres" }, /* 114 */ + { 4, 0, sys_clock_nanosleep, "clock_nanosleep" }, /* 115 */ + { 3, 0, sys_syslog, "syslog" }, /* 116 */ + { 4, 0, sys_ptrace, "ptrace" }, /* 117 */ + { 0, 0, sys_sched_setparam, "sched_setparam" }, /* 118 */ + { 3, 0, sys_sched_setscheduler, "sched_setscheduler" }, /* 119 */ + { 1, 0, sys_sched_getscheduler, "sched_getscheduler" }, /* 120 */ + { 2, 0, sys_sched_getparam, "sched_getparam" }, /* 121 */ + { 3, 0, sys_sched_setaffinity, "sched_setaffinity" }, /* 122 */ + { 3, 0, sys_sched_getaffinity, "sched_getaffinity" }, /* 123 */ + { 0, 0, sys_sched_yield, "sched_yield" }, /* 124 */ + { 1, 0, sys_sched_get_priority_max, "sched_get_priority_max" }, /* 125 */ + { 1, 0, sys_sched_get_priority_min, "sched_get_priority_min" }, /* 126 */ + { 2, 0, sys_sched_rr_get_interval, "sched_rr_get_interval" }, /* 127 */ + { 0, 0, sys_restart_syscall, "restart_syscall" }, /* 128 */ + { 2, TS, sys_kill, "kill" }, /* 129 */ + { 2, TS, sys_kill, "tkill" }, /* 130 */ + { 3, TS, sys_tgkill, "tgkill" }, /* 131 */ + { 2, TS, sys_sigaltstack, "sigaltstack" }, /* 132 */ + { 2, TS, sys_rt_sigsuspend, "rt_sigsuspend" }, /* 133 */ + { 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 134 */ + { 4, TS, sys_rt_sigprocmask, "rt_sigprocmask" }, /* 135 */ + { 2, TS, sys_rt_sigpending, "rt_sigpending" }, /* 136 */ + { 4, TS, sys_rt_sigtimedwait, "rt_sigtimedwait" }, /* 137 */ + { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo" }, /* 138 */ + { 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 139 */ + { 3, 0, sys_setpriority, "setpriority" }, /* 140 */ + { 2, 0, sys_getpriority, "getpriority" }, /* 141 */ + { 4, 0, sys_reboot, "reboot" }, /* 142 */ + { 2, 0, sys_setregid, "setregid" }, /* 143 */ + { 1, 0, sys_setgid, "setgid" }, /* 144 */ + { 2, 0, sys_setreuid, "setreuid" }, /* 145 */ + { 1, 0, sys_setuid, "setuid" }, /* 146 */ + { 3, 0, sys_setresuid, "setresuid" }, /* 147 */ + { 3, 0, sys_getresuid, "getresuid" }, /* 148 */ + { 3, 0, sys_setresgid, "setresgid" }, /* 149 */ + { 3, 0, sys_getresgid, "getresgid" }, /* 150 */ + { 1, NF, sys_setfsuid, "setfsuid" }, /* 151 */ + { 1, NF, sys_setfsgid, "setfsgid" }, /* 152 */ + { 1, 0, sys_times, "times" }, /* 153 */ + { 2, 0, sys_setpgid, "setpgid" }, /* 154 */ + { 1, 0, sys_getpgid, "getpgid" }, /* 155 */ + { 1, 0, sys_getsid, "getsid" }, /* 156 */ + { 0, 0, sys_setsid, "setsid" }, /* 157 */ + { 2, 0, sys_getgroups, "getgroups" }, /* 158 */ + { 2, 0, sys_setgroups, "setgroups" }, /* 159 */ + { 1, 0, sys_uname, "uname" }, /* 160 */ + { 2, 0, sys_sethostname, "sethostname" }, /* 161 */ + { 2, 0, sys_setdomainname, "setdomainname" }, /* 162 */ + { 2, 0, sys_getrlimit, "getrlimit" }, /* 163 */ + { 2, 0, sys_setrlimit, "setrlimit" }, /* 164 */ + { 2, 0, sys_getrusage, "getrusage" }, /* 165 */ + { 1, 0, sys_umask, "umask" }, /* 166 */ + { 5, 0, sys_prctl, "prctl" }, /* 167 */ + { 3, 0, sys_getcpu, "getcpu" }, /* 168 */ + { 2, 0, sys_gettimeofday, "gettimeofday" }, /* 169 */ + { 2, 0, sys_settimeofday, "settimeofday" }, /* 170 */ + { 1, 0, sys_adjtimex, "adjtimex" }, /* 171 */ + { 0, 0, sys_getpid, "getpid" }, /* 172 */ + { 0, 0, sys_getppid, "getppid" }, /* 173 */ + { 0, NF, sys_getuid, "getuid" }, /* 174 */ + { 0, NF, sys_geteuid, "geteuid" }, /* 175 */ + { 0, NF, sys_getgid, "getgid" }, /* 176 */ + { 0, NF, sys_getegid, "getegid" }, /* 177 */ + { 0, 0, sys_gettid, "gettid" }, /* 178 */ + { 1, 0, sys_sysinfo, "sysinfo" }, /* 179 */ + { 4, 0, sys_mq_open, "mq_open" }, /* 180 */ + { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 181 */ + { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 182 */ + { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 183 */ + { 2, 0, sys_mq_notify, "mq_notify" }, /* 184 */ + { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 185 */ + { 4, TI, sys_msgget, "msgget" }, /* 186 */ + { 3, TI, sys_msgctl, "msgctl" }, /* 187 */ + { 5, TI, sys_msgrcv, "msgrcv" }, /* 188 */ + { 4, TI, sys_msgsnd, "msgsnd" }, /* 189 */ + { 4, TI, sys_semget, "semget" }, /* 190 */ + { 4, TI, sys_semctl, "semctl" }, /* 191 */ + { 5, TI, sys_semtimedop, "semtimedop" }, /* 192 */ + { 4, TI, sys_semop, "semop" }, /* 193 */ + { 4, TI, sys_shmget, "shmget" }, /* 194 */ + { 4, TI, sys_shmctl, "shmctl" }, /* 195 */ + { 4, TI, sys_shmat, "shmat" }, /* 196 */ + { 4, TI, sys_shmdt, "shmdt" }, /* 197 */ + { 3, TN, sys_socket, "socket" }, /* 198 */ + { 4, TN, sys_socketpair, "socketpair" }, /* 199 */ + { 3, TN, sys_bind, "bind" }, /* 200 */ + { 2, TN, sys_listen, "listen" }, /* 201 */ + { 3, TN, sys_accept, "accept" }, /* 202 */ + { 3, TN, sys_connect, "connect" }, /* 203 */ + { 3, TN, sys_getsockname, "getsockname" }, /* 204 */ + { 3, TN, sys_getpeername, "getpeername" }, /* 205 */ + { 6, TN, sys_sendto, "sendto" }, /* 206 */ + { 6, TN, sys_recvfrom, "recvfrom" }, /* 207 */ + { 5, TN, sys_setsockopt, "setsockopt" }, /* 208 */ + { 5, TN, sys_getsockopt, "getsockopt" }, /* 209 */ + { 2, TN, sys_shutdown, "shutdown" }, /* 210 */ + { 3, TN, sys_sendmsg, "sendmsg" }, /* 211 */ + { 5, TN, sys_recvmsg, "recvmsg" }, /* 212 */ + { 4, TD, sys_readahead, "readahead" }, /* 213 */ + { 1, 0, sys_brk, "brk" }, /* 214 */ + { 2, 0, sys_munmap, "munmap" }, /* 215 */ + { 5, 0, sys_mremap, "mremap" }, /* 216 */ + { 5, 0, sys_add_key, "add_key" }, /* 217 */ + { 4, 0, sys_request_key, "request_key" }, /* 218 */ + { 5, 0, sys_keyctl, "keyctl" }, /* 219 */ + { 5, TP, sys_clone, "clone" }, /* 220 */ + { 3, TF|TP, sys_execve, "execve" }, /* 221 */ + { 6, TD, sys_mmap, "mmap" }, /* 222 */ + { 4, TD, sys_fadvise64, "fadvise64" }, /* 223 */ + { 2, TF, sys_swapon, "swapon" }, /* 224 */ + { 1, TF, sys_swapoff, "swapoff" }, /* 225 */ + { 3, 0, sys_mprotect, "mprotect" }, /* 226 */ + { 3, 0, sys_msync, "msync" }, /* 227 */ + { 3, 0, sys_msync, "msync" }, /* 228 */ + { 2, 0, sys_munlock, "munlock" }, /* 229 */ + { 1, 0, sys_mlockall, "mlockall" }, /* 230 */ + { 0, 0, sys_munlockall, "munlockall" }, /* 231 */ + { 3, 0, sys_mincore, "mincore" }, /* 232 */ + { 3, 0, sys_madvise, "madvise" }, /* 233 */ + { 5, 0, sys_remap_file_pages, "remap_file_pages" }, /* 234 */ + { 6, 0, sys_mbind, "mbind" }, /* 235 */ + { 5, 0, sys_get_mempolicy, "get_mempolicy" }, /* 236 */ + { 3, 0, sys_set_mempolicy, "set_mempolicy" }, /* 237 */ + { 4, 0, sys_migrate_pages, "migrate_pages" }, /* 238 */ + { 6, 0, sys_move_pages, "move_pages" }, /* 239 */ + { 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" }, /* 240 */ + { 5, TD, sys_perf_event_open, "perf_event_open" }, /* 241 */ + { 4, TN, sys_accept4, "accept4" }, /* 242 */ + { 5, TN, sys_recvmmsg, "recvmmsg" }, /* 243 */ + + /* Arch-specific block, not used on AArch64 */ + { MA, 0, NULL, "NULL" }, /* 244 */ + { MA, 0, NULL, "NULL" }, /* 245 */ + { MA, 0, NULL, "NULL" }, /* 246 */ + { MA, 0, NULL, "NULL" }, /* 247 */ + { MA, 0, NULL, "NULL" }, /* 248 */ + { MA, 0, NULL, "NULL" }, /* 249 */ + { MA, 0, NULL, "NULL" }, /* 250 */ + { MA, 0, NULL, "NULL" }, /* 251 */ + { MA, 0, NULL, "NULL" }, /* 252 */ + { MA, 0, NULL, "NULL" }, /* 253 */ + { MA, 0, NULL, "NULL" }, /* 254 */ + { MA, 0, NULL, "NULL" }, /* 255 */ + { MA, 0, NULL, "NULL" }, /* 256 */ + { MA, 0, NULL, "NULL" }, /* 257 */ + { MA, 0, NULL, "NULL" }, /* 258 */ + { MA, 0, NULL, "NULL" }, /* 259 */ + + { 4, TP, sys_wait4, "wait4" }, /* 260 */ + { 4, 0, sys_prlimit64, "prlimit64" }, /* 261 */ + { 2, TD, sys_fanotify_init, "fanotify_init" }, /* 262 */ + { 5, TD|TF, sys_fanotify_mark, "fanotify_mark" }, /* 263 */ + { 5, TD|TF, sys_name_to_handle_at, "name_to_handle_at" }, /* 264 */ + { 3, TD, sys_open_by_handle_at, "open_by_handle_at" }, /* 265 */ + { 2, 0, sys_clock_adjtime, "clock_adjtime" }, /* 266 */ + { 1, TD, sys_syncfs, "syncfs" }, /* 267 */ + { 2, TD, sys_setns, "setns" }, /* 268 */ + { 4, TN, sys_sendmmsg, "sendmmsg" }, /* 269 */ + { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 270 */ + { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 271 */ + + /* Blank down to 1023 */ + { MA, 0, NULL, "NULL" }, /* 272 */ + { MA, 0, NULL, "NULL" }, /* 273 */ + { MA, 0, NULL, "NULL" }, /* 274 */ + { MA, 0, NULL, "NULL" }, /* 275 */ + { MA, 0, NULL, "NULL" }, /* 276 */ + { MA, 0, NULL, "NULL" }, /* 277 */ + { MA, 0, NULL, "NULL" }, /* 278 */ + { MA, 0, NULL, "NULL" }, /* 279 */ + { MA, 0, NULL, "NULL" }, /* 280 */ + { MA, 0, NULL, "NULL" }, /* 281 */ + { MA, 0, NULL, "NULL" }, /* 282 */ + { MA, 0, NULL, "NULL" }, /* 283 */ + { MA, 0, NULL, "NULL" }, /* 284 */ + { MA, 0, NULL, "NULL" }, /* 285 */ + { MA, 0, NULL, "NULL" }, /* 286 */ + { MA, 0, NULL, "NULL" }, /* 287 */ + { MA, 0, NULL, "NULL" }, /* 288 */ + { MA, 0, NULL, "NULL" }, /* 289 */ + { MA, 0, NULL, "NULL" }, /* 290 */ + { MA, 0, NULL, "NULL" }, /* 291 */ + { MA, 0, NULL, "NULL" }, /* 292 */ + { MA, 0, NULL, "NULL" }, /* 293 */ + { MA, 0, NULL, "NULL" }, /* 294 */ + { MA, 0, NULL, "NULL" }, /* 295 */ + { MA, 0, NULL, "NULL" }, /* 296 */ + { MA, 0, NULL, "NULL" }, /* 297 */ + { MA, 0, NULL, "NULL" }, /* 298 */ + { MA, 0, NULL, "NULL" }, /* 299 */ + { MA, 0, NULL, "NULL" }, /* 300 */ + { MA, 0, NULL, "NULL" }, /* 301 */ + { MA, 0, NULL, "NULL" }, /* 302 */ + { MA, 0, NULL, "NULL" }, /* 303 */ + { MA, 0, NULL, "NULL" }, /* 304 */ + { MA, 0, NULL, "NULL" }, /* 305 */ + { MA, 0, NULL, "NULL" }, /* 306 */ + { MA, 0, NULL, "NULL" }, /* 307 */ + { MA, 0, NULL, "NULL" }, /* 308 */ + { MA, 0, NULL, "NULL" }, /* 309 */ + { MA, 0, NULL, "NULL" }, /* 310 */ + { MA, 0, NULL, "NULL" }, /* 311 */ + { MA, 0, NULL, "NULL" }, /* 312 */ + { MA, 0, NULL, "NULL" }, /* 313 */ + { MA, 0, NULL, "NULL" }, /* 314 */ + { MA, 0, NULL, "NULL" }, /* 315 */ + { MA, 0, NULL, "NULL" }, /* 316 */ + { MA, 0, NULL, "NULL" }, /* 317 */ + { MA, 0, NULL, "NULL" }, /* 318 */ + { MA, 0, NULL, "NULL" }, /* 319 */ + { MA, 0, NULL, "NULL" }, /* 320 */ + { MA, 0, NULL, "NULL" }, /* 321 */ + { MA, 0, NULL, "NULL" }, /* 322 */ + { MA, 0, NULL, "NULL" }, /* 323 */ + { MA, 0, NULL, "NULL" }, /* 324 */ + { MA, 0, NULL, "NULL" }, /* 325 */ + { MA, 0, NULL, "NULL" }, /* 326 */ + { MA, 0, NULL, "NULL" }, /* 327 */ + { MA, 0, NULL, "NULL" }, /* 328 */ + { MA, 0, NULL, "NULL" }, /* 329 */ + { MA, 0, NULL, "NULL" }, /* 330 */ + { MA, 0, NULL, "NULL" }, /* 331 */ + { MA, 0, NULL, "NULL" }, /* 332 */ + { MA, 0, NULL, "NULL" }, /* 333 */ + { MA, 0, NULL, "NULL" }, /* 334 */ + { MA, 0, NULL, "NULL" }, /* 335 */ + { MA, 0, NULL, "NULL" }, /* 336 */ + { MA, 0, NULL, "NULL" }, /* 337 */ + { MA, 0, NULL, "NULL" }, /* 338 */ + { MA, 0, NULL, "NULL" }, /* 339 */ + { MA, 0, NULL, "NULL" }, /* 340 */ + { MA, 0, NULL, "NULL" }, /* 341 */ + { MA, 0, NULL, "NULL" }, /* 342 */ + { MA, 0, NULL, "NULL" }, /* 343 */ + { MA, 0, NULL, "NULL" }, /* 344 */ + { MA, 0, NULL, "NULL" }, /* 345 */ + { MA, 0, NULL, "NULL" }, /* 346 */ + { MA, 0, NULL, "NULL" }, /* 347 */ + { MA, 0, NULL, "NULL" }, /* 348 */ + { MA, 0, NULL, "NULL" }, /* 349 */ + { MA, 0, NULL, "NULL" }, /* 350 */ + { MA, 0, NULL, "NULL" }, /* 351 */ + { MA, 0, NULL, "NULL" }, /* 352 */ + { MA, 0, NULL, "NULL" }, /* 353 */ + { MA, 0, NULL, "NULL" }, /* 354 */ + { MA, 0, NULL, "NULL" }, /* 355 */ + { MA, 0, NULL, "NULL" }, /* 356 */ + { MA, 0, NULL, "NULL" }, /* 357 */ + { MA, 0, NULL, "NULL" }, /* 358 */ + { MA, 0, NULL, "NULL" }, /* 359 */ + { MA, 0, NULL, "NULL" }, /* 360 */ + { MA, 0, NULL, "NULL" }, /* 361 */ + { MA, 0, NULL, "NULL" }, /* 362 */ + { MA, 0, NULL, "NULL" }, /* 363 */ + { MA, 0, NULL, "NULL" }, /* 364 */ + { MA, 0, NULL, "NULL" }, /* 365 */ + { MA, 0, NULL, "NULL" }, /* 366 */ + { MA, 0, NULL, "NULL" }, /* 367 */ + { MA, 0, NULL, "NULL" }, /* 368 */ + { MA, 0, NULL, "NULL" }, /* 369 */ + { MA, 0, NULL, "NULL" }, /* 370 */ + { MA, 0, NULL, "NULL" }, /* 371 */ + { MA, 0, NULL, "NULL" }, /* 372 */ + { MA, 0, NULL, "NULL" }, /* 373 */ + { MA, 0, NULL, "NULL" }, /* 374 */ + { MA, 0, NULL, "NULL" }, /* 375 */ + { MA, 0, NULL, "NULL" }, /* 376 */ + { MA, 0, NULL, "NULL" }, /* 377 */ + { MA, 0, NULL, "NULL" }, /* 378 */ + { MA, 0, NULL, "NULL" }, /* 379 */ + { MA, 0, NULL, "NULL" }, /* 380 */ + { MA, 0, NULL, "NULL" }, /* 381 */ + { MA, 0, NULL, "NULL" }, /* 382 */ + { MA, 0, NULL, "NULL" }, /* 383 */ + { MA, 0, NULL, "NULL" }, /* 384 */ + { MA, 0, NULL, "NULL" }, /* 385 */ + { MA, 0, NULL, "NULL" }, /* 386 */ + { MA, 0, NULL, "NULL" }, /* 387 */ + { MA, 0, NULL, "NULL" }, /* 388 */ + { MA, 0, NULL, "NULL" }, /* 389 */ + { MA, 0, NULL, "NULL" }, /* 390 */ + { MA, 0, NULL, "NULL" }, /* 391 */ + { MA, 0, NULL, "NULL" }, /* 392 */ + { MA, 0, NULL, "NULL" }, /* 393 */ + { MA, 0, NULL, "NULL" }, /* 394 */ + { MA, 0, NULL, "NULL" }, /* 395 */ + { MA, 0, NULL, "NULL" }, /* 396 */ + { MA, 0, NULL, "NULL" }, /* 397 */ + { MA, 0, NULL, "NULL" }, /* 398 */ + { MA, 0, NULL, "NULL" }, /* 399 */ + { MA, 0, NULL, "NULL" }, /* 400 */ + { MA, 0, NULL, "NULL" }, /* 401 */ + { MA, 0, NULL, "NULL" }, /* 402 */ + { MA, 0, NULL, "NULL" }, /* 403 */ + { MA, 0, NULL, "NULL" }, /* 404 */ + { MA, 0, NULL, "NULL" }, /* 405 */ + { MA, 0, NULL, "NULL" }, /* 406 */ + { MA, 0, NULL, "NULL" }, /* 407 */ + { MA, 0, NULL, "NULL" }, /* 408 */ + { MA, 0, NULL, "NULL" }, /* 409 */ + { MA, 0, NULL, "NULL" }, /* 410 */ + { MA, 0, NULL, "NULL" }, /* 411 */ + { MA, 0, NULL, "NULL" }, /* 412 */ + { MA, 0, NULL, "NULL" }, /* 413 */ + { MA, 0, NULL, "NULL" }, /* 414 */ + { MA, 0, NULL, "NULL" }, /* 415 */ + { MA, 0, NULL, "NULL" }, /* 416 */ + { MA, 0, NULL, "NULL" }, /* 417 */ + { MA, 0, NULL, "NULL" }, /* 418 */ + { MA, 0, NULL, "NULL" }, /* 419 */ + { MA, 0, NULL, "NULL" }, /* 420 */ + { MA, 0, NULL, "NULL" }, /* 421 */ + { MA, 0, NULL, "NULL" }, /* 422 */ + { MA, 0, NULL, "NULL" }, /* 423 */ + { MA, 0, NULL, "NULL" }, /* 424 */ + { MA, 0, NULL, "NULL" }, /* 425 */ + { MA, 0, NULL, "NULL" }, /* 426 */ + { MA, 0, NULL, "NULL" }, /* 427 */ + { MA, 0, NULL, "NULL" }, /* 428 */ + { MA, 0, NULL, "NULL" }, /* 429 */ + { MA, 0, NULL, "NULL" }, /* 430 */ + { MA, 0, NULL, "NULL" }, /* 431 */ + { MA, 0, NULL, "NULL" }, /* 432 */ + { MA, 0, NULL, "NULL" }, /* 433 */ + { MA, 0, NULL, "NULL" }, /* 434 */ + { MA, 0, NULL, "NULL" }, /* 435 */ + { MA, 0, NULL, "NULL" }, /* 436 */ + { MA, 0, NULL, "NULL" }, /* 437 */ + { MA, 0, NULL, "NULL" }, /* 438 */ + { MA, 0, NULL, "NULL" }, /* 439 */ + { MA, 0, NULL, "NULL" }, /* 440 */ + { MA, 0, NULL, "NULL" }, /* 441 */ + { MA, 0, NULL, "NULL" }, /* 442 */ + { MA, 0, NULL, "NULL" }, /* 443 */ + { MA, 0, NULL, "NULL" }, /* 444 */ + { MA, 0, NULL, "NULL" }, /* 445 */ + { MA, 0, NULL, "NULL" }, /* 446 */ + { MA, 0, NULL, "NULL" }, /* 447 */ + { MA, 0, NULL, "NULL" }, /* 448 */ + { MA, 0, NULL, "NULL" }, /* 449 */ + { MA, 0, NULL, "NULL" }, /* 450 */ + { MA, 0, NULL, "NULL" }, /* 451 */ + { MA, 0, NULL, "NULL" }, /* 452 */ + { MA, 0, NULL, "NULL" }, /* 453 */ + { MA, 0, NULL, "NULL" }, /* 454 */ + { MA, 0, NULL, "NULL" }, /* 455 */ + { MA, 0, NULL, "NULL" }, /* 456 */ + { MA, 0, NULL, "NULL" }, /* 457 */ + { MA, 0, NULL, "NULL" }, /* 458 */ + { MA, 0, NULL, "NULL" }, /* 459 */ + { MA, 0, NULL, "NULL" }, /* 460 */ + { MA, 0, NULL, "NULL" }, /* 461 */ + { MA, 0, NULL, "NULL" }, /* 462 */ + { MA, 0, NULL, "NULL" }, /* 463 */ + { MA, 0, NULL, "NULL" }, /* 464 */ + { MA, 0, NULL, "NULL" }, /* 465 */ + { MA, 0, NULL, "NULL" }, /* 466 */ + { MA, 0, NULL, "NULL" }, /* 467 */ + { MA, 0, NULL, "NULL" }, /* 468 */ + { MA, 0, NULL, "NULL" }, /* 469 */ + { MA, 0, NULL, "NULL" }, /* 470 */ + { MA, 0, NULL, "NULL" }, /* 471 */ + { MA, 0, NULL, "NULL" }, /* 472 */ + { MA, 0, NULL, "NULL" }, /* 473 */ + { MA, 0, NULL, "NULL" }, /* 474 */ + { MA, 0, NULL, "NULL" }, /* 475 */ + { MA, 0, NULL, "NULL" }, /* 476 */ + { MA, 0, NULL, "NULL" }, /* 477 */ + { MA, 0, NULL, "NULL" }, /* 478 */ + { MA, 0, NULL, "NULL" }, /* 479 */ + { MA, 0, NULL, "NULL" }, /* 480 */ + { MA, 0, NULL, "NULL" }, /* 481 */ + { MA, 0, NULL, "NULL" }, /* 482 */ + { MA, 0, NULL, "NULL" }, /* 483 */ + { MA, 0, NULL, "NULL" }, /* 484 */ + { MA, 0, NULL, "NULL" }, /* 485 */ + { MA, 0, NULL, "NULL" }, /* 486 */ + { MA, 0, NULL, "NULL" }, /* 487 */ + { MA, 0, NULL, "NULL" }, /* 488 */ + { MA, 0, NULL, "NULL" }, /* 489 */ + { MA, 0, NULL, "NULL" }, /* 490 */ + { MA, 0, NULL, "NULL" }, /* 491 */ + { MA, 0, NULL, "NULL" }, /* 492 */ + { MA, 0, NULL, "NULL" }, /* 493 */ + { MA, 0, NULL, "NULL" }, /* 494 */ + { MA, 0, NULL, "NULL" }, /* 495 */ + { MA, 0, NULL, "NULL" }, /* 496 */ + { MA, 0, NULL, "NULL" }, /* 497 */ + { MA, 0, NULL, "NULL" }, /* 498 */ + { MA, 0, NULL, "NULL" }, /* 499 */ + { MA, 0, NULL, "NULL" }, /* 500 */ + { MA, 0, NULL, "NULL" }, /* 501 */ + { MA, 0, NULL, "NULL" }, /* 502 */ + { MA, 0, NULL, "NULL" }, /* 503 */ + { MA, 0, NULL, "NULL" }, /* 504 */ + { MA, 0, NULL, "NULL" }, /* 505 */ + { MA, 0, NULL, "NULL" }, /* 506 */ + { MA, 0, NULL, "NULL" }, /* 507 */ + { MA, 0, NULL, "NULL" }, /* 508 */ + { MA, 0, NULL, "NULL" }, /* 509 */ + { MA, 0, NULL, "NULL" }, /* 510 */ + { MA, 0, NULL, "NULL" }, /* 511 */ + { MA, 0, NULL, "NULL" }, /* 512 */ + { MA, 0, NULL, "NULL" }, /* 513 */ + { MA, 0, NULL, "NULL" }, /* 514 */ + { MA, 0, NULL, "NULL" }, /* 515 */ + { MA, 0, NULL, "NULL" }, /* 516 */ + { MA, 0, NULL, "NULL" }, /* 517 */ + { MA, 0, NULL, "NULL" }, /* 518 */ + { MA, 0, NULL, "NULL" }, /* 519 */ + { MA, 0, NULL, "NULL" }, /* 520 */ + { MA, 0, NULL, "NULL" }, /* 521 */ + { MA, 0, NULL, "NULL" }, /* 522 */ + { MA, 0, NULL, "NULL" }, /* 523 */ + { MA, 0, NULL, "NULL" }, /* 524 */ + { MA, 0, NULL, "NULL" }, /* 525 */ + { MA, 0, NULL, "NULL" }, /* 526 */ + { MA, 0, NULL, "NULL" }, /* 527 */ + { MA, 0, NULL, "NULL" }, /* 528 */ + { MA, 0, NULL, "NULL" }, /* 529 */ + { MA, 0, NULL, "NULL" }, /* 530 */ + { MA, 0, NULL, "NULL" }, /* 531 */ + { MA, 0, NULL, "NULL" }, /* 532 */ + { MA, 0, NULL, "NULL" }, /* 533 */ + { MA, 0, NULL, "NULL" }, /* 534 */ + { MA, 0, NULL, "NULL" }, /* 535 */ + { MA, 0, NULL, "NULL" }, /* 536 */ + { MA, 0, NULL, "NULL" }, /* 537 */ + { MA, 0, NULL, "NULL" }, /* 538 */ + { MA, 0, NULL, "NULL" }, /* 539 */ + { MA, 0, NULL, "NULL" }, /* 540 */ + { MA, 0, NULL, "NULL" }, /* 541 */ + { MA, 0, NULL, "NULL" }, /* 542 */ + { MA, 0, NULL, "NULL" }, /* 543 */ + { MA, 0, NULL, "NULL" }, /* 544 */ + { MA, 0, NULL, "NULL" }, /* 545 */ + { MA, 0, NULL, "NULL" }, /* 546 */ + { MA, 0, NULL, "NULL" }, /* 547 */ + { MA, 0, NULL, "NULL" }, /* 548 */ + { MA, 0, NULL, "NULL" }, /* 549 */ + { MA, 0, NULL, "NULL" }, /* 550 */ + { MA, 0, NULL, "NULL" }, /* 551 */ + { MA, 0, NULL, "NULL" }, /* 552 */ + { MA, 0, NULL, "NULL" }, /* 553 */ + { MA, 0, NULL, "NULL" }, /* 554 */ + { MA, 0, NULL, "NULL" }, /* 555 */ + { MA, 0, NULL, "NULL" }, /* 556 */ + { MA, 0, NULL, "NULL" }, /* 557 */ + { MA, 0, NULL, "NULL" }, /* 558 */ + { MA, 0, NULL, "NULL" }, /* 559 */ + { MA, 0, NULL, "NULL" }, /* 560 */ + { MA, 0, NULL, "NULL" }, /* 561 */ + { MA, 0, NULL, "NULL" }, /* 562 */ + { MA, 0, NULL, "NULL" }, /* 563 */ + { MA, 0, NULL, "NULL" }, /* 564 */ + { MA, 0, NULL, "NULL" }, /* 565 */ + { MA, 0, NULL, "NULL" }, /* 566 */ + { MA, 0, NULL, "NULL" }, /* 567 */ + { MA, 0, NULL, "NULL" }, /* 568 */ + { MA, 0, NULL, "NULL" }, /* 569 */ + { MA, 0, NULL, "NULL" }, /* 570 */ + { MA, 0, NULL, "NULL" }, /* 571 */ + { MA, 0, NULL, "NULL" }, /* 572 */ + { MA, 0, NULL, "NULL" }, /* 573 */ + { MA, 0, NULL, "NULL" }, /* 574 */ + { MA, 0, NULL, "NULL" }, /* 575 */ + { MA, 0, NULL, "NULL" }, /* 576 */ + { MA, 0, NULL, "NULL" }, /* 577 */ + { MA, 0, NULL, "NULL" }, /* 578 */ + { MA, 0, NULL, "NULL" }, /* 579 */ + { MA, 0, NULL, "NULL" }, /* 580 */ + { MA, 0, NULL, "NULL" }, /* 581 */ + { MA, 0, NULL, "NULL" }, /* 582 */ + { MA, 0, NULL, "NULL" }, /* 583 */ + { MA, 0, NULL, "NULL" }, /* 584 */ + { MA, 0, NULL, "NULL" }, /* 585 */ + { MA, 0, NULL, "NULL" }, /* 586 */ + { MA, 0, NULL, "NULL" }, /* 587 */ + { MA, 0, NULL, "NULL" }, /* 588 */ + { MA, 0, NULL, "NULL" }, /* 589 */ + { MA, 0, NULL, "NULL" }, /* 590 */ + { MA, 0, NULL, "NULL" }, /* 591 */ + { MA, 0, NULL, "NULL" }, /* 592 */ + { MA, 0, NULL, "NULL" }, /* 593 */ + { MA, 0, NULL, "NULL" }, /* 594 */ + { MA, 0, NULL, "NULL" }, /* 595 */ + { MA, 0, NULL, "NULL" }, /* 596 */ + { MA, 0, NULL, "NULL" }, /* 597 */ + { MA, 0, NULL, "NULL" }, /* 598 */ + { MA, 0, NULL, "NULL" }, /* 599 */ + { MA, 0, NULL, "NULL" }, /* 600 */ + { MA, 0, NULL, "NULL" }, /* 601 */ + { MA, 0, NULL, "NULL" }, /* 602 */ + { MA, 0, NULL, "NULL" }, /* 603 */ + { MA, 0, NULL, "NULL" }, /* 604 */ + { MA, 0, NULL, "NULL" }, /* 605 */ + { MA, 0, NULL, "NULL" }, /* 606 */ + { MA, 0, NULL, "NULL" }, /* 607 */ + { MA, 0, NULL, "NULL" }, /* 608 */ + { MA, 0, NULL, "NULL" }, /* 609 */ + { MA, 0, NULL, "NULL" }, /* 610 */ + { MA, 0, NULL, "NULL" }, /* 611 */ + { MA, 0, NULL, "NULL" }, /* 612 */ + { MA, 0, NULL, "NULL" }, /* 613 */ + { MA, 0, NULL, "NULL" }, /* 614 */ + { MA, 0, NULL, "NULL" }, /* 615 */ + { MA, 0, NULL, "NULL" }, /* 616 */ + { MA, 0, NULL, "NULL" }, /* 617 */ + { MA, 0, NULL, "NULL" }, /* 618 */ + { MA, 0, NULL, "NULL" }, /* 619 */ + { MA, 0, NULL, "NULL" }, /* 620 */ + { MA, 0, NULL, "NULL" }, /* 621 */ + { MA, 0, NULL, "NULL" }, /* 622 */ + { MA, 0, NULL, "NULL" }, /* 623 */ + { MA, 0, NULL, "NULL" }, /* 624 */ + { MA, 0, NULL, "NULL" }, /* 625 */ + { MA, 0, NULL, "NULL" }, /* 626 */ + { MA, 0, NULL, "NULL" }, /* 627 */ + { MA, 0, NULL, "NULL" }, /* 628 */ + { MA, 0, NULL, "NULL" }, /* 629 */ + { MA, 0, NULL, "NULL" }, /* 630 */ + { MA, 0, NULL, "NULL" }, /* 631 */ + { MA, 0, NULL, "NULL" }, /* 632 */ + { MA, 0, NULL, "NULL" }, /* 633 */ + { MA, 0, NULL, "NULL" }, /* 634 */ + { MA, 0, NULL, "NULL" }, /* 635 */ + { MA, 0, NULL, "NULL" }, /* 636 */ + { MA, 0, NULL, "NULL" }, /* 637 */ + { MA, 0, NULL, "NULL" }, /* 638 */ + { MA, 0, NULL, "NULL" }, /* 639 */ + { MA, 0, NULL, "NULL" }, /* 640 */ + { MA, 0, NULL, "NULL" }, /* 641 */ + { MA, 0, NULL, "NULL" }, /* 642 */ + { MA, 0, NULL, "NULL" }, /* 643 */ + { MA, 0, NULL, "NULL" }, /* 644 */ + { MA, 0, NULL, "NULL" }, /* 645 */ + { MA, 0, NULL, "NULL" }, /* 646 */ + { MA, 0, NULL, "NULL" }, /* 647 */ + { MA, 0, NULL, "NULL" }, /* 648 */ + { MA, 0, NULL, "NULL" }, /* 649 */ + { MA, 0, NULL, "NULL" }, /* 650 */ + { MA, 0, NULL, "NULL" }, /* 651 */ + { MA, 0, NULL, "NULL" }, /* 652 */ + { MA, 0, NULL, "NULL" }, /* 653 */ + { MA, 0, NULL, "NULL" }, /* 654 */ + { MA, 0, NULL, "NULL" }, /* 655 */ + { MA, 0, NULL, "NULL" }, /* 656 */ + { MA, 0, NULL, "NULL" }, /* 657 */ + { MA, 0, NULL, "NULL" }, /* 658 */ + { MA, 0, NULL, "NULL" }, /* 659 */ + { MA, 0, NULL, "NULL" }, /* 660 */ + { MA, 0, NULL, "NULL" }, /* 661 */ + { MA, 0, NULL, "NULL" }, /* 662 */ + { MA, 0, NULL, "NULL" }, /* 663 */ + { MA, 0, NULL, "NULL" }, /* 664 */ + { MA, 0, NULL, "NULL" }, /* 665 */ + { MA, 0, NULL, "NULL" }, /* 666 */ + { MA, 0, NULL, "NULL" }, /* 667 */ + { MA, 0, NULL, "NULL" }, /* 668 */ + { MA, 0, NULL, "NULL" }, /* 669 */ + { MA, 0, NULL, "NULL" }, /* 670 */ + { MA, 0, NULL, "NULL" }, /* 671 */ + { MA, 0, NULL, "NULL" }, /* 672 */ + { MA, 0, NULL, "NULL" }, /* 673 */ + { MA, 0, NULL, "NULL" }, /* 674 */ + { MA, 0, NULL, "NULL" }, /* 675 */ + { MA, 0, NULL, "NULL" }, /* 676 */ + { MA, 0, NULL, "NULL" }, /* 677 */ + { MA, 0, NULL, "NULL" }, /* 678 */ + { MA, 0, NULL, "NULL" }, /* 679 */ + { MA, 0, NULL, "NULL" }, /* 680 */ + { MA, 0, NULL, "NULL" }, /* 681 */ + { MA, 0, NULL, "NULL" }, /* 682 */ + { MA, 0, NULL, "NULL" }, /* 683 */ + { MA, 0, NULL, "NULL" }, /* 684 */ + { MA, 0, NULL, "NULL" }, /* 685 */ + { MA, 0, NULL, "NULL" }, /* 686 */ + { MA, 0, NULL, "NULL" }, /* 687 */ + { MA, 0, NULL, "NULL" }, /* 688 */ + { MA, 0, NULL, "NULL" }, /* 689 */ + { MA, 0, NULL, "NULL" }, /* 690 */ + { MA, 0, NULL, "NULL" }, /* 691 */ + { MA, 0, NULL, "NULL" }, /* 692 */ + { MA, 0, NULL, "NULL" }, /* 693 */ + { MA, 0, NULL, "NULL" }, /* 694 */ + { MA, 0, NULL, "NULL" }, /* 695 */ + { MA, 0, NULL, "NULL" }, /* 696 */ + { MA, 0, NULL, "NULL" }, /* 697 */ + { MA, 0, NULL, "NULL" }, /* 698 */ + { MA, 0, NULL, "NULL" }, /* 699 */ + { MA, 0, NULL, "NULL" }, /* 700 */ + { MA, 0, NULL, "NULL" }, /* 701 */ + { MA, 0, NULL, "NULL" }, /* 702 */ + { MA, 0, NULL, "NULL" }, /* 703 */ + { MA, 0, NULL, "NULL" }, /* 704 */ + { MA, 0, NULL, "NULL" }, /* 705 */ + { MA, 0, NULL, "NULL" }, /* 706 */ + { MA, 0, NULL, "NULL" }, /* 707 */ + { MA, 0, NULL, "NULL" }, /* 708 */ + { MA, 0, NULL, "NULL" }, /* 709 */ + { MA, 0, NULL, "NULL" }, /* 710 */ + { MA, 0, NULL, "NULL" }, /* 711 */ + { MA, 0, NULL, "NULL" }, /* 712 */ + { MA, 0, NULL, "NULL" }, /* 713 */ + { MA, 0, NULL, "NULL" }, /* 714 */ + { MA, 0, NULL, "NULL" }, /* 715 */ + { MA, 0, NULL, "NULL" }, /* 716 */ + { MA, 0, NULL, "NULL" }, /* 717 */ + { MA, 0, NULL, "NULL" }, /* 718 */ + { MA, 0, NULL, "NULL" }, /* 719 */ + { MA, 0, NULL, "NULL" }, /* 720 */ + { MA, 0, NULL, "NULL" }, /* 721 */ + { MA, 0, NULL, "NULL" }, /* 722 */ + { MA, 0, NULL, "NULL" }, /* 723 */ + { MA, 0, NULL, "NULL" }, /* 724 */ + { MA, 0, NULL, "NULL" }, /* 725 */ + { MA, 0, NULL, "NULL" }, /* 726 */ + { MA, 0, NULL, "NULL" }, /* 727 */ + { MA, 0, NULL, "NULL" }, /* 728 */ + { MA, 0, NULL, "NULL" }, /* 729 */ + { MA, 0, NULL, "NULL" }, /* 730 */ + { MA, 0, NULL, "NULL" }, /* 731 */ + { MA, 0, NULL, "NULL" }, /* 732 */ + { MA, 0, NULL, "NULL" }, /* 733 */ + { MA, 0, NULL, "NULL" }, /* 734 */ + { MA, 0, NULL, "NULL" }, /* 735 */ + { MA, 0, NULL, "NULL" }, /* 736 */ + { MA, 0, NULL, "NULL" }, /* 737 */ + { MA, 0, NULL, "NULL" }, /* 738 */ + { MA, 0, NULL, "NULL" }, /* 739 */ + { MA, 0, NULL, "NULL" }, /* 740 */ + { MA, 0, NULL, "NULL" }, /* 741 */ + { MA, 0, NULL, "NULL" }, /* 742 */ + { MA, 0, NULL, "NULL" }, /* 743 */ + { MA, 0, NULL, "NULL" }, /* 744 */ + { MA, 0, NULL, "NULL" }, /* 745 */ + { MA, 0, NULL, "NULL" }, /* 746 */ + { MA, 0, NULL, "NULL" }, /* 747 */ + { MA, 0, NULL, "NULL" }, /* 748 */ + { MA, 0, NULL, "NULL" }, /* 749 */ + { MA, 0, NULL, "NULL" }, /* 750 */ + { MA, 0, NULL, "NULL" }, /* 751 */ + { MA, 0, NULL, "NULL" }, /* 752 */ + { MA, 0, NULL, "NULL" }, /* 753 */ + { MA, 0, NULL, "NULL" }, /* 754 */ + { MA, 0, NULL, "NULL" }, /* 755 */ + { MA, 0, NULL, "NULL" }, /* 756 */ + { MA, 0, NULL, "NULL" }, /* 757 */ + { MA, 0, NULL, "NULL" }, /* 758 */ + { MA, 0, NULL, "NULL" }, /* 759 */ + { MA, 0, NULL, "NULL" }, /* 760 */ + { MA, 0, NULL, "NULL" }, /* 761 */ + { MA, 0, NULL, "NULL" }, /* 762 */ + { MA, 0, NULL, "NULL" }, /* 763 */ + { MA, 0, NULL, "NULL" }, /* 764 */ + { MA, 0, NULL, "NULL" }, /* 765 */ + { MA, 0, NULL, "NULL" }, /* 766 */ + { MA, 0, NULL, "NULL" }, /* 767 */ + { MA, 0, NULL, "NULL" }, /* 768 */ + { MA, 0, NULL, "NULL" }, /* 769 */ + { MA, 0, NULL, "NULL" }, /* 770 */ + { MA, 0, NULL, "NULL" }, /* 771 */ + { MA, 0, NULL, "NULL" }, /* 772 */ + { MA, 0, NULL, "NULL" }, /* 773 */ + { MA, 0, NULL, "NULL" }, /* 774 */ + { MA, 0, NULL, "NULL" }, /* 775 */ + { MA, 0, NULL, "NULL" }, /* 776 */ + { MA, 0, NULL, "NULL" }, /* 777 */ + { MA, 0, NULL, "NULL" }, /* 778 */ + { MA, 0, NULL, "NULL" }, /* 779 */ + { MA, 0, NULL, "NULL" }, /* 780 */ + { MA, 0, NULL, "NULL" }, /* 781 */ + { MA, 0, NULL, "NULL" }, /* 782 */ + { MA, 0, NULL, "NULL" }, /* 783 */ + { MA, 0, NULL, "NULL" }, /* 784 */ + { MA, 0, NULL, "NULL" }, /* 785 */ + { MA, 0, NULL, "NULL" }, /* 786 */ + { MA, 0, NULL, "NULL" }, /* 787 */ + { MA, 0, NULL, "NULL" }, /* 788 */ + { MA, 0, NULL, "NULL" }, /* 789 */ + { MA, 0, NULL, "NULL" }, /* 790 */ + { MA, 0, NULL, "NULL" }, /* 791 */ + { MA, 0, NULL, "NULL" }, /* 792 */ + { MA, 0, NULL, "NULL" }, /* 793 */ + { MA, 0, NULL, "NULL" }, /* 794 */ + { MA, 0, NULL, "NULL" }, /* 795 */ + { MA, 0, NULL, "NULL" }, /* 796 */ + { MA, 0, NULL, "NULL" }, /* 797 */ + { MA, 0, NULL, "NULL" }, /* 798 */ + { MA, 0, NULL, "NULL" }, /* 799 */ + { MA, 0, NULL, "NULL" }, /* 800 */ + { MA, 0, NULL, "NULL" }, /* 801 */ + { MA, 0, NULL, "NULL" }, /* 802 */ + { MA, 0, NULL, "NULL" }, /* 803 */ + { MA, 0, NULL, "NULL" }, /* 804 */ + { MA, 0, NULL, "NULL" }, /* 805 */ + { MA, 0, NULL, "NULL" }, /* 806 */ + { MA, 0, NULL, "NULL" }, /* 807 */ + { MA, 0, NULL, "NULL" }, /* 808 */ + { MA, 0, NULL, "NULL" }, /* 809 */ + { MA, 0, NULL, "NULL" }, /* 810 */ + { MA, 0, NULL, "NULL" }, /* 811 */ + { MA, 0, NULL, "NULL" }, /* 812 */ + { MA, 0, NULL, "NULL" }, /* 813 */ + { MA, 0, NULL, "NULL" }, /* 814 */ + { MA, 0, NULL, "NULL" }, /* 815 */ + { MA, 0, NULL, "NULL" }, /* 816 */ + { MA, 0, NULL, "NULL" }, /* 817 */ + { MA, 0, NULL, "NULL" }, /* 818 */ + { MA, 0, NULL, "NULL" }, /* 819 */ + { MA, 0, NULL, "NULL" }, /* 820 */ + { MA, 0, NULL, "NULL" }, /* 821 */ + { MA, 0, NULL, "NULL" }, /* 822 */ + { MA, 0, NULL, "NULL" }, /* 823 */ + { MA, 0, NULL, "NULL" }, /* 824 */ + { MA, 0, NULL, "NULL" }, /* 825 */ + { MA, 0, NULL, "NULL" }, /* 826 */ + { MA, 0, NULL, "NULL" }, /* 827 */ + { MA, 0, NULL, "NULL" }, /* 828 */ + { MA, 0, NULL, "NULL" }, /* 829 */ + { MA, 0, NULL, "NULL" }, /* 830 */ + { MA, 0, NULL, "NULL" }, /* 831 */ + { MA, 0, NULL, "NULL" }, /* 832 */ + { MA, 0, NULL, "NULL" }, /* 833 */ + { MA, 0, NULL, "NULL" }, /* 834 */ + { MA, 0, NULL, "NULL" }, /* 835 */ + { MA, 0, NULL, "NULL" }, /* 836 */ + { MA, 0, NULL, "NULL" }, /* 837 */ + { MA, 0, NULL, "NULL" }, /* 838 */ + { MA, 0, NULL, "NULL" }, /* 839 */ + { MA, 0, NULL, "NULL" }, /* 840 */ + { MA, 0, NULL, "NULL" }, /* 841 */ + { MA, 0, NULL, "NULL" }, /* 842 */ + { MA, 0, NULL, "NULL" }, /* 843 */ + { MA, 0, NULL, "NULL" }, /* 844 */ + { MA, 0, NULL, "NULL" }, /* 845 */ + { MA, 0, NULL, "NULL" }, /* 846 */ + { MA, 0, NULL, "NULL" }, /* 847 */ + { MA, 0, NULL, "NULL" }, /* 848 */ + { MA, 0, NULL, "NULL" }, /* 849 */ + { MA, 0, NULL, "NULL" }, /* 850 */ + { MA, 0, NULL, "NULL" }, /* 851 */ + { MA, 0, NULL, "NULL" }, /* 852 */ + { MA, 0, NULL, "NULL" }, /* 853 */ + { MA, 0, NULL, "NULL" }, /* 854 */ + { MA, 0, NULL, "NULL" }, /* 855 */ + { MA, 0, NULL, "NULL" }, /* 856 */ + { MA, 0, NULL, "NULL" }, /* 857 */ + { MA, 0, NULL, "NULL" }, /* 858 */ + { MA, 0, NULL, "NULL" }, /* 859 */ + { MA, 0, NULL, "NULL" }, /* 860 */ + { MA, 0, NULL, "NULL" }, /* 861 */ + { MA, 0, NULL, "NULL" }, /* 862 */ + { MA, 0, NULL, "NULL" }, /* 863 */ + { MA, 0, NULL, "NULL" }, /* 864 */ + { MA, 0, NULL, "NULL" }, /* 865 */ + { MA, 0, NULL, "NULL" }, /* 866 */ + { MA, 0, NULL, "NULL" }, /* 867 */ + { MA, 0, NULL, "NULL" }, /* 868 */ + { MA, 0, NULL, "NULL" }, /* 869 */ + { MA, 0, NULL, "NULL" }, /* 870 */ + { MA, 0, NULL, "NULL" }, /* 871 */ + { MA, 0, NULL, "NULL" }, /* 872 */ + { MA, 0, NULL, "NULL" }, /* 873 */ + { MA, 0, NULL, "NULL" }, /* 874 */ + { MA, 0, NULL, "NULL" }, /* 875 */ + { MA, 0, NULL, "NULL" }, /* 876 */ + { MA, 0, NULL, "NULL" }, /* 877 */ + { MA, 0, NULL, "NULL" }, /* 878 */ + { MA, 0, NULL, "NULL" }, /* 879 */ + { MA, 0, NULL, "NULL" }, /* 880 */ + { MA, 0, NULL, "NULL" }, /* 881 */ + { MA, 0, NULL, "NULL" }, /* 882 */ + { MA, 0, NULL, "NULL" }, /* 883 */ + { MA, 0, NULL, "NULL" }, /* 884 */ + { MA, 0, NULL, "NULL" }, /* 885 */ + { MA, 0, NULL, "NULL" }, /* 886 */ + { MA, 0, NULL, "NULL" }, /* 887 */ + { MA, 0, NULL, "NULL" }, /* 888 */ + { MA, 0, NULL, "NULL" }, /* 889 */ + { MA, 0, NULL, "NULL" }, /* 890 */ + { MA, 0, NULL, "NULL" }, /* 891 */ + { MA, 0, NULL, "NULL" }, /* 892 */ + { MA, 0, NULL, "NULL" }, /* 893 */ + { MA, 0, NULL, "NULL" }, /* 894 */ + { MA, 0, NULL, "NULL" }, /* 895 */ + { MA, 0, NULL, "NULL" }, /* 896 */ + { MA, 0, NULL, "NULL" }, /* 897 */ + { MA, 0, NULL, "NULL" }, /* 898 */ + { MA, 0, NULL, "NULL" }, /* 899 */ + { MA, 0, NULL, "NULL" }, /* 900 */ + { MA, 0, NULL, "NULL" }, /* 901 */ + { MA, 0, NULL, "NULL" }, /* 902 */ + { MA, 0, NULL, "NULL" }, /* 903 */ + { MA, 0, NULL, "NULL" }, /* 904 */ + { MA, 0, NULL, "NULL" }, /* 905 */ + { MA, 0, NULL, "NULL" }, /* 906 */ + { MA, 0, NULL, "NULL" }, /* 907 */ + { MA, 0, NULL, "NULL" }, /* 908 */ + { MA, 0, NULL, "NULL" }, /* 909 */ + { MA, 0, NULL, "NULL" }, /* 910 */ + { MA, 0, NULL, "NULL" }, /* 911 */ + { MA, 0, NULL, "NULL" }, /* 912 */ + { MA, 0, NULL, "NULL" }, /* 913 */ + { MA, 0, NULL, "NULL" }, /* 914 */ + { MA, 0, NULL, "NULL" }, /* 915 */ + { MA, 0, NULL, "NULL" }, /* 916 */ + { MA, 0, NULL, "NULL" }, /* 917 */ + { MA, 0, NULL, "NULL" }, /* 918 */ + { MA, 0, NULL, "NULL" }, /* 919 */ + { MA, 0, NULL, "NULL" }, /* 920 */ + { MA, 0, NULL, "NULL" }, /* 921 */ + { MA, 0, NULL, "NULL" }, /* 922 */ + { MA, 0, NULL, "NULL" }, /* 923 */ + { MA, 0, NULL, "NULL" }, /* 924 */ + { MA, 0, NULL, "NULL" }, /* 925 */ + { MA, 0, NULL, "NULL" }, /* 926 */ + { MA, 0, NULL, "NULL" }, /* 927 */ + { MA, 0, NULL, "NULL" }, /* 928 */ + { MA, 0, NULL, "NULL" }, /* 929 */ + { MA, 0, NULL, "NULL" }, /* 930 */ + { MA, 0, NULL, "NULL" }, /* 931 */ + { MA, 0, NULL, "NULL" }, /* 932 */ + { MA, 0, NULL, "NULL" }, /* 933 */ + { MA, 0, NULL, "NULL" }, /* 934 */ + { MA, 0, NULL, "NULL" }, /* 935 */ + { MA, 0, NULL, "NULL" }, /* 936 */ + { MA, 0, NULL, "NULL" }, /* 937 */ + { MA, 0, NULL, "NULL" }, /* 938 */ + { MA, 0, NULL, "NULL" }, /* 939 */ + { MA, 0, NULL, "NULL" }, /* 940 */ + { MA, 0, NULL, "NULL" }, /* 941 */ + { MA, 0, NULL, "NULL" }, /* 942 */ + { MA, 0, NULL, "NULL" }, /* 943 */ + { MA, 0, NULL, "NULL" }, /* 944 */ + { MA, 0, NULL, "NULL" }, /* 945 */ + { MA, 0, NULL, "NULL" }, /* 946 */ + { MA, 0, NULL, "NULL" }, /* 947 */ + { MA, 0, NULL, "NULL" }, /* 948 */ + { MA, 0, NULL, "NULL" }, /* 949 */ + { MA, 0, NULL, "NULL" }, /* 950 */ + { MA, 0, NULL, "NULL" }, /* 951 */ + { MA, 0, NULL, "NULL" }, /* 952 */ + { MA, 0, NULL, "NULL" }, /* 953 */ + { MA, 0, NULL, "NULL" }, /* 954 */ + { MA, 0, NULL, "NULL" }, /* 955 */ + { MA, 0, NULL, "NULL" }, /* 956 */ + { MA, 0, NULL, "NULL" }, /* 957 */ + { MA, 0, NULL, "NULL" }, /* 958 */ + { MA, 0, NULL, "NULL" }, /* 959 */ + { MA, 0, NULL, "NULL" }, /* 960 */ + { MA, 0, NULL, "NULL" }, /* 961 */ + { MA, 0, NULL, "NULL" }, /* 962 */ + { MA, 0, NULL, "NULL" }, /* 963 */ + { MA, 0, NULL, "NULL" }, /* 964 */ + { MA, 0, NULL, "NULL" }, /* 965 */ + { MA, 0, NULL, "NULL" }, /* 966 */ + { MA, 0, NULL, "NULL" }, /* 967 */ + { MA, 0, NULL, "NULL" }, /* 968 */ + { MA, 0, NULL, "NULL" }, /* 969 */ + { MA, 0, NULL, "NULL" }, /* 970 */ + { MA, 0, NULL, "NULL" }, /* 971 */ + { MA, 0, NULL, "NULL" }, /* 972 */ + { MA, 0, NULL, "NULL" }, /* 973 */ + { MA, 0, NULL, "NULL" }, /* 974 */ + { MA, 0, NULL, "NULL" }, /* 975 */ + { MA, 0, NULL, "NULL" }, /* 976 */ + { MA, 0, NULL, "NULL" }, /* 977 */ + { MA, 0, NULL, "NULL" }, /* 978 */ + { MA, 0, NULL, "NULL" }, /* 979 */ + { MA, 0, NULL, "NULL" }, /* 980 */ + { MA, 0, NULL, "NULL" }, /* 981 */ + { MA, 0, NULL, "NULL" }, /* 982 */ + { MA, 0, NULL, "NULL" }, /* 983 */ + { MA, 0, NULL, "NULL" }, /* 984 */ + { MA, 0, NULL, "NULL" }, /* 985 */ + { MA, 0, NULL, "NULL" }, /* 986 */ + { MA, 0, NULL, "NULL" }, /* 987 */ + { MA, 0, NULL, "NULL" }, /* 988 */ + { MA, 0, NULL, "NULL" }, /* 989 */ + { MA, 0, NULL, "NULL" }, /* 990 */ + { MA, 0, NULL, "NULL" }, /* 991 */ + { MA, 0, NULL, "NULL" }, /* 992 */ + { MA, 0, NULL, "NULL" }, /* 993 */ + { MA, 0, NULL, "NULL" }, /* 994 */ + { MA, 0, NULL, "NULL" }, /* 995 */ + { MA, 0, NULL, "NULL" }, /* 996 */ + { MA, 0, NULL, "NULL" }, /* 997 */ + { MA, 0, NULL, "NULL" }, /* 998 */ + { MA, 0, NULL, "NULL" }, /* 999 */ + { MA, 0, NULL, "NULL" }, /* 1000 */ + { MA, 0, NULL, "NULL" }, /* 1001 */ + { MA, 0, NULL, "NULL" }, /* 1002 */ + { MA, 0, NULL, "NULL" }, /* 1003 */ + { MA, 0, NULL, "NULL" }, /* 1004 */ + { MA, 0, NULL, "NULL" }, /* 1005 */ + { MA, 0, NULL, "NULL" }, /* 1006 */ + { MA, 0, NULL, "NULL" }, /* 1007 */ + { MA, 0, NULL, "NULL" }, /* 1008 */ + { MA, 0, NULL, "NULL" }, /* 1009 */ + { MA, 0, NULL, "NULL" }, /* 1010 */ + { MA, 0, NULL, "NULL" }, /* 1011 */ + { MA, 0, NULL, "NULL" }, /* 1012 */ + { MA, 0, NULL, "NULL" }, /* 1013 */ + { MA, 0, NULL, "NULL" }, /* 1014 */ + { MA, 0, NULL, "NULL" }, /* 1015 */ + { MA, 0, NULL, "NULL" }, /* 1016 */ + { MA, 0, NULL, "NULL" }, /* 1017 */ + { MA, 0, NULL, "NULL" }, /* 1018 */ + { MA, 0, NULL, "NULL" }, /* 1019 */ + { MA, 0, NULL, "NULL" }, /* 1020 */ + { MA, 0, NULL, "NULL" }, /* 1021 */ + { MA, 0, NULL, "NULL" }, /* 1022 */ + { MA, 0, NULL, "NULL" }, /* 1023 */ + + /* Quote from asm-generic/unistd.h: + * + * All syscalls below here should go away really, + * these are provided for both review and as a porting + * help for the C library version. + * + * Last chance: are any of these important enough to + * enable by default? + */ + + { 3, TD|TF, sys_open, "open" }, /* 1024 */ + { 2, TF, sys_link, "link" }, /* 1025 */ + { 1, TF, sys_unlink, "unlink" }, /* 1026 */ + { 3, TF, sys_mknod, "mknod" }, /* 1027 */ + { 2, TF, sys_chmod, "chmod" }, /* 1028 */ + { 3, TF, sys_chown, "chown" }, /* 1029 */ + { 2, TF, sys_mkdir, "mkdir" }, /* 1030 */ + { 1, TF, sys_rmdir, "rmdir" }, /* 1031 */ + { 3, TF, sys_chown, "lchown" }, /* 1032 */ + { 2, TF, sys_access, "access" }, /* 1033 */ + { 2, TF, sys_rename, "rename" }, /* 1034 */ + { 3, TF, sys_readlink, "readlink" }, /* 1035 */ + { 2, TF, sys_symlink, "symlink" }, /* 1036 */ + { 2, TF, sys_utimes, "utimes" }, /* 1037 */ + { 2, TF, sys_stat, "stat" }, /* 1038 */ + { 2, TF, sys_lstat, "lstat" }, /* 1039 */ + { 1, TD, sys_pipe, "pipe" }, /* 1040 */ + { 2, TD, sys_dup2, "dup2" }, /* 1041 */ + { 1, TD, sys_epoll_create, "epoll_create" }, /* 1042 */ + { 0, TD, sys_inotify_init, "inotify_init" }, /* 1043 */ + { 1, TD, sys_eventfd, "eventfd" }, /* 1044 */ + { 3, TD|TS, sys_signalfd, "signalfd" }, /* 1045 */ + { 4, TD|TN, sys_sendfile, "sendfile" }, /* 1046 */ + { 2, TD, sys_ftruncate, "ftruncate" }, /* 1047 */ + { 2, TF, sys_truncate, "truncate" }, /* 1048 */ + { 2, TF, sys_stat, "stat" }, /* 1049 */ + { 2, TF, sys_lstat, "lstat" }, /* 1050 */ + { 2, TD, sys_fstat, "fstat" }, /* 1051 */ + { 3, TD, sys_fcntl, "fcntl" }, /* 1052 */ + { 4, TD, sys_fadvise64, "fadvise64" }, /* 1053 */ + { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 1054 */ + { 2, TD, sys_fstatfs, "fstatfs" }, /* 1055 */ + { 2, TF, sys_statfs, "statfs" }, /* 1056 */ + { 3, TD, sys_lseek, "lseek" }, /* 1057 */ + { 6, TD, sys_mmap, "mmap" }, /* 1058 */ + { 1, 0, sys_alarm, "alarm" }, /* 1059 */ + { 0, 0, sys_getpgrp, "getpgrp" }, /* 1060 */ + { 0, TS, sys_pause, "pause" }, /* 1061 */ + { 1, 0, sys_time, "time" }, /* 1062 */ + { 2, TF, sys_utime, "utime" }, /* 1063 */ + { 2, TD|TF, sys_creat, "creat" }, /* 1064 */ + { 3, TD, sys_getdents, "getdents" }, /* 1065 */ + { 3, TD|TF, sys_futimesat, "futimesat" }, /* 1066 */ + { 5, TD, sys_select, "select" }, /* 1067 */ + { 3, TD, sys_poll, "poll" }, /* 1068 */ + { 4, TD, sys_epoll_wait, "epoll_wait" }, /* 1069 */ + { 2, 0, sys_ustat, "ustat" }, /* 1070 */ + { 0, TP, sys_vfork, "vfork" }, /* 1071 */ + { 4, TP, sys_wait4, "wait4" }, /* 1072 */ + { 6, TN, sys_recv, "recv" }, /* 1073 */ + { 4, TD|TN, sys_send, "send" }, /* 1074 */ + { 2, 0, sys_bdflush, "bdflush" }, /* 1075 */ + { 2, TF, sys_umount, "umount" }, /* 1076 */ + { 1, TF, sys_uselib, "uselib" }, /* 1077 */ + { 1, 0, sys_sysctl, "sysctl" }, /* 1078 */ + { 0, TP, sys_fork, "fork" }, /* 1079 */ diff --git a/process.c b/process.c index fa304e5..467c096 100644 --- a/process.c +++ b/process.c @@ -2119,7 +2119,8 @@ const struct xlat struct_user_offsets[] = { #if !defined(SPARC) && !defined(HPPA) && !defined(POWERPC) \ && !defined(ALPHA) && !defined(IA64) \ - && !defined(CRISV10) && !defined(CRISV32) && !defined(MICROBLAZE) + && !defined(CRISV10) && !defined(CRISV32) && !defined(MICROBLAZE) \ + && !defined(AARCH64) # if !defined(S390) && !defined(S390X) && !defined(MIPS) && !defined(SPARC64) && !defined(AVR32) && !defined(BFIN) && !defined(TILE) { uoff(u_fpvalid), "offsetof(struct user, u_fpvalid)" }, # endif @@ -2148,7 +2149,7 @@ const struct xlat struct_user_offsets[] = { # if !defined(SPARC64) { uoff(u_ar0), "offsetof(struct user, u_ar0)" }, # endif -# if !defined(ARM) && !defined(AVR32) && !defined(MIPS) && !defined(S390) && !defined(S390X) && !defined(SPARC64) && !defined(BFIN) && !defined(TILE) +# if !defined(ARM) && !defined(AARCH64) && !defined(AVR32) && !defined(MIPS) && !defined(S390) && !defined(S390X) && !defined(SPARC64) && !defined(BFIN) && !defined(TILE) { uoff(u_fpstate), "offsetof(struct user, u_fpstate)" }, # endif { uoff(magic), "offsetof(struct user, magic)" }, @@ -2158,7 +2159,7 @@ const struct xlat struct_user_offsets[] = { # endif #endif /* !defined(many arches) */ -#ifndef HPPA +#if !defined(HPPA) && !defined(AARCH64) { sizeof(struct user), "sizeof(struct user)" }, #endif { 0, NULL }, diff --git a/syscall.c b/syscall.c index c4c5e86..42b4302 100644 --- a/syscall.c +++ b/syscall.c @@ -65,6 +65,12 @@ # include <asm/rse.h> #endif +#if defined(AARCH64) +# include <asm/ptrace.h> +# include <sys/uio.h> +# include <elf.h> +#endif + #ifndef ERESTARTSYS # define ERESTARTSYS 512 #endif @@ -653,6 +659,8 @@ static long d0; static long r0; #elif defined(ARM) static struct pt_regs regs; +#elif defined(AARCH64) +static struct user_pt_regs regs; #elif defined(ALPHA) static long r0; static long a3; @@ -963,6 +971,15 @@ get_scno(struct tcb *tcp) fprintf(stderr, "pid %d stray syscall entry\n", tcp->pid); tcp->flags |= TCB_INSYSCALL; } +#elif defined(AARCH64) + struct iovec io; + io.iov_base = ®s; + io.iov_len = sizeof(regs); + if (ptrace(PTRACE_GETREGSET, tcp->pid, NT_PRSTATUS, (void *)&io) == -1) + { + return -1; + } + scno = regs.regs[8]; #elif defined(M68K) if (upeek(tcp, 4*PT_ORIG_D0, &scno) < 0) return -1; @@ -1399,6 +1416,9 @@ get_syscall_args(struct tcb *tcp) #elif defined(ARM) for (i = 0; i < nargs; ++i) tcp->u_arg[i] = regs.uregs[i]; +#elif defined(AARCH64) + for (i = 0; i < nargs; ++i) + tcp->u_arg[i] = regs.regs[i]; #elif defined(AVR32) (void)i; (void)nargs; @@ -1637,6 +1657,12 @@ get_syscall_result(struct tcb *tcp) /* Read complete register set in one go. */ if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (void *)®s) == -1) return -1; +#elif defined(AARCH64) + struct iovec io; + io.iov_base = ®s; + io.iov_len = sizeof(regs); + if (ptrace(PTRACE_GETREGSET, tcp->pid, NT_PRSTATUS, (void *)&io) == -1) + return -1; #elif defined(M68K) if (upeek(tcp, 4*PT_D0, &d0) < 0) return -1; @@ -1819,6 +1845,14 @@ get_error(struct tcb *tcp) else { tcp->u_rval = regs.ARM_r0; } +#elif defined(AARCH64) + if (check_errno && is_negated_errno(regs.regs[0])) { + tcp->u_rval = -1; + u_error = -regs.regs[0]; + } + else { + tcp->u_rval = regs.regs[0]; + } #elif defined(AVR32) if (check_errno && regs.r12 && (unsigned) -regs.r12 < nerrnos) { tcp->u_rval = -1; -- 1.7.10.4 Cheers, -- Steve McIntyre ste...@li... <http://www.linaro.org/> Linaro.org | Open source software for ARM SoCs |
From: Mike F. <va...@ge...> - 2012-10-23 18:12:17
Attachments:
signature.asc
|
On Tuesday 23 October 2012 12:38:22 Steve McIntyre wrote: > Add AArch64 support to strace > > AArch64 has been included in Linux from 3.7 onwards. Add support for > AArch64 in strace, tested on Linux in a simulator. any plans to support tracing of 32bit arm ELFs ? > --- /dev/null > +++ b/linux/aarch64/syscallent.h > > + /* Arch-specific block, not used on AArch64 */ > + { MA, 0, NULL, "NULL" }, /* 244 */ x32 just does something like: [244 ... 259] = { }, can't you do the same ? > + /* Blank down to 1023 */ same here: [272 ... 1023] = { }, > --- a/syscall.c > +++ b/syscall.c > > + if (ptrace(PTRACE_GETREGSET, tcp->pid, NT_PRSTATUS, (void *)&io) == -1) > + { > + return -1; > + } drop the braces -mike |
From: Dmitry V. L. <ld...@al...> - 2012-10-23 23:58:54
|
On Tue, Oct 23, 2012 at 05:36:58PM +0100, Steve McIntyre wrote: > Update errno and ioctl definitions for newer Linux > > Signed-off-by: Steve McIntyre <ste...@li...> > --- > linux/errnoent.h | 4 +- > linux/ioctlent.h.in | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 123 insertions(+), 2 deletions(-) > > diff --git a/linux/errnoent.h b/linux/errnoent.h > index e43bff5..c2ac683 100644 > --- a/linux/errnoent.h > +++ b/linux/errnoent.h > @@ -519,8 +519,8 @@ > "ERESTARTNOHAND", /* 514 */ > "ENOIOCTLCMD", /* 515 */ > "ERESTART_RESTARTBLOCK", /* 516 */ > - "ERRNO_517", /* 517 */ > - "ERRNO_518", /* 518 */ > + "EPROBE_DEFER", /* 517 */ > + "EOPENSTALE", /* 518 */ > "ERRNO_519", /* 519 */ > "ERRNO_520", /* 520 */ > "EBADHANDLE", /* 521 */ This one is obvious. Please add a ChangeLog-style entry (see README-hacking file for details) for this errnoent.h patch. > diff --git a/linux/ioctlent.h.in b/linux/ioctlent.h.in > index 98ebbcc..1ca126a 100644 > --- a/linux/ioctlent.h.in > +++ b/linux/ioctlent.h.in > @@ -2,6 +2,7 @@ > {"linux/fs.h", "FIBMAP", 0x0001}, > {"linux/fs.h", "FIGETBSZ", 0x0002}, > {"linux/fd.h", "FDGETPRM", 0x0204}, > + {"linux/fd.h", "FDGETPRM32", 0x0204}, I'm not sure such entries are worth adding. I know we have these redundant "*32" entries in linux/ioctlent.h.in already, maybe it's time to strip them instead of adding new ones. > @@ -737,21 +757,91 @@ > {"sound/asound.h", "SNDRV_TIMER_IOCTL_PVERSION", 0x5400}, > {"linux/soundcard.h", "SNDCTL_TMR_TIMEBASE", 0x5401}, > {"sound/asound.h", "SNDRV_TIMER_IOCTL_NEXT_DEVICE", 0x5401}, > + {"asm-generic/ioctls.h", "TCGETS", 0x5401}, We were adding asm-generic entries to arch-specific ioctlent files before. I'm not sure whether we'd rather move all these entries to the common ioctlent file as indirectly proposed by this patch. Any ideas why we might want to continue the old practice? -- ldv |
From: Steve M. <ste...@li...> - 2012-10-24 13:52:22
|
On Wed, Oct 24, 2012 at 03:58:46AM +0400, Dmitry V. Levin wrote: >On Tue, Oct 23, 2012 at 05:36:58PM +0100, Steve McIntyre wrote: > >> diff --git a/linux/ioctlent.h.in b/linux/ioctlent.h.in >> index 98ebbcc..1ca126a 100644 >> --- a/linux/ioctlent.h.in >> +++ b/linux/ioctlent.h.in >> @@ -2,6 +2,7 @@ >> {"linux/fs.h", "FIBMAP", 0x0001}, >> {"linux/fs.h", "FIGETBSZ", 0x0002}, >> {"linux/fd.h", "FDGETPRM", 0x0204}, >> + {"linux/fd.h", "FDGETPRM32", 0x0204}, > >I'm not sure such entries are worth adding. I know we have these >redundant "*32" entries in linux/ioctlent.h.in already, maybe it's time >to strip them instead of adding new ones. OK, sounds fair enough. >> @@ -737,21 +757,91 @@ >> {"sound/asound.h", "SNDRV_TIMER_IOCTL_PVERSION", 0x5400}, >> {"linux/soundcard.h", "SNDCTL_TMR_TIMEBASE", 0x5401}, >> {"sound/asound.h", "SNDRV_TIMER_IOCTL_NEXT_DEVICE", 0x5401}, >> + {"asm-generic/ioctls.h", "TCGETS", 0x5401}, > >We were adding asm-generic entries to arch-specific ioctlent files before. >I'm not sure whether we'd rather move all these entries to the common >ioctlent file as indirectly proposed by this patch. >Any ideas why we might want to continue the old practice? Not my codebase... :-) Then again, it looks like more and more of the ioctls are moving over there. Maybe time to follow that? Cheers, -- Steve McIntyre ste...@li... <http://www.linaro.org/> Linaro.org | Open source software for ARM SoCs |
From: Mike F. <va...@ge...> - 2012-10-24 02:23:02
Attachments:
signature.asc
|
On Tuesday 23 October 2012 19:58:46 Dmitry V. Levin wrote: > On Tue, Oct 23, 2012 at 05:36:58PM +0100, Steve McIntyre wrote: > > --- a/linux/ioctlent.h.in > > +++ b/linux/ioctlent.h.in > > @@ -2,6 +2,7 @@ > > > > {"linux/fs.h", "FIBMAP", 0x0001}, > > {"linux/fs.h", "FIGETBSZ", 0x0002}, > > {"linux/fd.h", "FDGETPRM", 0x0204}, > > + {"linux/fd.h", "FDGETPRM32", 0x0204}, > > I'm not sure such entries are worth adding. I know we have these > redundant "*32" entries in linux/ioctlent.h.in already, maybe it's time > to strip them instead of adding new ones. if the # is the same as the non-32 version, then yeah, we should omit it. otherwise the output is generally useless: ioctl(1, FDGETPRM or FDGETPRM32, {...}) = 0 the decoder would need to know more info in order to tell which one exactly is being used (based on the active ELF). but we don't have that, so we should filter it. i'm guessing Steve just ran the script in the tree to generate this and didn't hand update it. which means we should update the script to be smarter. > > + {"asm-generic/ioctls.h", "TCGETS", 0x5401}, > > We were adding asm-generic entries to arch-specific ioctlent files before. > I'm not sure whether we'd rather move all these entries to the common > ioctlent file as indirectly proposed by this patch. > Any ideas why we might want to continue the old practice? asm-generic is sucky because it's the generic code, unless there are exceptions. if there are ioctls that are the same for all targets, we should def put in the common header. not sure how easy it is to detect this ... maybe we'd have to update ioctlent.sh to run cpp for all the targets by manually setting the required -D flags ... -mike |
From: Steve M. <ste...@li...> - 2012-10-24 13:57:18
|
On Tue, Oct 23, 2012 at 10:22:56PM -0400, Mike Frysinger wrote: >On Tuesday 23 October 2012 19:58:46 Dmitry V. Levin wrote: >> On Tue, Oct 23, 2012 at 05:36:58PM +0100, Steve McIntyre wrote: >> > --- a/linux/ioctlent.h.in >> > +++ b/linux/ioctlent.h.in >> > @@ -2,6 +2,7 @@ >> > >> > {"linux/fs.h", "FIBMAP", 0x0001}, >> > {"linux/fs.h", "FIGETBSZ", 0x0002}, >> > {"linux/fd.h", "FDGETPRM", 0x0204}, >> > + {"linux/fd.h", "FDGETPRM32", 0x0204}, >> >> I'm not sure such entries are worth adding. I know we have these >> redundant "*32" entries in linux/ioctlent.h.in already, maybe it's time >> to strip them instead of adding new ones. > >if the # is the same as the non-32 version, then yeah, we should omit it. >otherwise the output is generally useless: > ioctl(1, FDGETPRM or FDGETPRM32, {...}) = 0 > >the decoder would need to know more info in order to tell which one exactly is >being used (based on the active ELF). but we don't have that, so we should >filter it. > >i'm guessing Steve just ran the script in the tree to generate this and didn't >hand update it. which means we should update the script to be smarter. Correct, yes. Cheers, -- Steve McIntyre ste...@li... <http://www.linaro.org/> Linaro.org | Open source software for ARM SoCs |
From: Dmitry V. L. <ld...@al...> - 2012-10-27 15:49:04
|
On Tue, Oct 23, 2012 at 10:22:56PM -0400, Mike Frysinger wrote: > On Tuesday 23 October 2012 19:58:46 Dmitry V. Levin wrote: > > On Tue, Oct 23, 2012 at 05:36:58PM +0100, Steve McIntyre wrote: > > > --- a/linux/ioctlent.h.in > > > +++ b/linux/ioctlent.h.in > > > @@ -2,6 +2,7 @@ > > > > > > {"linux/fs.h", "FIBMAP", 0x0001}, > > > {"linux/fs.h", "FIGETBSZ", 0x0002}, > > > {"linux/fd.h", "FDGETPRM", 0x0204}, > > > + {"linux/fd.h", "FDGETPRM32", 0x0204}, > > > > I'm not sure such entries are worth adding. I know we have these > > redundant "*32" entries in linux/ioctlent.h.in already, maybe it's time > > to strip them instead of adding new ones. > > if the # is the same as the non-32 version, then yeah, we should omit it. > otherwise the output is generally useless: > ioctl(1, FDGETPRM or FDGETPRM32, {...}) = 0 > > the decoder would need to know more info in order to tell which one exactly is > being used (based on the active ELF). but we don't have that, so we should > filter it. > > i'm guessing Steve just ran the script in the tree to generate this and didn't > hand update it. which means we should update the script to be smarter. I've added a new script and removed redundant "*32" entries from linux/ioctlent.h.in. -- ldv |
From: Dmitry V. L. <ld...@al...> - 2012-10-24 10:39:58
|
On Tue, Oct 23, 2012 at 05:38:22PM +0100, Steve McIntyre wrote: [...] > * syscall.c: Support AArch64. Uses new PTRACE_GETREGSET ptrace request > instead of PTRACE_GETREGS, so also include sys/uio.h and elf.h for needed > definitions. Could you please enlighten us what was the rationale behind this decision? Is there any registers you need that couldn't be easily obtained using PTRACE_GETREGS? -- ldv |
From: Steve M. <ste...@li...> - 2012-10-24 13:50:15
|
On Wed, Oct 24, 2012 at 03:58:46AM +0400, Dmitry V. Levin wrote: >On Tue, Oct 23, 2012 at 05:36:58PM +0100, Steve McIntyre wrote: >> Update errno and ioctl definitions for newer Linux >> >> Signed-off-by: Steve McIntyre <ste...@li...> >> --- >> linux/errnoent.h | 4 +- >> linux/ioctlent.h.in | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 123 insertions(+), 2 deletions(-) >> >> diff --git a/linux/errnoent.h b/linux/errnoent.h >> index e43bff5..c2ac683 100644 >> --- a/linux/errnoent.h >> +++ b/linux/errnoent.h >> @@ -519,8 +519,8 @@ >> "ERESTARTNOHAND", /* 514 */ >> "ENOIOCTLCMD", /* 515 */ >> "ERESTART_RESTARTBLOCK", /* 516 */ >> - "ERRNO_517", /* 517 */ >> - "ERRNO_518", /* 518 */ >> + "EPROBE_DEFER", /* 517 */ >> + "EOPENSTALE", /* 518 */ >> "ERRNO_519", /* 519 */ >> "ERRNO_520", /* 520 */ >> "EBADHANDLE", /* 521 */ > >This one is obvious. Please add a ChangeLog-style entry (see >README-hacking file for details) for this errnoent.h patch. ACK. Here's an update for that. linux: add new errno values for EPROBE_DEFER and EOPENSTALE * linux/errnoent.h: Change ERRNO_517 to EPROBE_DEFER. * linux/errnoent.h: Change ERRNO_518 to EOPENSTALE. New definitions match updates in Linux 3.4 and Linux 3.5 respectively. Signed-off-by: Steve McIntyre <ste...@li...> --- linux/errnoent.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linux/errnoent.h b/linux/errnoent.h index e43bff5..c2ac683 100644 --- a/linux/errnoent.h +++ b/linux/errnoent.h @@ -519,8 +519,8 @@ "ERESTARTNOHAND", /* 514 */ "ENOIOCTLCMD", /* 515 */ "ERESTART_RESTARTBLOCK", /* 516 */ - "ERRNO_517", /* 517 */ - "ERRNO_518", /* 518 */ + "EPROBE_DEFER", /* 517 */ + "EOPENSTALE", /* 518 */ "ERRNO_519", /* 519 */ "ERRNO_520", /* 520 */ "EBADHANDLE", /* 521 */ -- 1.7.10.4 Cheers, -- Steve McIntyre ste...@li... <http://www.linaro.org/> Linaro.org | Open source software for ARM SoCs |
From: Dmitry V. L. <ld...@al...> - 2012-10-27 15:41:45
|
On Wed, Oct 24, 2012 at 02:49:20PM +0100, Steve McIntyre wrote: > On Wed, Oct 24, 2012 at 03:58:46AM +0400, Dmitry V. Levin wrote: > >On Tue, Oct 23, 2012 at 05:36:58PM +0100, Steve McIntyre wrote: > >> Update errno and ioctl definitions for newer Linux > >> > >> Signed-off-by: Steve McIntyre <ste...@li...> > >> --- > >> linux/errnoent.h | 4 +- > >> linux/ioctlent.h.in | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++ > >> 2 files changed, 123 insertions(+), 2 deletions(-) > >> > >> diff --git a/linux/errnoent.h b/linux/errnoent.h > >> index e43bff5..c2ac683 100644 > >> --- a/linux/errnoent.h > >> +++ b/linux/errnoent.h > >> @@ -519,8 +519,8 @@ > >> "ERESTARTNOHAND", /* 514 */ > >> "ENOIOCTLCMD", /* 515 */ > >> "ERESTART_RESTARTBLOCK", /* 516 */ > >> - "ERRNO_517", /* 517 */ > >> - "ERRNO_518", /* 518 */ > >> + "EPROBE_DEFER", /* 517 */ > >> + "EOPENSTALE", /* 518 */ > >> "ERRNO_519", /* 519 */ > >> "ERRNO_520", /* 520 */ > >> "EBADHANDLE", /* 521 */ > > > >This one is obvious. Please add a ChangeLog-style entry (see > >README-hacking file for details) for this errnoent.h patch. > > ACK. Here's an update for that. Applied, thanks. -- ldv |
From: Steve M. <ste...@li...> - 2012-10-24 16:59:17
|
On Tue, Oct 23, 2012 at 02:11:59PM -0400, Mike Frysinger wrote: >On Tuesday 23 October 2012 12:38:22 Steve McIntyre wrote: >> Add AArch64 support to strace >> >> AArch64 has been included in Linux from 3.7 onwards. Add support for >> AArch64 in strace, tested on Linux in a simulator. > >any plans to support tracing of 32bit arm ELFs ? Yes, that's the next plan for me. >> --- /dev/null >> +++ b/linux/aarch64/syscallent.h >> >> + /* Arch-specific block, not used on AArch64 */ >> + { MA, 0, NULL, "NULL" }, /* 244 >*/ > >x32 just does something like: > [244 ... 259] = { }, > >can't you do the same ? > >> + /* Blank down to 1023 */ ACK, just hadn't noticed that. Updated to match, thanks. :-) >same here: > [272 ... 1023] = { }, > >> --- a/syscall.c >> +++ b/syscall.c >> >> + if (ptrace(PTRACE_GETREGSET, tcp->pid, NT_PRSTATUS, (void *)&io) == -1) >> + { >> + return -1; >> + } ACK. New patch included here with these changes included. Add AArch64 support to strace AArch64 has been included in Linux from 3.7 onwards. Add support for AArch64 in strace, tested on Linux in a simulator. * configure.ac: Support AArch64. * defs.h: Support AArch64. * ipc.c: Support AArch64. * process.c: Support AArch64. * syscall.c: Support AArch64. Uses new PTRACE_GETREGSET ptrace request instead of PTRACE_GETREGS, so also include sys/uio.h and elf.h for needed definitions. * linux/aarch64/*: Set up definitions for AArch64. Initially based on ARM defs, added syscallent.h based on kernel 3.7 version of asm-generic/unistd.h. Signed-off-by: Steve McIntyre <ste...@li...> --- configure.ac | 4 + defs.h | 5 +- ipc.c | 2 +- linux/aarch64/ioctlent.h.in | 1 + linux/aarch64/syscallent.h | 330 +++++++++++++++++++++++++++++++++++++++++++ process.c | 7 +- syscall.c | 32 +++++ 7 files changed, 375 insertions(+), 6 deletions(-) create mode 100644 linux/aarch64/ioctlent.h.in create mode 100644 linux/aarch64/syscallent.h diff --git a/configure.ac b/configure.ac index a9f8d15..f44eaf1 100644 --- a/configure.ac +++ b/configure.ac @@ -56,6 +56,10 @@ arm*) arch=arm AC_DEFINE([ARM], 1, [Define for the ARM architecture.]) ;; +aarch64*) + arch=aarch64 + AC_DEFINE([AARCH64], 1, [Define for the AArch64 architecture.]) + ;; avr32*) arch=avr32 AC_DEFINE([AVR32], 1, [Define for the AVR32 architecture.]) diff --git a/defs.h b/defs.h index 7814bbd..b0846cd 100644 --- a/defs.h +++ b/defs.h @@ -134,7 +134,7 @@ extern char *stpcpy(char *dst, const char *src); # define LINUX_MIPS64 #endif -#if (defined(LINUXSPARC) || defined(X86_64) || defined(ARM) || defined(AVR32)) && defined(__GLIBC__) +#if (defined(LINUXSPARC) || defined(X86_64) || defined(ARM) || defined(AARCH64) || defined(AVR32)) && defined(__GLIBC__) # include <sys/ptrace.h> #else /* Work around awkward prototype in ptrace.h. */ @@ -389,7 +389,8 @@ struct tcb { #if defined(ALPHA) || defined(AVR32) || defined(SPARC) || defined(SPARC64) \ || defined(POWERPC) || defined(IA64) || defined(HPPA) \ || defined(SH) || defined(SH64) || defined(S390) || defined(S390X) \ - || defined(ARM) || defined(MIPS) || defined(BFIN) || defined(TILE) + || defined(ARM) || defined(AARCH64) || defined(MIPS) || defined(BFIN) \ + || defined(TILE) /* This tracee has entered into execve syscall. Expect post-execve SIGTRAP * to happen. (When it is detected, tracee is continued and this bit is cleared.) */ diff --git a/ipc.c b/ipc.c index f4ec522..0bde1cf 100644 --- a/ipc.c +++ b/ipc.c @@ -174,7 +174,7 @@ indirect_ipccall(struct tcb *tcp) #if defined IA64 return tcp->scno < 1024; /* ia32 emulation syscalls are low */ #endif -#if defined(ALPHA) || defined(MIPS) || defined(HPPA) || defined(__ARM_EABI__) +#if defined(ALPHA) || defined(MIPS) || defined(HPPA) || defined(__ARM_EABI__) || defined(AARCH64) return 0; #endif return 1; diff --git a/linux/aarch64/ioctlent.h.in b/linux/aarch64/ioctlent.h.in new file mode 100644 index 0000000..83e6eb2 --- /dev/null +++ b/linux/aarch64/ioctlent.h.in @@ -0,0 +1 @@ +#include "../arm/ioctlent.h.in" diff --git a/linux/aarch64/syscallent.h b/linux/aarch64/syscallent.h new file mode 100644 index 0000000..9a30fbd --- /dev/null +++ b/linux/aarch64/syscallent.h @@ -0,0 +1,330 @@ + { 2, 0, sys_io_setup, "io_setup" }, /* 0 */ + { 1, 0, sys_io_destroy, "io_destroy" }, /* 1 */ + { 3, 0, sys_io_submit, "io_submit" }, /* 2 */ + { 3, 0, sys_io_cancel, "io_cancel" }, /* 3 */ + { 5, 0, sys_io_getevents, "io_getevents" }, /* 4 */ + { 5, TF, sys_setxattr, "setxattr" }, /* 5 */ + { 5, TF, sys_setxattr, "lsetxattr" }, /* 6 */ + { 5, TD, sys_fsetxattr, "fsetxattr" }, /* 7 */ + { 4, TF, sys_getxattr, "getxattr" }, /* 8 */ + { 4, TF, sys_getxattr, "lgetxattr" }, /* 9 */ + { 4, TD, sys_fgetxattr, "fgetxattr" }, /* 10 */ + { 3, TF, sys_listxattr, "listxattr" }, /* 11 */ + { 3, TF, sys_listxattr, "llistxattr" }, /* 12 */ + { 3, TD, sys_flistxattr, "flistxattr" }, /* 13 */ + { 2, TF, sys_removexattr, "removexattr" }, /* 14 */ + { 2, TF, sys_removexattr, "lremovexattr" }, /* 15 */ + { 2, TD, sys_fremovexattr, "fremovexattr" }, /* 16 */ + { 2, TF, sys_getcwd, "getcwd" }, /* 17 */ + { 4, 0, sys_lookup_dcookie, "lookup_dcookie" }, /* 18 */ + { 2, TD, sys_eventfd2, "eventfd2" }, /* 19 */ + { 1, TD, sys_epoll_create1, "epoll_create1" }, /* 20 */ + { 4, TD, sys_epoll_ctl, "epoll_ctl" }, /* 21 */ + { 6, TD, sys_epoll_pwait, "epoll_pwait" }, /* 22 */ + { 1, TD, sys_dup, "dup" }, /* 23 */ + { 3, TD, sys_dup3, "dup3" }, /* 24 */ + { 3, TD, sys_fcntl, "fcntl" }, /* 25 */ + { 1, TD, sys_inotify_init1, "inotify_init1" }, /* 26 */ + { 3, TD, sys_inotify_add_watch, "inotify_add_watch" }, /* 27 */ + { 2, TD, sys_inotify_rm_watch, "inotify_rm_watch" }, /* 28 */ + { 3, TD, sys_ioctl, "ioctl" }, /* 29 */ + { 3, 0, sys_ioprio_set, "ioprio_set" }, /* 30 */ + { 2, 0, sys_ioprio_get, "ioprio_get" }, /* 31 */ + { 2, TD, sys_flock, "flock" }, /* 32 */ + { 4, TD|TF, sys_mknodat, "mknodat" }, /* 33 */ + { 3, TD|TF, sys_mkdirat, "mkdirat" }, /* 34 */ + { 3, TD|TF, sys_unlinkat, "unlinkat" }, /* 35 */ + { 3, TD|TF, sys_symlinkat, "symlinkat" }, /* 36 */ + { 5, TD|TF, sys_linkat, "linkat" }, /* 37 */ + { 4, TD|TF, sys_renameat, "renameat" }, /* 38 */ + { 2, TF, sys_umount2, "umount2" }, /* 39 */ + { 5, TF, sys_mount, "mount" }, /* 40 */ + { 2, TF, sys_pivotroot, "pivot_root" }, /* 41 */ + { 3, 0, sys_nfsservctl, "nfsservctl" }, /* 42 */ + { 2, TF, sys_statfs, "statfs64" }, /* 43 */ + { 2, TD, sys_fstatfs, "fstatfs64" }, /* 44 */ + { 2, TF, sys_truncate, "truncate64" }, /* 45 */ + { 2, TD, sys_ftruncate, "ftruncate64" }, /* 46 */ + { 6, TD, sys_fallocate, "fallocate" }, /* 47 */ + { 3, TD|TF, sys_faccessat, "faccessat" }, /* 48 */ + { 1, TF, sys_chdir, "chdir" }, /* 49 */ + { 1, TD, sys_fchdir, "fchdir" }, /* 50 */ + { 1, TF, sys_chroot, "chroot" }, /* 51 */ + { 2, TD, sys_fchmod, "fchmod" }, /* 52 */ + { 3, TD|TF, sys_fchmodat, "fchmodat" }, /* 53 */ + { 5, TD|TF, sys_fchownat, "fchownat" }, /* 54 */ + { 3, TD, sys_fchown, "fchown" }, /* 55 */ + { 4, TD|TF, sys_openat, "openat" }, /* 56 */ + { 1, TD, sys_close, "close" }, /* 57 */ + { 0, 0, sys_vhangup, "vhangup" }, /* 58 */ + { 2, TD, sys_pipe2, "pipe2" }, /* 59 */ + { 4, 0, sys_quotactl, "quotactl" }, /* 60 */ + { 3, TD, sys_getdents64, "getdents64" }, /* 61 */ + { 3, TD, sys_lseek, "lseek" }, /* 62 */ + { 3, TD, sys_read, "read" }, /* 63 */ + { 3, TD, sys_write, "write" }, /* 64 */ + { 3, TD, sys_readv, "readv" }, /* 65 */ + { 3, TD, sys_writev, "writev" }, /* 66 */ + { 5, TD, sys_pread, "pread64" }, /* 67 */ + { 5, TD, sys_pwrite, "pwrite64" }, /* 68 */ + { 5, TD, sys_preadv, "preadv" }, /* 69 */ + { 5, TD, sys_pwritev, "pwritev" }, /* 70 */ + { 4, TD|TN, sys_sendfile, "sendfile" }, /* 71 */ + { 6, TD, sys_pselect6, "pselect6" }, /* 72 */ + { 5, TD, sys_ppoll, "ppoll" }, /* 73 */ + { 4, TD|TS, sys_signalfd4, "signalfd4" }, /* 74 */ + { 4, TD, sys_vmsplice, "vmsplice" }, /* 75 */ + { 6, TD, sys_splice, "splice" }, /* 76 */ + { 4, TD, sys_tee, "tee" }, /* 77 */ + { 4, TD|TF, sys_readlinkat, "readlinkat" }, /* 78 */ + { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 79 */ + { 2, TD, sys_fstat, "fstat" }, /* 80 */ + { 0, 0, sys_sync, "sync" }, /* 81 */ + { 1, TD, sys_fsync, "fsync" }, /* 82 */ + { 1, TD, sys_fdatasync, "fdatasync" }, /* 83 */ + { 4, TD, sys_sync_file_range, "sync_file_range" }, /* 84 */ + { 2, TD, sys_timerfd_create, "timerfd_create" }, /* 85 */ + { 4, TD, sys_timerfd_settime, "timerfd_settime" }, /* 86 */ + { 2, TD, sys_timerfd_gettime, "timerfd_gettime" }, /* 87 */ + { 4, TD|TF, sys_utimensat, "utimensat" }, /* 88 */ + { 1, TF, sys_acct, "acct" }, /* 89 */ + { 2, 0, sys_capget, "capget" }, /* 90 */ + { 2, 0, sys_capset, "capset" }, /* 91 */ + { 1, 0, sys_personality, "personality" }, /* 92 */ + { 1, TP, sys_exit, "exit" }, /* 93 */ + { 1, TP, sys_exit, "exit_group" }, /* 94 */ + { 5, TP, sys_waitid, "waitid" }, /* 95 */ + { 1, 0, sys_set_tid_address, "set_tid_address" }, /* 96 */ + { 1, TP, sys_unshare, "unshare" }, /* 97 */ + { 6, 0, sys_futex, "futex" }, /* 98 */ + { 2, 0, sys_set_robust_list, "set_robust_list" }, /* 99 */ + { 3, 0, sys_get_robust_list, "get_robust_list" }, /* 100 */ + { 2, 0, sys_nanosleep, "nanosleep" }, /* 101 */ + { 2, 0, sys_getitimer, "getitimer" }, /* 102 */ + { 3, 0, sys_setitimer, "setitimer" }, /* 103 */ + { 4, 0, sys_kexec_load, "kexec_load" }, /* 104 */ + { 3, 0, sys_init_module, "init_module" }, /* 105 */ + { 2, 0, sys_delete_module, "delete_module" }, /* 106 */ + { 3, 0, sys_timer_create, "timer_create" }, /* 107 */ + { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 108 */ + { 1, 0, sys_timer_getoverrun, "timer_getoverrun" }, /* 109 */ + { 4, 0, sys_timer_settime, "timer_settime" }, /* 110 */ + { 1, 0, sys_timer_delete, "timer_delete" }, /* 111 */ + { 2, 0, sys_clock_settime, "clock_settime" }, /* 112 */ + { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 113 */ + { 2, 0, sys_clock_getres, "clock_getres" }, /* 114 */ + { 4, 0, sys_clock_nanosleep, "clock_nanosleep" }, /* 115 */ + { 3, 0, sys_syslog, "syslog" }, /* 116 */ + { 4, 0, sys_ptrace, "ptrace" }, /* 117 */ + { 0, 0, sys_sched_setparam, "sched_setparam" }, /* 118 */ + { 3, 0, sys_sched_setscheduler, "sched_setscheduler" }, /* 119 */ + { 1, 0, sys_sched_getscheduler, "sched_getscheduler" }, /* 120 */ + { 2, 0, sys_sched_getparam, "sched_getparam" }, /* 121 */ + { 3, 0, sys_sched_setaffinity, "sched_setaffinity" }, /* 122 */ + { 3, 0, sys_sched_getaffinity, "sched_getaffinity" }, /* 123 */ + { 0, 0, sys_sched_yield, "sched_yield" }, /* 124 */ + { 1, 0, sys_sched_get_priority_max, "sched_get_priority_max" }, /* 125 */ + { 1, 0, sys_sched_get_priority_min, "sched_get_priority_min" }, /* 126 */ + { 2, 0, sys_sched_rr_get_interval, "sched_rr_get_interval" }, /* 127 */ + { 0, 0, sys_restart_syscall, "restart_syscall" }, /* 128 */ + { 2, TS, sys_kill, "kill" }, /* 129 */ + { 2, TS, sys_kill, "tkill" }, /* 130 */ + { 3, TS, sys_tgkill, "tgkill" }, /* 131 */ + { 2, TS, sys_sigaltstack, "sigaltstack" }, /* 132 */ + { 2, TS, sys_rt_sigsuspend, "rt_sigsuspend" }, /* 133 */ + { 4, TS, sys_rt_sigaction, "rt_sigaction" }, /* 134 */ + { 4, TS, sys_rt_sigprocmask, "rt_sigprocmask" }, /* 135 */ + { 2, TS, sys_rt_sigpending, "rt_sigpending" }, /* 136 */ + { 4, TS, sys_rt_sigtimedwait, "rt_sigtimedwait" }, /* 137 */ + { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo" }, /* 138 */ + { 0, TS, sys_rt_sigreturn, "rt_sigreturn" }, /* 139 */ + { 3, 0, sys_setpriority, "setpriority" }, /* 140 */ + { 2, 0, sys_getpriority, "getpriority" }, /* 141 */ + { 4, 0, sys_reboot, "reboot" }, /* 142 */ + { 2, 0, sys_setregid, "setregid" }, /* 143 */ + { 1, 0, sys_setgid, "setgid" }, /* 144 */ + { 2, 0, sys_setreuid, "setreuid" }, /* 145 */ + { 1, 0, sys_setuid, "setuid" }, /* 146 */ + { 3, 0, sys_setresuid, "setresuid" }, /* 147 */ + { 3, 0, sys_getresuid, "getresuid" }, /* 148 */ + { 3, 0, sys_setresgid, "setresgid" }, /* 149 */ + { 3, 0, sys_getresgid, "getresgid" }, /* 150 */ + { 1, NF, sys_setfsuid, "setfsuid" }, /* 151 */ + { 1, NF, sys_setfsgid, "setfsgid" }, /* 152 */ + { 1, 0, sys_times, "times" }, /* 153 */ + { 2, 0, sys_setpgid, "setpgid" }, /* 154 */ + { 1, 0, sys_getpgid, "getpgid" }, /* 155 */ + { 1, 0, sys_getsid, "getsid" }, /* 156 */ + { 0, 0, sys_setsid, "setsid" }, /* 157 */ + { 2, 0, sys_getgroups, "getgroups" }, /* 158 */ + { 2, 0, sys_setgroups, "setgroups" }, /* 159 */ + { 1, 0, sys_uname, "uname" }, /* 160 */ + { 2, 0, sys_sethostname, "sethostname" }, /* 161 */ + { 2, 0, sys_setdomainname, "setdomainname" }, /* 162 */ + { 2, 0, sys_getrlimit, "getrlimit" }, /* 163 */ + { 2, 0, sys_setrlimit, "setrlimit" }, /* 164 */ + { 2, 0, sys_getrusage, "getrusage" }, /* 165 */ + { 1, 0, sys_umask, "umask" }, /* 166 */ + { 5, 0, sys_prctl, "prctl" }, /* 167 */ + { 3, 0, sys_getcpu, "getcpu" }, /* 168 */ + { 2, 0, sys_gettimeofday, "gettimeofday" }, /* 169 */ + { 2, 0, sys_settimeofday, "settimeofday" }, /* 170 */ + { 1, 0, sys_adjtimex, "adjtimex" }, /* 171 */ + { 0, 0, sys_getpid, "getpid" }, /* 172 */ + { 0, 0, sys_getppid, "getppid" }, /* 173 */ + { 0, NF, sys_getuid, "getuid" }, /* 174 */ + { 0, NF, sys_geteuid, "geteuid" }, /* 175 */ + { 0, NF, sys_getgid, "getgid" }, /* 176 */ + { 0, NF, sys_getegid, "getegid" }, /* 177 */ + { 0, 0, sys_gettid, "gettid" }, /* 178 */ + { 1, 0, sys_sysinfo, "sysinfo" }, /* 179 */ + { 4, 0, sys_mq_open, "mq_open" }, /* 180 */ + { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 181 */ + { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 182 */ + { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 183 */ + { 2, 0, sys_mq_notify, "mq_notify" }, /* 184 */ + { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 185 */ + { 4, TI, sys_msgget, "msgget" }, /* 186 */ + { 3, TI, sys_msgctl, "msgctl" }, /* 187 */ + { 5, TI, sys_msgrcv, "msgrcv" }, /* 188 */ + { 4, TI, sys_msgsnd, "msgsnd" }, /* 189 */ + { 4, TI, sys_semget, "semget" }, /* 190 */ + { 4, TI, sys_semctl, "semctl" }, /* 191 */ + { 5, TI, sys_semtimedop, "semtimedop" }, /* 192 */ + { 4, TI, sys_semop, "semop" }, /* 193 */ + { 4, TI, sys_shmget, "shmget" }, /* 194 */ + { 4, TI, sys_shmctl, "shmctl" }, /* 195 */ + { 4, TI, sys_shmat, "shmat" }, /* 196 */ + { 4, TI, sys_shmdt, "shmdt" }, /* 197 */ + { 3, TN, sys_socket, "socket" }, /* 198 */ + { 4, TN, sys_socketpair, "socketpair" }, /* 199 */ + { 3, TN, sys_bind, "bind" }, /* 200 */ + { 2, TN, sys_listen, "listen" }, /* 201 */ + { 3, TN, sys_accept, "accept" }, /* 202 */ + { 3, TN, sys_connect, "connect" }, /* 203 */ + { 3, TN, sys_getsockname, "getsockname" }, /* 204 */ + { 3, TN, sys_getpeername, "getpeername" }, /* 205 */ + { 6, TN, sys_sendto, "sendto" }, /* 206 */ + { 6, TN, sys_recvfrom, "recvfrom" }, /* 207 */ + { 5, TN, sys_setsockopt, "setsockopt" }, /* 208 */ + { 5, TN, sys_getsockopt, "getsockopt" }, /* 209 */ + { 2, TN, sys_shutdown, "shutdown" }, /* 210 */ + { 3, TN, sys_sendmsg, "sendmsg" }, /* 211 */ + { 5, TN, sys_recvmsg, "recvmsg" }, /* 212 */ + { 4, TD, sys_readahead, "readahead" }, /* 213 */ + { 1, 0, sys_brk, "brk" }, /* 214 */ + { 2, 0, sys_munmap, "munmap" }, /* 215 */ + { 5, 0, sys_mremap, "mremap" }, /* 216 */ + { 5, 0, sys_add_key, "add_key" }, /* 217 */ + { 4, 0, sys_request_key, "request_key" }, /* 218 */ + { 5, 0, sys_keyctl, "keyctl" }, /* 219 */ + { 5, TP, sys_clone, "clone" }, /* 220 */ + { 3, TF|TP, sys_execve, "execve" }, /* 221 */ + { 6, TD, sys_mmap, "mmap" }, /* 222 */ + { 4, TD, sys_fadvise64, "fadvise64" }, /* 223 */ + { 2, TF, sys_swapon, "swapon" }, /* 224 */ + { 1, TF, sys_swapoff, "swapoff" }, /* 225 */ + { 3, 0, sys_mprotect, "mprotect" }, /* 226 */ + { 3, 0, sys_msync, "msync" }, /* 227 */ + { 3, 0, sys_msync, "msync" }, /* 228 */ + { 2, 0, sys_munlock, "munlock" }, /* 229 */ + { 1, 0, sys_mlockall, "mlockall" }, /* 230 */ + { 0, 0, sys_munlockall, "munlockall" }, /* 231 */ + { 3, 0, sys_mincore, "mincore" }, /* 232 */ + { 3, 0, sys_madvise, "madvise" }, /* 233 */ + { 5, 0, sys_remap_file_pages, "remap_file_pages" }, /* 234 */ + { 6, 0, sys_mbind, "mbind" }, /* 235 */ + { 5, 0, sys_get_mempolicy, "get_mempolicy" }, /* 236 */ + { 3, 0, sys_set_mempolicy, "set_mempolicy" }, /* 237 */ + { 4, 0, sys_migrate_pages, "migrate_pages" }, /* 238 */ + { 6, 0, sys_move_pages, "move_pages" }, /* 239 */ + { 4, TP|TS, sys_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" }, /* 240 */ + { 5, TD, sys_perf_event_open, "perf_event_open" }, /* 241 */ + { 4, TN, sys_accept4, "accept4" }, /* 242 */ + { 5, TN, sys_recvmmsg, "recvmmsg" }, /* 243 */ + + /* Arch-specific block, not used on AArch64 */ + [244 ... 259] = { }, + + { 4, TP, sys_wait4, "wait4" }, /* 260 */ + { 4, 0, sys_prlimit64, "prlimit64" }, /* 261 */ + { 2, TD, sys_fanotify_init, "fanotify_init" }, /* 262 */ + { 5, TD|TF, sys_fanotify_mark, "fanotify_mark" }, /* 263 */ + { 5, TD|TF, sys_name_to_handle_at, "name_to_handle_at" }, /* 264 */ + { 3, TD, sys_open_by_handle_at, "open_by_handle_at" }, /* 265 */ + { 2, 0, sys_clock_adjtime, "clock_adjtime" }, /* 266 */ + { 1, TD, sys_syncfs, "syncfs" }, /* 267 */ + { 2, TD, sys_setns, "setns" }, /* 268 */ + { 4, TN, sys_sendmmsg, "sendmmsg" }, /* 269 */ + { 6, 0, sys_process_vm_readv, "process_vm_readv" }, /* 270 */ + { 6, 0, sys_process_vm_writev, "process_vm_writev" }, /* 271 */ + + /* Blank down to 1023 */ + [272 ... 1023] = { }, + + /* Quote from asm-generic/unistd.h: + * + * All syscalls below here should go away really, + * these are provided for both review and as a porting + * help for the C library version. + * + * Last chance: are any of these important enough to + * enable by default? + */ + + { 3, TD|TF, sys_open, "open" }, /* 1024 */ + { 2, TF, sys_link, "link" }, /* 1025 */ + { 1, TF, sys_unlink, "unlink" }, /* 1026 */ + { 3, TF, sys_mknod, "mknod" }, /* 1027 */ + { 2, TF, sys_chmod, "chmod" }, /* 1028 */ + { 3, TF, sys_chown, "chown" }, /* 1029 */ + { 2, TF, sys_mkdir, "mkdir" }, /* 1030 */ + { 1, TF, sys_rmdir, "rmdir" }, /* 1031 */ + { 3, TF, sys_chown, "lchown" }, /* 1032 */ + { 2, TF, sys_access, "access" }, /* 1033 */ + { 2, TF, sys_rename, "rename" }, /* 1034 */ + { 3, TF, sys_readlink, "readlink" }, /* 1035 */ + { 2, TF, sys_symlink, "symlink" }, /* 1036 */ + { 2, TF, sys_utimes, "utimes" }, /* 1037 */ + { 2, TF, sys_stat, "stat" }, /* 1038 */ + { 2, TF, sys_lstat, "lstat" }, /* 1039 */ + { 1, TD, sys_pipe, "pipe" }, /* 1040 */ + { 2, TD, sys_dup2, "dup2" }, /* 1041 */ + { 1, TD, sys_epoll_create, "epoll_create" }, /* 1042 */ + { 0, TD, sys_inotify_init, "inotify_init" }, /* 1043 */ + { 1, TD, sys_eventfd, "eventfd" }, /* 1044 */ + { 3, TD|TS, sys_signalfd, "signalfd" }, /* 1045 */ + { 4, TD|TN, sys_sendfile, "sendfile" }, /* 1046 */ + { 2, TD, sys_ftruncate, "ftruncate" }, /* 1047 */ + { 2, TF, sys_truncate, "truncate" }, /* 1048 */ + { 2, TF, sys_stat, "stat" }, /* 1049 */ + { 2, TF, sys_lstat, "lstat" }, /* 1050 */ + { 2, TD, sys_fstat, "fstat" }, /* 1051 */ + { 3, TD, sys_fcntl, "fcntl" }, /* 1052 */ + { 4, TD, sys_fadvise64, "fadvise64" }, /* 1053 */ + { 4, TD|TF, sys_newfstatat, "newfstatat" }, /* 1054 */ + { 2, TD, sys_fstatfs, "fstatfs" }, /* 1055 */ + { 2, TF, sys_statfs, "statfs" }, /* 1056 */ + { 3, TD, sys_lseek, "lseek" }, /* 1057 */ + { 6, TD, sys_mmap, "mmap" }, /* 1058 */ + { 1, 0, sys_alarm, "alarm" }, /* 1059 */ + { 0, 0, sys_getpgrp, "getpgrp" }, /* 1060 */ + { 0, TS, sys_pause, "pause" }, /* 1061 */ + { 1, 0, sys_time, "time" }, /* 1062 */ + { 2, TF, sys_utime, "utime" }, /* 1063 */ + { 2, TD|TF, sys_creat, "creat" }, /* 1064 */ + { 3, TD, sys_getdents, "getdents" }, /* 1065 */ + { 3, TD|TF, sys_futimesat, "futimesat" }, /* 1066 */ + { 5, TD, sys_select, "select" }, /* 1067 */ + { 3, TD, sys_poll, "poll" }, /* 1068 */ + { 4, TD, sys_epoll_wait, "epoll_wait" }, /* 1069 */ + { 2, 0, sys_ustat, "ustat" }, /* 1070 */ + { 0, TP, sys_vfork, "vfork" }, /* 1071 */ + { 4, TP, sys_wait4, "wait4" }, /* 1072 */ + { 6, TN, sys_recv, "recv" }, /* 1073 */ + { 4, TD|TN, sys_send, "send" }, /* 1074 */ + { 2, 0, sys_bdflush, "bdflush" }, /* 1075 */ + { 2, TF, sys_umount, "umount" }, /* 1076 */ + { 1, TF, sys_uselib, "uselib" }, /* 1077 */ + { 1, 0, sys_sysctl, "sysctl" }, /* 1078 */ + { 0, TP, sys_fork, "fork" }, /* 1079 */ diff --git a/process.c b/process.c index fa304e5..467c096 100644 --- a/process.c +++ b/process.c @@ -2119,7 +2119,8 @@ const struct xlat struct_user_offsets[] = { #if !defined(SPARC) && !defined(HPPA) && !defined(POWERPC) \ && !defined(ALPHA) && !defined(IA64) \ - && !defined(CRISV10) && !defined(CRISV32) && !defined(MICROBLAZE) + && !defined(CRISV10) && !defined(CRISV32) && !defined(MICROBLAZE) \ + && !defined(AARCH64) # if !defined(S390) && !defined(S390X) && !defined(MIPS) && !defined(SPARC64) && !defined(AVR32) && !defined(BFIN) && !defined(TILE) { uoff(u_fpvalid), "offsetof(struct user, u_fpvalid)" }, # endif @@ -2148,7 +2149,7 @@ const struct xlat struct_user_offsets[] = { # if !defined(SPARC64) { uoff(u_ar0), "offsetof(struct user, u_ar0)" }, # endif -# if !defined(ARM) && !defined(AVR32) && !defined(MIPS) && !defined(S390) && !defined(S390X) && !defined(SPARC64) && !defined(BFIN) && !defined(TILE) +# if !defined(ARM) && !defined(AARCH64) && !defined(AVR32) && !defined(MIPS) && !defined(S390) && !defined(S390X) && !defined(SPARC64) && !defined(BFIN) && !defined(TILE) { uoff(u_fpstate), "offsetof(struct user, u_fpstate)" }, # endif { uoff(magic), "offsetof(struct user, magic)" }, @@ -2158,7 +2159,7 @@ const struct xlat struct_user_offsets[] = { # endif #endif /* !defined(many arches) */ -#ifndef HPPA +#if !defined(HPPA) && !defined(AARCH64) { sizeof(struct user), "sizeof(struct user)" }, #endif { 0, NULL }, diff --git a/syscall.c b/syscall.c index c4c5e86..0caeaae 100644 --- a/syscall.c +++ b/syscall.c @@ -65,6 +65,12 @@ # include <asm/rse.h> #endif +#if defined(AARCH64) +# include <asm/ptrace.h> +# include <sys/uio.h> +# include <elf.h> +#endif + #ifndef ERESTARTSYS # define ERESTARTSYS 512 #endif @@ -653,6 +659,8 @@ static long d0; static long r0; #elif defined(ARM) static struct pt_regs regs; +#elif defined(AARCH64) +static struct user_pt_regs regs; #elif defined(ALPHA) static long r0; static long a3; @@ -963,6 +971,13 @@ get_scno(struct tcb *tcp) fprintf(stderr, "pid %d stray syscall entry\n", tcp->pid); tcp->flags |= TCB_INSYSCALL; } +#elif defined(AARCH64) + struct iovec io; + io.iov_base = ®s; + io.iov_len = sizeof(regs); + if (ptrace(PTRACE_GETREGSET, tcp->pid, NT_PRSTATUS, (void *)&io) == -1) + return -1; + scno = regs.regs[8]; #elif defined(M68K) if (upeek(tcp, 4*PT_ORIG_D0, &scno) < 0) return -1; @@ -1399,6 +1414,9 @@ get_syscall_args(struct tcb *tcp) #elif defined(ARM) for (i = 0; i < nargs; ++i) tcp->u_arg[i] = regs.uregs[i]; +#elif defined(AARCH64) + for (i = 0; i < nargs; ++i) + tcp->u_arg[i] = regs.regs[i]; #elif defined(AVR32) (void)i; (void)nargs; @@ -1637,6 +1655,12 @@ get_syscall_result(struct tcb *tcp) /* Read complete register set in one go. */ if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (void *)®s) == -1) return -1; +#elif defined(AARCH64) + struct iovec io; + io.iov_base = ®s; + io.iov_len = sizeof(regs); + if (ptrace(PTRACE_GETREGSET, tcp->pid, NT_PRSTATUS, (void *)&io) == -1) + return -1; #elif defined(M68K) if (upeek(tcp, 4*PT_D0, &d0) < 0) return -1; @@ -1819,6 +1843,14 @@ get_error(struct tcb *tcp) else { tcp->u_rval = regs.ARM_r0; } +#elif defined(AARCH64) + if (check_errno && is_negated_errno(regs.regs[0])) { + tcp->u_rval = -1; + u_error = -regs.regs[0]; + } + else { + tcp->u_rval = regs.regs[0]; + } #elif defined(AVR32) if (check_errno && regs.r12 && (unsigned) -regs.r12 < nerrnos) { tcp->u_rval = -1; -- 1.7.10.4 Cheers, -- Steve McIntyre ste...@li... <http://www.linaro.org/> Linaro.org | Open source software for ARM SoCs |
From: Dmitry V. L. <ld...@al...> - 2012-10-27 15:44:36
|
On Wed, Oct 24, 2012 at 05:58:16PM +0100, Steve McIntyre wrote: > On Tue, Oct 23, 2012 at 02:11:59PM -0400, Mike Frysinger wrote: > >On Tuesday 23 October 2012 12:38:22 Steve McIntyre wrote: > >> Add AArch64 support to strace [...] > New patch included here with these changes included. Applied with linux/aarch64/syscallent.h updated for newly introduced trace=memory support. Thanks! -- ldv |
From: Steve M. <ste...@li...> - 2012-10-24 17:00:18
|
On Wed, Oct 24, 2012 at 02:39:47PM +0400, Dmitry V. Levin wrote: >On Tue, Oct 23, 2012 at 05:38:22PM +0100, Steve McIntyre wrote: >[...] >> * syscall.c: Support AArch64. Uses new PTRACE_GETREGSET ptrace request >> instead of PTRACE_GETREGS, so also include sys/uio.h and elf.h for needed >> definitions. > >Could you please enlighten us what was the rationale behind this decision? >Is there any registers you need that couldn't be easily obtained using >PTRACE_GETREGS? Hi Dmitry, The old PTRACE_GETREGS request only works for 32-bit mode; it seems the kernel folks are preferring a new ptrace interface now. Cheers, -- Steve McIntyre ste...@li... <http://www.linaro.org/> Linaro.org | Open source software for ARM SoCs |
From: Mike F. <va...@ge...> - 2012-10-24 19:09:14
Attachments:
signature.asc
|
On Wednesday 24 October 2012 12:59:45 Steve McIntyre wrote: > On Wed, Oct 24, 2012 at 02:39:47PM +0400, Dmitry V. Levin wrote: > >On Tue, Oct 23, 2012 at 05:38:22PM +0100, Steve McIntyre wrote: > >[...] > > > >> * syscall.c: Support AArch64. Uses new PTRACE_GETREGSET ptrace request > >> instead of PTRACE_GETREGS, so also include sys/uio.h and elf.h for > >> needed definitions. > > > >Could you please enlighten us what was the rationale behind this decision? > >Is there any registers you need that couldn't be easily obtained using > >PTRACE_GETREGS? > > The old PTRACE_GETREGS request only works for 32-bit mode; it seems > the kernel folks are preferring a new ptrace interface now. hmm, i'm pretty sure it could work. let the old syscall # route to a compat ptrace entry point and let the new syscall # route to the native 64bit ptrace. whether the kernel folks want to go a different route is a different story though. -mike |