diff options
Diffstat (limited to 'tools/perf/trace')
-rw-r--r-- | tools/perf/trace/beauty/Build | 6 | ||||
-rw-r--r-- | tools/perf/trace/beauty/include/linux/socket.h | 2 | ||||
-rw-r--r-- | tools/perf/trace/beauty/include/uapi/linux/fcntl.h | 4 | ||||
-rw-r--r-- | tools/perf/trace/beauty/include/uapi/linux/fs.h | 21 | ||||
-rw-r--r-- | tools/perf/trace/beauty/include/uapi/linux/mount.h | 10 | ||||
-rw-r--r-- | tools/perf/trace/beauty/include/uapi/linux/prctl.h | 11 | ||||
-rw-r--r-- | tools/perf/trace/beauty/include/uapi/linux/stat.h | 99 | ||||
-rw-r--r-- | tools/perf/trace/beauty/include/uapi/sound/asound.h | 8 | ||||
-rwxr-xr-x | tools/perf/trace/beauty/syscalltbl.sh | 274 |
9 files changed, 400 insertions, 35 deletions
diff --git a/tools/perf/trace/beauty/Build b/tools/perf/trace/beauty/Build index cb3c1399ff40..f50ebdc445b8 100644 --- a/tools/perf/trace/beauty/Build +++ b/tools/perf/trace/beauty/Build @@ -23,14 +23,14 @@ perf-y += tracepoints/ ifdef SHELLCHECK SHELL_TESTS := $(wildcard trace/beauty/*.sh) - TEST_LOGS := $(SHELL_TESTS:trace/beauty/%=%.shellcheck_log) + SHELL_TEST_LOGS := $(SHELL_TESTS:trace/beauty/%=%.shellcheck_log) else SHELL_TESTS := - TEST_LOGS := + SHELL_TEST_LOGS := endif $(OUTPUT)%.shellcheck_log: % $(call rule_mkdir) $(Q)$(call echo-cmd,test)shellcheck -s bash -a -S warning "$<" > $@ || (cat $@ && rm $@ && false) -perf-y += $(TEST_LOGS) +perf-y += $(SHELL_TEST_LOGS) diff --git a/tools/perf/trace/beauty/include/linux/socket.h b/tools/perf/trace/beauty/include/linux/socket.h index d18cc47e89bd..c3322eb3d686 100644 --- a/tools/perf/trace/beauty/include/linux/socket.h +++ b/tools/perf/trace/beauty/include/linux/socket.h @@ -392,6 +392,8 @@ struct ucred { extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr_storage *kaddr); extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); +extern int put_cmsg_notrunc(struct msghdr *msg, int level, int type, int len, + void *data); struct timespec64; struct __kernel_timespec; diff --git a/tools/perf/trace/beauty/include/uapi/linux/fcntl.h b/tools/perf/trace/beauty/include/uapi/linux/fcntl.h index 6e6907e63bfc..a15ac2fa4b20 100644 --- a/tools/perf/trace/beauty/include/uapi/linux/fcntl.h +++ b/tools/perf/trace/beauty/include/uapi/linux/fcntl.h @@ -155,4 +155,8 @@ #define AT_HANDLE_MNT_ID_UNIQUE 0x001 /* Return the u64 unique mount ID. */ #define AT_HANDLE_CONNECTABLE 0x002 /* Request a connectable file handle */ +/* Flags for execveat2(2). */ +#define AT_EXECVE_CHECK 0x10000 /* Only perform a check if execution + would be allowed. */ + #endif /* _UAPI_LINUX_FCNTL_H */ diff --git a/tools/perf/trace/beauty/include/uapi/linux/fs.h b/tools/perf/trace/beauty/include/uapi/linux/fs.h index 753971770733..e762e1af650c 100644 --- a/tools/perf/trace/beauty/include/uapi/linux/fs.h +++ b/tools/perf/trace/beauty/include/uapi/linux/fs.h @@ -40,6 +40,15 @@ #define BLOCK_SIZE_BITS 10 #define BLOCK_SIZE (1<<BLOCK_SIZE_BITS) +/* flags for integrity meta */ +#define IO_INTEGRITY_CHK_GUARD (1U << 0) /* enforce guard check */ +#define IO_INTEGRITY_CHK_REFTAG (1U << 1) /* enforce ref check */ +#define IO_INTEGRITY_CHK_APPTAG (1U << 2) /* enforce app check */ + +#define IO_INTEGRITY_VALID_FLAGS (IO_INTEGRITY_CHK_GUARD | \ + IO_INTEGRITY_CHK_REFTAG | \ + IO_INTEGRITY_CHK_APPTAG) + #define SEEK_SET 0 /* seek relative to beginning of file */ #define SEEK_CUR 1 /* seek relative to current file position */ #define SEEK_END 2 /* seek relative to end of file */ @@ -203,10 +212,8 @@ struct fsxattr { #define BLKROTATIONAL _IO(0x12,126) #define BLKZEROOUT _IO(0x12,127) #define BLKGETDISKSEQ _IOR(0x12,128,__u64) -/* - * A jump here: 130-136 are reserved for zoned block devices - * (see uapi/linux/blkzoned.h) - */ +/* 130-136 are used by zoned block device ioctls (uapi/linux/blkzoned.h) */ +/* 137-141 are used by blk-crypto ioctls (uapi/linux/blk-crypto.h) */ #define BMAP_IOCTL 1 /* obsolete - kept for compatibility */ #define FIBMAP _IO(0x00,1) /* bmap access */ @@ -332,9 +339,13 @@ typedef int __bitwise __kernel_rwf_t; /* Atomic Write */ #define RWF_ATOMIC ((__force __kernel_rwf_t)0x00000040) +/* buffered IO that drops the cache after reading or writing data */ +#define RWF_DONTCACHE ((__force __kernel_rwf_t)0x00000080) + /* mask of flags supported by the kernel */ #define RWF_SUPPORTED (RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT |\ - RWF_APPEND | RWF_NOAPPEND | RWF_ATOMIC) + RWF_APPEND | RWF_NOAPPEND | RWF_ATOMIC |\ + RWF_DONTCACHE) #define PROCFS_IOCTL_MAGIC 'f' diff --git a/tools/perf/trace/beauty/include/uapi/linux/mount.h b/tools/perf/trace/beauty/include/uapi/linux/mount.h index c07008816aca..7fa67c2031a5 100644 --- a/tools/perf/trace/beauty/include/uapi/linux/mount.h +++ b/tools/perf/trace/beauty/include/uapi/linux/mount.h @@ -179,7 +179,12 @@ struct statmount { __u32 opt_array; /* [str] Array of nul terminated fs options */ __u32 opt_sec_num; /* Number of security options */ __u32 opt_sec_array; /* [str] Array of nul terminated security options */ - __u64 __spare2[46]; + __u64 supported_mask; /* Mask flags that this kernel supports */ + __u32 mnt_uidmap_num; /* Number of uid mappings */ + __u32 mnt_uidmap; /* [str] Array of uid mappings (as seen from callers namespace) */ + __u32 mnt_gidmap_num; /* Number of gid mappings */ + __u32 mnt_gidmap; /* [str] Array of gid mappings (as seen from callers namespace) */ + __u64 __spare2[43]; char str[]; /* Variable size part containing strings */ }; @@ -217,6 +222,9 @@ struct mnt_id_req { #define STATMOUNT_SB_SOURCE 0x00000200U /* Want/got sb_source */ #define STATMOUNT_OPT_ARRAY 0x00000400U /* Want/got opt_... */ #define STATMOUNT_OPT_SEC_ARRAY 0x00000800U /* Want/got opt_sec... */ +#define STATMOUNT_SUPPORTED_MASK 0x00001000U /* Want/got supported mask flags */ +#define STATMOUNT_MNT_UIDMAP 0x00002000U /* Want/got uidmap... */ +#define STATMOUNT_MNT_GIDMAP 0x00004000U /* Want/got gidmap... */ /* * Special @mnt_id values that can be passed to listmount diff --git a/tools/perf/trace/beauty/include/uapi/linux/prctl.h b/tools/perf/trace/beauty/include/uapi/linux/prctl.h index 5c6080680cb2..15c18ef4eb11 100644 --- a/tools/perf/trace/beauty/include/uapi/linux/prctl.h +++ b/tools/perf/trace/beauty/include/uapi/linux/prctl.h @@ -353,4 +353,15 @@ struct prctl_mm_map { */ #define PR_LOCK_SHADOW_STACK_STATUS 76 +/* + * Controls the mode of timer_create() for CRIU restore operations. + * Enabling this allows CRIU to restore timers with explicit IDs. + * + * Don't use for normal operations as the result might be undefined. + */ +#define PR_TIMER_CREATE_RESTORE_IDS 77 +# define PR_TIMER_CREATE_RESTORE_IDS_OFF 0 +# define PR_TIMER_CREATE_RESTORE_IDS_ON 1 +# define PR_TIMER_CREATE_RESTORE_IDS_GET 2 + #endif /* _LINUX_PRCTL_H */ diff --git a/tools/perf/trace/beauty/include/uapi/linux/stat.h b/tools/perf/trace/beauty/include/uapi/linux/stat.h index 887a25286441..f78ee3670dd5 100644 --- a/tools/perf/trace/beauty/include/uapi/linux/stat.h +++ b/tools/perf/trace/beauty/include/uapi/linux/stat.h @@ -98,43 +98,93 @@ struct statx_timestamp { */ struct statx { /* 0x00 */ - __u32 stx_mask; /* What results were written [uncond] */ - __u32 stx_blksize; /* Preferred general I/O size [uncond] */ - __u64 stx_attributes; /* Flags conveying information about the file [uncond] */ + /* What results were written [uncond] */ + __u32 stx_mask; + + /* Preferred general I/O size [uncond] */ + __u32 stx_blksize; + + /* Flags conveying information about the file [uncond] */ + __u64 stx_attributes; + /* 0x10 */ - __u32 stx_nlink; /* Number of hard links */ - __u32 stx_uid; /* User ID of owner */ - __u32 stx_gid; /* Group ID of owner */ - __u16 stx_mode; /* File mode */ + /* Number of hard links */ + __u32 stx_nlink; + + /* User ID of owner */ + __u32 stx_uid; + + /* Group ID of owner */ + __u32 stx_gid; + + /* File mode */ + __u16 stx_mode; __u16 __spare0[1]; + /* 0x20 */ - __u64 stx_ino; /* Inode number */ - __u64 stx_size; /* File size */ - __u64 stx_blocks; /* Number of 512-byte blocks allocated */ - __u64 stx_attributes_mask; /* Mask to show what's supported in stx_attributes */ + /* Inode number */ + __u64 stx_ino; + + /* File size */ + __u64 stx_size; + + /* Number of 512-byte blocks allocated */ + __u64 stx_blocks; + + /* Mask to show what's supported in stx_attributes */ + __u64 stx_attributes_mask; + /* 0x40 */ - struct statx_timestamp stx_atime; /* Last access time */ - struct statx_timestamp stx_btime; /* File creation time */ - struct statx_timestamp stx_ctime; /* Last attribute change time */ - struct statx_timestamp stx_mtime; /* Last data modification time */ + /* Last access time */ + struct statx_timestamp stx_atime; + + /* File creation time */ + struct statx_timestamp stx_btime; + + /* Last attribute change time */ + struct statx_timestamp stx_ctime; + + /* Last data modification time */ + struct statx_timestamp stx_mtime; + /* 0x80 */ - __u32 stx_rdev_major; /* Device ID of special file [if bdev/cdev] */ + /* Device ID of special file [if bdev/cdev] */ + __u32 stx_rdev_major; __u32 stx_rdev_minor; - __u32 stx_dev_major; /* ID of device containing file [uncond] */ + + /* ID of device containing file [uncond] */ + __u32 stx_dev_major; __u32 stx_dev_minor; + /* 0x90 */ __u64 stx_mnt_id; - __u32 stx_dio_mem_align; /* Memory buffer alignment for direct I/O */ - __u32 stx_dio_offset_align; /* File offset alignment for direct I/O */ + + /* Memory buffer alignment for direct I/O */ + __u32 stx_dio_mem_align; + + /* File offset alignment for direct I/O */ + __u32 stx_dio_offset_align; + /* 0xa0 */ - __u64 stx_subvol; /* Subvolume identifier */ - __u32 stx_atomic_write_unit_min; /* Min atomic write unit in bytes */ - __u32 stx_atomic_write_unit_max; /* Max atomic write unit in bytes */ + /* Subvolume identifier */ + __u64 stx_subvol; + + /* Min atomic write unit in bytes */ + __u32 stx_atomic_write_unit_min; + + /* Max atomic write unit in bytes */ + __u32 stx_atomic_write_unit_max; + /* 0xb0 */ - __u32 stx_atomic_write_segments_max; /* Max atomic write segment count */ - __u32 __spare1[1]; + /* Max atomic write segment count */ + __u32 stx_atomic_write_segments_max; + + /* File offset alignment for direct I/O reads */ + __u32 stx_dio_read_offset_align; + /* 0xb8 */ __u64 __spare3[9]; /* Spare space for future expansion */ + /* 0x100 */ }; @@ -164,6 +214,7 @@ struct statx { #define STATX_MNT_ID_UNIQUE 0x00004000U /* Want/got extended stx_mount_id */ #define STATX_SUBVOL 0x00008000U /* Want/got stx_subvol */ #define STATX_WRITE_ATOMIC 0x00010000U /* Want/got atomic_write_* fields */ +#define STATX_DIO_READ_ALIGN 0x00020000U /* Want/got dio read alignment info */ #define STATX__RESERVED 0x80000000U /* Reserved for future struct statx expansion */ diff --git a/tools/perf/trace/beauty/include/uapi/sound/asound.h b/tools/perf/trace/beauty/include/uapi/sound/asound.h index 4cd513215bcd..5a049eeaecce 100644 --- a/tools/perf/trace/beauty/include/uapi/sound/asound.h +++ b/tools/perf/trace/beauty/include/uapi/sound/asound.h @@ -716,7 +716,7 @@ enum { * Raw MIDI section - /dev/snd/midi?? */ -#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 4) +#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 5) enum { SNDRV_RAWMIDI_STREAM_OUTPUT = 0, @@ -728,6 +728,9 @@ enum { #define SNDRV_RAWMIDI_INFO_INPUT 0x00000002 #define SNDRV_RAWMIDI_INFO_DUPLEX 0x00000004 #define SNDRV_RAWMIDI_INFO_UMP 0x00000008 +#define SNDRV_RAWMIDI_INFO_STREAM_INACTIVE 0x00000010 + +#define SNDRV_RAWMIDI_DEVICE_UNKNOWN 0 struct snd_rawmidi_info { unsigned int device; /* RO/WR (control): device number */ @@ -740,7 +743,8 @@ struct snd_rawmidi_info { unsigned char subname[32]; /* name of active or selected subdevice */ unsigned int subdevices_count; unsigned int subdevices_avail; - unsigned char reserved[64]; /* reserved for future use */ + int tied_device; /* R: tied rawmidi device (UMP/legacy) */ + unsigned char reserved[60]; /* reserved for future use */ }; #define SNDRV_RAWMIDI_MODE_FRAMING_MASK (7<<0) diff --git a/tools/perf/trace/beauty/syscalltbl.sh b/tools/perf/trace/beauty/syscalltbl.sh new file mode 100755 index 000000000000..1199618dc178 --- /dev/null +++ b/tools/perf/trace/beauty/syscalltbl.sh @@ -0,0 +1,274 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +# +# Generate all syscall tables. +# +# Each line of the syscall table should have the following format: +# +# NR ABI NAME [NATIVE] [COMPAT [noreturn]] +# +# NR syscall number +# ABI ABI name +# NAME syscall name +# NATIVE native entry point (optional) +# COMPAT compat entry point (optional) +# noreturn system call doesn't return (optional) +set -e + +usage() { + cat >&2 <<EOF +usage: $0 <TOOLS DIRECTORY> <OUTFILE> + + <TOOLS DIRECTORY> path to kernel tools directory + <OUTFILE> output header file +EOF + exit 1 +} + +if [ $# -ne 2 ]; then + usage +fi +tools_dir=$1 +outfile=$2 + +build_tables() { + infile="$1" + outfile="$2" + abis=$(echo "($3)" | tr ',' '|') + e_machine="$4" + + if [ ! -f "$infile" ] + then + echo "Missing file $infile" + exit 1 + fi + sorted_table=$(mktemp /tmp/syscalltbl.XXXXXX) + grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | sort -n > "$sorted_table" + + echo "static const char *const syscall_num_to_name_${e_machine}[] = {" >> "$outfile" + # the params are: nr abi name entry compat + # use _ for intentionally unused variables according to SC2034 + while read -r nr _ name _ _; do + echo " [$nr] = \"$name\"," >> "$outfile" + done < "$sorted_table" + echo "};" >> "$outfile" + + echo "static const uint16_t syscall_sorted_names_${e_machine}[] = {" >> "$outfile" + + # When sorting by name, add a suffix of 0s upto 20 characters so that + # system calls that differ with a numerical suffix don't sort before + # those without. This default behavior of sort differs from that of + # strcmp used at runtime. Use sed to strip the trailing 0s suffix + # afterwards. + grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | awk '{printf $3; for (i = length($3); i < 20; i++) { printf "0"; }; print " " $1}'| sort | sed 's/\([a-zA-Z1-9]\+\)0\+ \([0-9]\+\)/\1 \2/' > "$sorted_table" + while read -r name nr; do + echo " $nr, /* $name */" >> "$outfile" + done < "$sorted_table" + echo "};" >> "$outfile" + + rm -f "$sorted_table" +} + +rm -f "$outfile" +cat >> "$outfile" <<EOF +#include <elf.h> +#include <stdint.h> +#include <asm/bitsperlong.h> +#include <linux/kernel.h> + +struct syscalltbl { + const char *const *num_to_name; + const uint16_t *sorted_names; + uint16_t e_machine; + uint16_t num_to_name_len; + uint16_t sorted_names_len; +}; + +#if defined(ALL_SYSCALLTBL) || defined(__alpha__) +EOF +build_tables "$tools_dir/perf/arch/alpha/entry/syscalls/syscall.tbl" "$outfile" common,64 EM_ALPHA +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__alpha__) + +#if defined(ALL_SYSCALLTBL) || defined(__arm__) || defined(__aarch64__) +EOF +build_tables "$tools_dir/perf/arch/arm/entry/syscalls/syscall.tbl" "$outfile" common,32,oabi EM_ARM +build_tables "$tools_dir/perf/arch/arm64/entry/syscalls/syscall_64.tbl" "$outfile" common,64,renameat,rlimit,memfd_secret EM_AARCH64 +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__arm__) || defined(__aarch64__) + +#if defined(ALL_SYSCALLTBL) || defined(__csky__) +EOF +build_tables "$tools_dir/scripts/syscall.tbl" "$outfile" common,32,csky,time32,stat64,rlimit EM_CSKY +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__csky__) + +#if defined(ALL_SYSCALLTBL) || defined(__mips__) +EOF +build_tables "$tools_dir/perf/arch/mips/entry/syscalls/syscall_n64.tbl" "$outfile" common,64,n64 EM_MIPS +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__mips__) + +#if defined(ALL_SYSCALLTBL) || defined(__hppa__) +#if __BITS_PER_LONG != 64 +EOF +build_tables "$tools_dir/perf/arch/parisc/entry/syscalls/syscall.tbl" "$outfile" common,32 EM_PARISC +echo "#else" >> "$outfile" +build_tables "$tools_dir/perf/arch/parisc/entry/syscalls/syscall.tbl" "$outfile" common,64 EM_PARISC +cat >> "$outfile" <<EOF +#endif //__BITS_PER_LONG != 64 +#endif // defined(ALL_SYSCALLTBL) || defined(__hppa__) + +#if defined(ALL_SYSCALLTBL) || defined(__powerpc__) || defined(__powerpc64__) +EOF +build_tables "$tools_dir/perf/arch/powerpc/entry/syscalls/syscall.tbl" "$outfile" common,32,nospu EM_PPC +build_tables "$tools_dir/perf/arch/powerpc/entry/syscalls/syscall.tbl" "$outfile" common,64,nospu EM_PPC64 +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__powerpc__) || defined(__powerpc64__) + +#if defined(ALL_SYSCALLTBL) || defined(__riscv) +#if __BITS_PER_LONG != 64 +EOF +build_tables "$tools_dir/scripts/syscall.tbl" "$outfile" common,32,riscv,memfd_secret EM_RISCV +echo "#else" >> "$outfile" +build_tables "$tools_dir/scripts/syscall.tbl" "$outfile" common,64,riscv,rlimit,memfd_secret EM_RISCV +cat >> "$outfile" <<EOF +#endif //__BITS_PER_LONG != 64 +#endif // defined(ALL_SYSCALLTBL) || defined(__riscv) +#if defined(ALL_SYSCALLTBL) || defined(__s390x__) +EOF +build_tables "$tools_dir/perf/arch/s390/entry/syscalls/syscall.tbl" "$outfile" common,64,renameat,rlimit,memfd_secret EM_S390 +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__s390x__) + +#if defined(ALL_SYSCALLTBL) || defined(__sh__) +EOF +build_tables "$tools_dir/perf/arch/sh/entry/syscalls/syscall.tbl" "$outfile" common,32 EM_SH +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__sh__) + +#if defined(ALL_SYSCALLTBL) || defined(__sparc64__) || defined(__sparc__) +#if __BITS_PER_LONG != 64 +EOF +build_tables "$tools_dir/perf/arch/sparc/entry/syscalls/syscall.tbl" "$outfile" common,32 EM_SPARC +echo "#else" >> "$outfile" +build_tables "$tools_dir/perf/arch/sparc/entry/syscalls/syscall.tbl" "$outfile" common,64 EM_SPARC +cat >> "$outfile" <<EOF +#endif //__BITS_PER_LONG != 64 +#endif // defined(ALL_SYSCALLTBL) || defined(__sparc64__) || defined(__sparc__) + +#if defined(ALL_SYSCALLTBL) || defined(__i386__) || defined(__x86_64__) +EOF +build_tables "$tools_dir/perf/arch/x86/entry/syscalls/syscall_32.tbl" "$outfile" common,32,i386 EM_386 +build_tables "$tools_dir/perf/arch/x86/entry/syscalls/syscall_64.tbl" "$outfile" common,64 EM_X86_64 +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__i386__) || defined(__x86_64__) + +#if defined(ALL_SYSCALLTBL) || defined(__xtensa__) +EOF +build_tables "$tools_dir/perf/arch/xtensa/entry/syscalls/syscall.tbl" "$outfile" common,32 EM_XTENSA +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__xtensa__) + +#if __BITS_PER_LONG != 64 +EOF +build_tables "$tools_dir/scripts/syscall.tbl" "$outfile" common,32 EM_NONE +echo "#else" >> "$outfile" +build_tables "$tools_dir/scripts/syscall.tbl" "$outfile" common,64 EM_NONE +echo "#endif //__BITS_PER_LONG != 64" >> "$outfile" + +build_outer_table() { + e_machine=$1 + outfile="$2" + cat >> "$outfile" <<EOF + { + .num_to_name = syscall_num_to_name_$e_machine, + .sorted_names = syscall_sorted_names_$e_machine, + .e_machine = $e_machine, + .num_to_name_len = ARRAY_SIZE(syscall_num_to_name_$e_machine), + .sorted_names_len = ARRAY_SIZE(syscall_sorted_names_$e_machine), + }, +EOF +} + +cat >> "$outfile" <<EOF +static const struct syscalltbl syscalltbls[] = { +#if defined(ALL_SYSCALLTBL) || defined(__alpha__) +EOF +build_outer_table EM_ALPHA "$outfile" +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__alpha__) + +#if defined(ALL_SYSCALLTBL) || defined(__arm__) || defined(__aarch64__) +EOF +build_outer_table EM_ARM "$outfile" +build_outer_table EM_AARCH64 "$outfile" +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__arm__) || defined(__aarch64__) + +#if defined(ALL_SYSCALLTBL) || defined(__csky__) +EOF +build_outer_table EM_CSKY "$outfile" +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__csky__) + +#if defined(ALL_SYSCALLTBL) || defined(__mips__) +EOF +build_outer_table EM_MIPS "$outfile" +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__mips__) + +#if defined(ALL_SYSCALLTBL) || defined(__hppa__) +EOF +build_outer_table EM_PARISC "$outfile" +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__hppa__) + +#if defined(ALL_SYSCALLTBL) || defined(__powerpc__) || defined(__powerpc64__) +EOF +build_outer_table EM_PPC "$outfile" +build_outer_table EM_PPC64 "$outfile" +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__powerpc__) || defined(__powerpc64__) + +#if defined(ALL_SYSCALLTBL) || defined(__riscv) +EOF +build_outer_table EM_RISCV "$outfile" +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__riscv) + +#if defined(ALL_SYSCALLTBL) || defined(__s390x__) +EOF +build_outer_table EM_S390 "$outfile" +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__s390x__) + +#if defined(ALL_SYSCALLTBL) || defined(__sh__) +EOF +build_outer_table EM_SH "$outfile" +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__sh__) + +#if defined(ALL_SYSCALLTBL) || defined(__sparc64__) || defined(__sparc__) +EOF +build_outer_table EM_SPARC "$outfile" +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__sparc64__) || defined(__sparc__) + +#if defined(ALL_SYSCALLTBL) || defined(__i386__) || defined(__x86_64__) +EOF +build_outer_table EM_386 "$outfile" +build_outer_table EM_X86_64 "$outfile" +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__i386__) || defined(__x86_64__) + +#if defined(ALL_SYSCALLTBL) || defined(__xtensa__) +EOF +build_outer_table EM_XTENSA "$outfile" +cat >> "$outfile" <<EOF +#endif // defined(ALL_SYSCALLTBL) || defined(__xtensa__) +EOF +build_outer_table EM_NONE "$outfile" +cat >> "$outfile" <<EOF +}; +EOF |