lkml.org 
[lkml]   [2016]   [Apr]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 17/19] perf tools: Build syscall table .c header from kernel's syscall_64.tbl
    Date
    From: Arnaldo Carvalho de Melo <acme@redhat.com>

    We used libaudit to map ids to syscall names and vice-versa, but that
    imposes a delay in supporting new syscalls, having to wait for libaudit
    to get those new syscalls on its tables.

    To remove that delay, for x86_64 initially, grab a copy of
    arch/x86/entry/syscalls/syscall_64.tbl and use it to generate those
    tables.

    Syscalls currently not available in audit-libs:

    # trace -e copy_file_range,membarrier,mlock2,pread64,pwrite64,timerfd_create,userfaultfd
    Error: Invalid syscall copy_file_range, membarrier, mlock2, pread64, pwrite64, timerfd_create, userfaultfd
    Hint: try 'perf list syscalls:sys_enter_*'
    Hint: and: 'man syscalls'
    #

    With this patch:

    # trace -e copy_file_range,membarrier,mlock2,pread64,pwrite64,timerfd_create,userfaultfd
    8505.733 ( 0.010 ms): gnome-shell/2519 timerfd_create(flags: 524288) = 36
    8506.688 ( 0.005 ms): gnome-shell/2519 timerfd_create(flags: 524288) = 40
    30023.097 ( 0.025 ms): qemu-system-x8/24629 pwrite64(fd: 18, buf: 0x7f63ae382000, count: 4096, pos: 529592320) = 4096
    31268.712 ( 0.028 ms): qemu-system-x8/24629 pwrite64(fd: 18, buf: 0x7f63afd8b000, count: 4096, pos: 2314133504) = 4096
    31268.854 ( 0.016 ms): qemu-system-x8/24629 pwrite64(fd: 18, buf: 0x7f63afda2000, count: 4096, pos: 2314137600) = 4096

    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/n/tip-5n4sx1wp0ig75dwcghf9m6zs@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/Makefile.perf | 11 +-
    tools/perf/arch/x86/Makefile | 23 ++
    tools/perf/arch/x86/entry/syscalls/syscall_64.tbl | 374 ++++++++++++++++++++++
    tools/perf/arch/x86/entry/syscalls/syscalltbl.sh | 39 +++
    tools/perf/config/Makefile | 2 +-
    tools/perf/util/Build | 4 +
    tools/perf/util/syscalltbl.c | 6 +
    7 files changed, 455 insertions(+), 4 deletions(-)
    create mode 100644 tools/perf/arch/x86/entry/syscalls/syscall_64.tbl
    create mode 100755 tools/perf/arch/x86/entry/syscalls/syscalltbl.sh

    diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf
    index 58aed81a21ea..1469aeaf5169 100644
    --- a/tools/perf/Makefile.perf
    +++ b/tools/perf/Makefile.perf
    @@ -183,6 +183,11 @@ endif
    include config/Makefile
    endif

    +ifeq ($(config),0)
    +include $(srctree)/tools/scripts/Makefile.arch
    +-include arch/$(ARCH)/Makefile
    +endif
    +
    # The FEATURE_DUMP_EXPORT holds location of the actual
    # FEATURE_DUMP file to be used to bypass feature detection
    # (for bpf or any other subproject)
    @@ -388,7 +393,7 @@ endif
    __build-dir = $(subst $(OUTPUT),,$(dir $@))
    build-dir = $(if $(__build-dir),$(__build-dir),.)

    -prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h fixdep
    +prepare: $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h fixdep archheaders

    $(OUTPUT)%.o: %.c prepare FORCE
    $(Q)$(MAKE) -f $(srctree)/tools/build/Makefile.build dir=$(build-dir) $@
    @@ -623,7 +628,7 @@ config-clean:
    $(call QUIET_CLEAN, config)
    $(Q)$(MAKE) -C $(srctree)/tools/build/feature/ $(if $(OUTPUT),OUTPUT=$(OUTPUT)feature/,) clean >/dev/null

    -clean: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clean config-clean
    +clean:: $(LIBTRACEEVENT)-clean $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clean config-clean
    $(call QUIET_CLEAN, core-objs) $(RM) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf-with-kcore $(LANG_BINDINGS)
    $(Q)find $(if $(OUTPUT),$(OUTPUT),.) -name '*.o' -delete -o -name '\.*.cmd' -delete -o -name '\.*.d' -delete
    $(Q)$(RM) $(OUTPUT).config-detected
    @@ -660,5 +665,5 @@ FORCE:
    .PHONY: all install clean config-clean strip install-gtk
    .PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
    .PHONY: $(GIT-HEAD-PHONY) TAGS tags cscope FORCE prepare
    -.PHONY: libtraceevent_plugins
    +.PHONY: libtraceevent_plugins archheaders

    diff --git a/tools/perf/arch/x86/Makefile b/tools/perf/arch/x86/Makefile
    index 269af2143735..a33729173b13 100644
    --- a/tools/perf/arch/x86/Makefile
    +++ b/tools/perf/arch/x86/Makefile
    @@ -4,3 +4,26 @@ endif
    HAVE_KVM_STAT_SUPPORT := 1
    PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET := 1
    PERF_HAVE_JITDUMP := 1
    +
    +###
    +# Syscall table generation
    +#
    +
    +out := $(OUTPUT)arch/x86/include/generated/asm
    +header := $(out)/syscalls_64.c
    +sys := $(srctree)/tools/perf/arch/x86/entry/syscalls
    +systbl := $(sys)/syscalltbl.sh
    +
    +# Create output directory if not already present
    +_dummy := $(shell [ -d '$(out)' ] || mkdir -p '$(out)')
    +
    +$(header): $(sys)/syscall_64.tbl $(systbl)
    + @(test -d ../../kernel -a -d ../../tools -a -d ../perf && ( \
    + (diff -B arch/x86/entry/syscalls/syscall_64.tbl ../../arch/x86/entry/syscalls/syscall_64.tbl >/dev/null) \
    + || echo "Warning: x86_64's syscall_64.tbl differs from kernel" >&2 )) || true
    + $(Q)$(SHELL) '$(systbl)' $(sys)/syscall_64.tbl 'x86_64' > $@
    +
    +clean::
    + rm -f $(header)
    +
    +archheaders: $(header)
    diff --git a/tools/perf/arch/x86/entry/syscalls/syscall_64.tbl b/tools/perf/arch/x86/entry/syscalls/syscall_64.tbl
    new file mode 100644
    index 000000000000..2e5b565adacc
    --- /dev/null
    +++ b/tools/perf/arch/x86/entry/syscalls/syscall_64.tbl
    @@ -0,0 +1,374 @@
    +#
    +# 64-bit system call numbers and entry vectors
    +#
    +# The format is:
    +# <number> <abi> <name> <entry point>
    +#
    +# The abi is "common", "64" or "x32" for this file.
    +#
    +0 common read sys_read
    +1 common write sys_write
    +2 common open sys_open
    +3 common close sys_close
    +4 common stat sys_newstat
    +5 common fstat sys_newfstat
    +6 common lstat sys_newlstat
    +7 common poll sys_poll
    +8 common lseek sys_lseek
    +9 common mmap sys_mmap
    +10 common mprotect sys_mprotect
    +11 common munmap sys_munmap
    +12 common brk sys_brk
    +13 64 rt_sigaction sys_rt_sigaction
    +14 common rt_sigprocmask sys_rt_sigprocmask
    +15 64 rt_sigreturn sys_rt_sigreturn/ptregs
    +16 64 ioctl sys_ioctl
    +17 common pread64 sys_pread64
    +18 common pwrite64 sys_pwrite64
    +19 64 readv sys_readv
    +20 64 writev sys_writev
    +21 common access sys_access
    +22 common pipe sys_pipe
    +23 common select sys_select
    +24 common sched_yield sys_sched_yield
    +25 common mremap sys_mremap
    +26 common msync sys_msync
    +27 common mincore sys_mincore
    +28 common madvise sys_madvise
    +29 common shmget sys_shmget
    +30 common shmat sys_shmat
    +31 common shmctl sys_shmctl
    +32 common dup sys_dup
    +33 common dup2 sys_dup2
    +34 common pause sys_pause
    +35 common nanosleep sys_nanosleep
    +36 common getitimer sys_getitimer
    +37 common alarm sys_alarm
    +38 common setitimer sys_setitimer
    +39 common getpid sys_getpid
    +40 common sendfile sys_sendfile64
    +41 common socket sys_socket
    +42 common connect sys_connect
    +43 common accept sys_accept
    +44 common sendto sys_sendto
    +45 64 recvfrom sys_recvfrom
    +46 64 sendmsg sys_sendmsg
    +47 64 recvmsg sys_recvmsg
    +48 common shutdown sys_shutdown
    +49 common bind sys_bind
    +50 common listen sys_listen
    +51 common getsockname sys_getsockname
    +52 common getpeername sys_getpeername
    +53 common socketpair sys_socketpair
    +54 64 setsockopt sys_setsockopt
    +55 64 getsockopt sys_getsockopt
    +56 common clone sys_clone/ptregs
    +57 common fork sys_fork/ptregs
    +58 common vfork sys_vfork/ptregs
    +59 64 execve sys_execve/ptregs
    +60 common exit sys_exit
    +61 common wait4 sys_wait4
    +62 common kill sys_kill
    +63 common uname sys_newuname
    +64 common semget sys_semget
    +65 common semop sys_semop
    +66 common semctl sys_semctl
    +67 common shmdt sys_shmdt
    +68 common msgget sys_msgget
    +69 common msgsnd sys_msgsnd
    +70 common msgrcv sys_msgrcv
    +71 common msgctl sys_msgctl
    +72 common fcntl sys_fcntl
    +73 common flock sys_flock
    +74 common fsync sys_fsync
    +75 common fdatasync sys_fdatasync
    +76 common truncate sys_truncate
    +77 common ftruncate sys_ftruncate
    +78 common getdents sys_getdents
    +79 common getcwd sys_getcwd
    +80 common chdir sys_chdir
    +81 common fchdir sys_fchdir
    +82 common rename sys_rename
    +83 common mkdir sys_mkdir
    +84 common rmdir sys_rmdir
    +85 common creat sys_creat
    +86 common link sys_link
    +87 common unlink sys_unlink
    +88 common symlink sys_symlink
    +89 common readlink sys_readlink
    +90 common chmod sys_chmod
    +91 common fchmod sys_fchmod
    +92 common chown sys_chown
    +93 common fchown sys_fchown
    +94 common lchown sys_lchown
    +95 common umask sys_umask
    +96 common gettimeofday sys_gettimeofday
    +97 common getrlimit sys_getrlimit
    +98 common getrusage sys_getrusage
    +99 common sysinfo sys_sysinfo
    +100 common times sys_times
    +101 64 ptrace sys_ptrace
    +102 common getuid sys_getuid
    +103 common syslog sys_syslog
    +104 common getgid sys_getgid
    +105 common setuid sys_setuid
    +106 common setgid sys_setgid
    +107 common geteuid sys_geteuid
    +108 common getegid sys_getegid
    +109 common setpgid sys_setpgid
    +110 common getppid sys_getppid
    +111 common getpgrp sys_getpgrp
    +112 common setsid sys_setsid
    +113 common setreuid sys_setreuid
    +114 common setregid sys_setregid
    +115 common getgroups sys_getgroups
    +116 common setgroups sys_setgroups
    +117 common setresuid sys_setresuid
    +118 common getresuid sys_getresuid
    +119 common setresgid sys_setresgid
    +120 common getresgid sys_getresgid
    +121 common getpgid sys_getpgid
    +122 common setfsuid sys_setfsuid
    +123 common setfsgid sys_setfsgid
    +124 common getsid sys_getsid
    +125 common capget sys_capget
    +126 common capset sys_capset
    +127 64 rt_sigpending sys_rt_sigpending
    +128 64 rt_sigtimedwait sys_rt_sigtimedwait
    +129 64 rt_sigqueueinfo sys_rt_sigqueueinfo
    +130 common rt_sigsuspend sys_rt_sigsuspend
    +131 64 sigaltstack sys_sigaltstack
    +132 common utime sys_utime
    +133 common mknod sys_mknod
    +134 64 uselib
    +135 common personality sys_personality
    +136 common ustat sys_ustat
    +137 common statfs sys_statfs
    +138 common fstatfs sys_fstatfs
    +139 common sysfs sys_sysfs
    +140 common getpriority sys_getpriority
    +141 common setpriority sys_setpriority
    +142 common sched_setparam sys_sched_setparam
    +143 common sched_getparam sys_sched_getparam
    +144 common sched_setscheduler sys_sched_setscheduler
    +145 common sched_getscheduler sys_sched_getscheduler
    +146 common sched_get_priority_max sys_sched_get_priority_max
    +147 common sched_get_priority_min sys_sched_get_priority_min
    +148 common sched_rr_get_interval sys_sched_rr_get_interval
    +149 common mlock sys_mlock
    +150 common munlock sys_munlock
    +151 common mlockall sys_mlockall
    +152 common munlockall sys_munlockall
    +153 common vhangup sys_vhangup
    +154 common modify_ldt sys_modify_ldt
    +155 common pivot_root sys_pivot_root
    +156 64 _sysctl sys_sysctl
    +157 common prctl sys_prctl
    +158 common arch_prctl sys_arch_prctl
    +159 common adjtimex sys_adjtimex
    +160 common setrlimit sys_setrlimit
    +161 common chroot sys_chroot
    +162 common sync sys_sync
    +163 common acct sys_acct
    +164 common settimeofday sys_settimeofday
    +165 common mount sys_mount
    +166 common umount2 sys_umount
    +167 common swapon sys_swapon
    +168 common swapoff sys_swapoff
    +169 common reboot sys_reboot
    +170 common sethostname sys_sethostname
    +171 common setdomainname sys_setdomainname
    +172 common iopl sys_iopl/ptregs
    +173 common ioperm sys_ioperm
    +174 64 create_module
    +175 common init_module sys_init_module
    +176 common delete_module sys_delete_module
    +177 64 get_kernel_syms
    +178 64 query_module
    +179 common quotactl sys_quotactl
    +180 64 nfsservctl
    +181 common getpmsg
    +182 common putpmsg
    +183 common afs_syscall
    +184 common tuxcall
    +185 common security
    +186 common gettid sys_gettid
    +187 common readahead sys_readahead
    +188 common setxattr sys_setxattr
    +189 common lsetxattr sys_lsetxattr
    +190 common fsetxattr sys_fsetxattr
    +191 common getxattr sys_getxattr
    +192 common lgetxattr sys_lgetxattr
    +193 common fgetxattr sys_fgetxattr
    +194 common listxattr sys_listxattr
    +195 common llistxattr sys_llistxattr
    +196 common flistxattr sys_flistxattr
    +197 common removexattr sys_removexattr
    +198 common lremovexattr sys_lremovexattr
    +199 common fremovexattr sys_fremovexattr
    +200 common tkill sys_tkill
    +201 common time sys_time
    +202 common futex sys_futex
    +203 common sched_setaffinity sys_sched_setaffinity
    +204 common sched_getaffinity sys_sched_getaffinity
    +205 64 set_thread_area
    +206 64 io_setup sys_io_setup
    +207 common io_destroy sys_io_destroy
    +208 common io_getevents sys_io_getevents
    +209 64 io_submit sys_io_submit
    +210 common io_cancel sys_io_cancel
    +211 64 get_thread_area
    +212 common lookup_dcookie sys_lookup_dcookie
    +213 common epoll_create sys_epoll_create
    +214 64 epoll_ctl_old
    +215 64 epoll_wait_old
    +216 common remap_file_pages sys_remap_file_pages
    +217 common getdents64 sys_getdents64
    +218 common set_tid_address sys_set_tid_address
    +219 common restart_syscall sys_restart_syscall
    +220 common semtimedop sys_semtimedop
    +221 common fadvise64 sys_fadvise64
    +222 64 timer_create sys_timer_create
    +223 common timer_settime sys_timer_settime
    +224 common timer_gettime sys_timer_gettime
    +225 common timer_getoverrun sys_timer_getoverrun
    +226 common timer_delete sys_timer_delete
    +227 common clock_settime sys_clock_settime
    +228 common clock_gettime sys_clock_gettime
    +229 common clock_getres sys_clock_getres
    +230 common clock_nanosleep sys_clock_nanosleep
    +231 common exit_group sys_exit_group
    +232 common epoll_wait sys_epoll_wait
    +233 common epoll_ctl sys_epoll_ctl
    +234 common tgkill sys_tgkill
    +235 common utimes sys_utimes
    +236 64 vserver
    +237 common mbind sys_mbind
    +238 common set_mempolicy sys_set_mempolicy
    +239 common get_mempolicy sys_get_mempolicy
    +240 common mq_open sys_mq_open
    +241 common mq_unlink sys_mq_unlink
    +242 common mq_timedsend sys_mq_timedsend
    +243 common mq_timedreceive sys_mq_timedreceive
    +244 64 mq_notify sys_mq_notify
    +245 common mq_getsetattr sys_mq_getsetattr
    +246 64 kexec_load sys_kexec_load
    +247 64 waitid sys_waitid
    +248 common add_key sys_add_key
    +249 common request_key sys_request_key
    +250 common keyctl sys_keyctl
    +251 common ioprio_set sys_ioprio_set
    +252 common ioprio_get sys_ioprio_get
    +253 common inotify_init sys_inotify_init
    +254 common inotify_add_watch sys_inotify_add_watch
    +255 common inotify_rm_watch sys_inotify_rm_watch
    +256 common migrate_pages sys_migrate_pages
    +257 common openat sys_openat
    +258 common mkdirat sys_mkdirat
    +259 common mknodat sys_mknodat
    +260 common fchownat sys_fchownat
    +261 common futimesat sys_futimesat
    +262 common newfstatat sys_newfstatat
    +263 common unlinkat sys_unlinkat
    +264 common renameat sys_renameat
    +265 common linkat sys_linkat
    +266 common symlinkat sys_symlinkat
    +267 common readlinkat sys_readlinkat
    +268 common fchmodat sys_fchmodat
    +269 common faccessat sys_faccessat
    +270 common pselect6 sys_pselect6
    +271 common ppoll sys_ppoll
    +272 common unshare sys_unshare
    +273 64 set_robust_list sys_set_robust_list
    +274 64 get_robust_list sys_get_robust_list
    +275 common splice sys_splice
    +276 common tee sys_tee
    +277 common sync_file_range sys_sync_file_range
    +278 64 vmsplice sys_vmsplice
    +279 64 move_pages sys_move_pages
    +280 common utimensat sys_utimensat
    +281 common epoll_pwait sys_epoll_pwait
    +282 common signalfd sys_signalfd
    +283 common timerfd_create sys_timerfd_create
    +284 common eventfd sys_eventfd
    +285 common fallocate sys_fallocate
    +286 common timerfd_settime sys_timerfd_settime
    +287 common timerfd_gettime sys_timerfd_gettime
    +288 common accept4 sys_accept4
    +289 common signalfd4 sys_signalfd4
    +290 common eventfd2 sys_eventfd2
    +291 common epoll_create1 sys_epoll_create1
    +292 common dup3 sys_dup3
    +293 common pipe2 sys_pipe2
    +294 common inotify_init1 sys_inotify_init1
    +295 64 preadv sys_preadv
    +296 64 pwritev sys_pwritev
    +297 64 rt_tgsigqueueinfo sys_rt_tgsigqueueinfo
    +298 common perf_event_open sys_perf_event_open
    +299 64 recvmmsg sys_recvmmsg
    +300 common fanotify_init sys_fanotify_init
    +301 common fanotify_mark sys_fanotify_mark
    +302 common prlimit64 sys_prlimit64
    +303 common name_to_handle_at sys_name_to_handle_at
    +304 common open_by_handle_at sys_open_by_handle_at
    +305 common clock_adjtime sys_clock_adjtime
    +306 common syncfs sys_syncfs
    +307 64 sendmmsg sys_sendmmsg
    +308 common setns sys_setns
    +309 common getcpu sys_getcpu
    +310 64 process_vm_readv sys_process_vm_readv
    +311 64 process_vm_writev sys_process_vm_writev
    +312 common kcmp sys_kcmp
    +313 common finit_module sys_finit_module
    +314 common sched_setattr sys_sched_setattr
    +315 common sched_getattr sys_sched_getattr
    +316 common renameat2 sys_renameat2
    +317 common seccomp sys_seccomp
    +318 common getrandom sys_getrandom
    +319 common memfd_create sys_memfd_create
    +320 common kexec_file_load sys_kexec_file_load
    +321 common bpf sys_bpf
    +322 64 execveat sys_execveat/ptregs
    +323 common userfaultfd sys_userfaultfd
    +324 common membarrier sys_membarrier
    +325 common mlock2 sys_mlock2
    +326 common copy_file_range sys_copy_file_range
    +
    +#
    +# x32-specific system call numbers start at 512 to avoid cache impact
    +# for native 64-bit operation.
    +#
    +512 x32 rt_sigaction compat_sys_rt_sigaction
    +513 x32 rt_sigreturn sys32_x32_rt_sigreturn
    +514 x32 ioctl compat_sys_ioctl
    +515 x32 readv compat_sys_readv
    +516 x32 writev compat_sys_writev
    +517 x32 recvfrom compat_sys_recvfrom
    +518 x32 sendmsg compat_sys_sendmsg
    +519 x32 recvmsg compat_sys_recvmsg
    +520 x32 execve compat_sys_execve/ptregs
    +521 x32 ptrace compat_sys_ptrace
    +522 x32 rt_sigpending compat_sys_rt_sigpending
    +523 x32 rt_sigtimedwait compat_sys_rt_sigtimedwait
    +524 x32 rt_sigqueueinfo compat_sys_rt_sigqueueinfo
    +525 x32 sigaltstack compat_sys_sigaltstack
    +526 x32 timer_create compat_sys_timer_create
    +527 x32 mq_notify compat_sys_mq_notify
    +528 x32 kexec_load compat_sys_kexec_load
    +529 x32 waitid compat_sys_waitid
    +530 x32 set_robust_list compat_sys_set_robust_list
    +531 x32 get_robust_list compat_sys_get_robust_list
    +532 x32 vmsplice compat_sys_vmsplice
    +533 x32 move_pages compat_sys_move_pages
    +534 x32 preadv compat_sys_preadv64
    +535 x32 pwritev compat_sys_pwritev64
    +536 x32 rt_tgsigqueueinfo compat_sys_rt_tgsigqueueinfo
    +537 x32 recvmmsg compat_sys_recvmmsg
    +538 x32 sendmmsg compat_sys_sendmmsg
    +539 x32 process_vm_readv compat_sys_process_vm_readv
    +540 x32 process_vm_writev compat_sys_process_vm_writev
    +541 x32 setsockopt compat_sys_setsockopt
    +542 x32 getsockopt compat_sys_getsockopt
    +543 x32 io_setup compat_sys_io_setup
    +544 x32 io_submit compat_sys_io_submit
    +545 x32 execveat compat_sys_execveat/ptregs
    diff --git a/tools/perf/arch/x86/entry/syscalls/syscalltbl.sh b/tools/perf/arch/x86/entry/syscalls/syscalltbl.sh
    new file mode 100755
    index 000000000000..49a18b9ad9cf
    --- /dev/null
    +++ b/tools/perf/arch/x86/entry/syscalls/syscalltbl.sh
    @@ -0,0 +1,39 @@
    +#!/bin/sh
    +
    +in="$1"
    +arch="$2"
    +
    +syscall_macro() {
    + nr="$1"
    + name="$2"
    +
    + echo " [$nr] = \"$name\","
    +}
    +
    +emit() {
    + nr="$1"
    + entry="$2"
    +
    + syscall_macro "$nr" "$entry"
    +}
    +
    +echo "static const char *syscalltbl_${arch}[] = {"
    +
    +sorted_table=$(mktemp /tmp/syscalltbl.XXXXXX)
    +grep '^[0-9]' "$in" | sort -n > $sorted_table
    +
    +max_nr=0
    +while read nr abi name entry compat; do
    + if [ $nr -ge 512 ] ; then # discard compat sycalls
    + break
    + fi
    +
    + emit "$nr" "$name"
    + max_nr=$nr
    +done < $sorted_table
    +
    +rm -f $sorted_table
    +
    +echo "};"
    +
    +echo "#define SYSCALLTBL_${arch}_MAX_ID ${max_nr}"
    diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
    index d1e2b856ef0f..1e46277286c2 100644
    --- a/tools/perf/config/Makefile
    +++ b/tools/perf/config/Makefile
    @@ -27,7 +27,7 @@ NO_PERF_REGS := 1
    ifeq ($(ARCH),x86)
    $(call detected,CONFIG_X86)
    ifeq (${IS_64_BIT}, 1)
    - CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT
    + CFLAGS += -DHAVE_ARCH_X86_64_SUPPORT -DHAVE_SYSCALL_TABLE -I$(OUTPUT)arch/x86/include/generated
    ARCH_INCLUDE = ../../arch/x86/lib/memcpy_64.S ../../arch/x86/lib/memset_64.S
    LIBUNWIND_LIBS = -lunwind -lunwind-x86_64
    $(call detected,CONFIG_X86_64)
    diff --git a/tools/perf/util/Build b/tools/perf/util/Build
    index 3443646d8da3..ea4ac03c1ec8 100644
    --- a/tools/perf/util/Build
    +++ b/tools/perf/util/Build
    @@ -148,6 +148,10 @@ CFLAGS_libstring.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ET
    CFLAGS_hweight.o += -Wno-unused-parameter -DETC_PERFCONFIG="BUILD_STR($(ETC_PERFCONFIG_SQ))"
    CFLAGS_parse-events.o += -Wno-redundant-decls

    +$(OUTPUT)util/syscalltbl.o: util/syscalltbl.c arch/x86/entry/syscalls/syscall_64.tbl $(OUTPUT)arch/x86/include/generated/asm/syscalls_64.c FORCE
    + $(call rule_mkdir)
    + $(call if_changed_dep,cc_o_c)
    +
    $(OUTPUT)util/kallsyms.o: ../lib/symbol/kallsyms.c FORCE
    $(call rule_mkdir)
    $(call if_changed_dep,cc_o_c)
    diff --git a/tools/perf/util/syscalltbl.c b/tools/perf/util/syscalltbl.c
    index eb74a97b1f11..bbb4c1957578 100644
    --- a/tools/perf/util/syscalltbl.c
    +++ b/tools/perf/util/syscalltbl.c
    @@ -21,6 +21,12 @@
    #include <string.h>
    #include "util.h"

    +#if defined(__x86_64__)
    +#include <asm/syscalls_64.c>
    +const int syscalltbl_native_max_id = SYSCALLTBL_x86_64_MAX_ID;
    +static const char **syscalltbl_native = syscalltbl_x86_64;
    +#endif
    +
    struct syscall {
    int id;
    const char *name;
    --
    2.5.5
    \
     
     \ /
      Last update: 2016-04-07 23:41    [W:4.209 / U:1.464 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site