]> granicus.if.org Git - strace/commitdiff
Add unique syscall entry numbers (SENs)
authorElvira Khabirova <lineprinter0@gmail.com>
Fri, 10 Jul 2015 19:24:54 +0000 (22:24 +0300)
committerDmitry V. Levin <ldv@altlinux.org>
Sun, 12 Jul 2015 22:31:49 +0000 (22:31 +0000)
* Makefile.am (BUILT_SOURCES, CLEANFILES): Add sen.h.
(syscallent_names, syscallent_patterns, syscallent_files): New variables.
(sen.h): New rule.
* defs.h (struct sysent): Add sen field.
* generate_sen.sh: New file.
* linux/syscall.h: Include "sen.h".
* syscall.c (SEN_NAME): New temporary macro.
(SEN): Use it to prepend syscall entry number.

Makefile.am
defs.h
generate_sen.sh [new file with mode: 0755]
linux/syscall.h
syscall.c

index 4790f3257e9f3c027317fe1f3cc9b7b883d43779..451a7dab29e78cac1cec8cfd8cdbc2e648b1363c 100644 (file)
@@ -163,6 +163,7 @@ EXTRA_DIST =                                \
        debian/strace64.manpages        \
        debian/watch                    \
        errnoent.sh                     \
+       generate_sen.sh                 \
        ioctlsort.c                     \
        linux/32/ioctls_inc.h           \
        linux/32/ioctls_inc_align32.h   \
@@ -567,7 +568,7 @@ EXTRA_DIST =                                \
 srpm: dist-xz
        rpmbuild --define '%_srcrpmdir .' -ts $(distdir).tar.xz
 
-BUILT_SOURCES = .version sys_func.h
+BUILT_SOURCES = .version sys_func.h sen.h
 
 $(srcdir)/.version:
        $(AM_V_GEN)echo $(VERSION) > $@-t && mv $@-t $@
@@ -579,6 +580,15 @@ sys_func.h: $(patsubst %,$(srcdir)/%,$(strace_SOURCES_c))
                sed -n 's/^SYS_FUNC(.*/extern &;/p' $$f; \
        done | sort -u > $@
 
+syscallent_names = subcall.h syscallent.h syscallent1.h \
+                  syscallent-n32.h syscallent-n64.h syscallent-o32.h
+syscallent_patterns = $(patsubst %,\%/%,$(syscallent_names))
+syscallent_files = $(filter $(syscallent_patterns),$(EXTRA_DIST))
+
+sen.h: $(patsubst %,$(srcdir)/%,$(syscallent_files))
+       for f in $^; do cat -- $$f; done | \
+               $(srcdir)/generate_sen.sh > $@
+
 dist-hook:
        $(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version
 
@@ -605,7 +615,7 @@ ioctlsort_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_FOR_BUILD)
 ioctls_inc_h = $(wildcard $(srcdir)/$(OS)/$(ARCH)/ioctls_inc*.h)
 ioctlent_h = $(patsubst $(srcdir)/$(OS)/$(ARCH)/ioctls_inc%,ioctlent%,$(ioctls_inc_h))
 BUILT_SOURCES += $(ioctlent_h)
-CLEANFILES = sys_func.h $(ioctlent_h)
+CLEANFILES = sys_func.h sen.h $(ioctlent_h)
 
 ioctlent%.h: ioctlsort%
        ./$< > $@
diff --git a/defs.h b/defs.h
index ede39b4e6e413b599a95b28718df9dfc9467254c..25e377aa3125f2dd0cf9ff3dce790c22814ccfad 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -249,6 +249,7 @@ extern char *stpcpy(char *dst, const char *src);
 typedef struct sysent {
        unsigned nargs;
        int     sys_flags;
+       int     sen;
        int     (*sys_func)();
        const char *sys_name;
 } struct_sysent;
diff --git a/generate_sen.sh b/generate_sen.sh
new file mode 100755 (executable)
index 0000000..6c177ab
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/sh -e
+
+echo 'enum {'
+echo 'SEN_printargs = 0,'
+    sed -n '/printargs/! s/.*SEN(\([^)]*\)).*/\1/p' |
+    sort -u |
+    sed 's/.*/SEN_&,/'
+echo '};'
index bd706019c6da57b47dd56cb2f46da8e72251e6bb..1b7cbc5f1129ec831c9b81e4cbe0c96577e881c3 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "dummy.h"
 #include "sys_func.h"
+#include "sen.h"
 
 #if NEED_UID16_PARSERS
 extern SYS_FUNC(chown16);
index b8f9f82a7ae7ebee66960254a1e19c2cde087d2e..6753f2dea12d2e3ad7964dcec9468cc848179f7e 100644 (file)
--- a/syscall.c
+++ b/syscall.c
@@ -81,7 +81,8 @@
 #define SI STACKTRACE_INVALIDATE_CACHE
 #define SE STACKTRACE_CAPTURE_ON_ENTER
 
-#define SEN(syscall_name) SYS_FUNC_NAME(syscall_name)
+#define SEN_NAME(syscall_name) SEN_ ## syscall_name
+#define SEN(syscall_name) SEN_NAME(syscall_name), SYS_FUNC_NAME(syscall_name)
 
 const struct_sysent sysent0[] = {
 #include "syscallent.h"
@@ -101,6 +102,7 @@ static const struct_sysent sysent2[] = {
 
 /* Now undef them since short defines cause wicked namespace pollution. */
 #undef SEN
+#undef SEN_NAME
 #undef TD
 #undef TF
 #undef TI