From: Dmitry V. Levin Date: Sun, 1 Jan 2017 20:59:11 +0000 (+0000) Subject: Generate scno.h without invoking a generated executable helper X-Git-Tag: v4.16~112 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cae1252903af7c54ea618c01db35968385a0e8af;p=strace Generate scno.h without invoking a generated executable helper Generate scno.h using only those tools that are available for cross build. This allows to use scno.h during the build of strace itself. * scno.am: New file. * scno.head: New file. * Makefile.am (EXTRA_DIST): Add it. * tests/generate_scno.c: Remove. * tests/.gitignore: Remove generate_scno. * tests/Makefile.am (check_PROGRAMS): Likewise. (CLEANFILES): Remove scno.h. (scno.h, $(scno_dependants)): Remove rules. (scno_dependants): Remove. ($(objects)): New rule. Include ../scno.am. --- diff --git a/Makefile.am b/Makefile.am index 0e157dbc..53b61955 100644 --- a/Makefile.am +++ b/Makefile.am @@ -746,6 +746,7 @@ EXTRA_DIST = \ mpers.sh \ mpers_test.sh \ mpers_xlat.h \ + scno.head \ signalent.sh \ strace-graph \ strace-log-merge \ diff --git a/scno.am b/scno.am new file mode 100644 index 00000000..12745f12 --- /dev/null +++ b/scno.am @@ -0,0 +1,44 @@ +# scno.h make rules for strace. +# +# Copyright (c) 2017 Dmitry V. Levin +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +SCNO_CPPFLAGS = $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(ARCH_MFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) + +syscallent.i: $(top_srcdir)/$(OS)/$(ARCH)/syscallent.h + $(CPP) -P $(SCNO_CPPFLAGS) $^ -o $@ + +digits = [[:digit:]][[:digit:]]* +al_nums = [[:alnum:]_][[:alnum:]_]* +SCNO_SED = /TRACE_INDIRECT_SUBCALL/d; s/^\[[[:space:]]*\($(digits)\)\][[:space:]]*=[[:space:]]*{[^,]*,[^,]*,[^,]*,[[:space:]]*"\($(al_nums)\)"[[:space:]]*},.*/\#ifndef __NR_\2\n\# define __NR_\2 (SYSCALL_BIT | \1)\n\#endif/p + +scno.h: $(top_srcdir)/scno.head syscallent.i + echo '/* Generated by Makefile from $^; do not edit. */' > $@-t + cat $< >> $@-t + LC_ALL=C sed -n '$(SCNO_SED)' $(filter-out $<,$^) >> $@-t + mv $@-t $@ + +CLEANFILES += syscallent.i scno.h diff --git a/scno.head b/scno.head new file mode 100644 index 00000000..a640102f --- /dev/null +++ b/scno.head @@ -0,0 +1,6 @@ +#if defined __X32_SYSCALL_BIT && defined __NR_read \ + && (__X32_SYSCALL_BIT & __NR_read) == __X32_SYSCALL_BIT +# define SYSCALL_BIT __X32_SYSCALL_BIT +#else +# define SYSCALL_BIT 0 +#endif diff --git a/tests/.gitignore b/tests/.gitignore index 3270176f..87a846eb 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -80,7 +80,6 @@ ftruncate ftruncate64 futex futimesat -generate_scno get_mempolicy getcpu getcwd diff --git a/tests/Makefile.am b/tests/Makefile.am index 57dd8b95..bd8f3d54 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -142,7 +142,6 @@ check_PROGRAMS = \ ftruncate64 \ futex \ futimesat \ - generate_scno \ get_mempolicy \ getcpu \ getcwd \ @@ -929,11 +928,9 @@ ksysent.h: $(srcdir)/ksysent.sed ksysent.$(OBJEXT): ksysent.h -scno.h: generate_scno - ./$< > $@-t && mv $@-t $@ - objects = $(filter %.$(OBJEXT),$(SOURCES:.c=.$(OBJEXT))) -scno_dependants = $(filter-out generate_scno.$(OBJEXT),$(objects)) -$(scno_dependants): scno.h +$(objects): scno.h + +CLEANFILES = ksysent.h $(TESTS:=.tmp) -CLEANFILES = ksysent.h scno.h $(TESTS:=.tmp) +include ../scno.am diff --git a/tests/generate_scno.c b/tests/generate_scno.c deleted file mode 100644 index 66e8036c..00000000 --- a/tests/generate_scno.c +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Generate scno.h file. - * - * Copyright (c) 2015-2016 Dmitry V. Levin - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "tests.h" -#include "sysent.h" -#include -#include -#include - -#define TD 0 -#define TF 0 -#define TI 0 -#define TN 0 -#define TP 0 -#define TS 0 -#define TM 0 -#define NF 0 -#define MA 0 -#define SI 0 -#define SE 0 -#define CST 0 -#define SEN(arg) 0,0 - -static const struct_sysent syscallent[] = { -#include "syscallent.h" -}; - -#undef syscall_bit -#if defined __x86_64__ && defined __ILP32__ && defined __X32_SYSCALL_BIT -# define syscall_bit __X32_SYSCALL_BIT -#endif -#ifndef syscall_bit -# define syscall_bit 0 -#endif - -static char al_num[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789"; - -int -main(void) -{ - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(syscallent); ++i) { - const char *name = syscallent[i].sys_name; - - if (!name || strspn(name, al_num) < strlen(name) -#ifdef SYS_socket_nsubcalls - || (i >= SYS_socket_subcall && - i < SYS_socket_subcall + SYS_socket_nsubcalls) -#endif -#ifdef SYS_ipc_nsubcalls - || (i >= SYS_ipc_subcall && - i < SYS_ipc_subcall + SYS_ipc_nsubcalls) -#endif -#ifdef ARM_FIRST_SHUFFLED_SYSCALL - || (i >= ARM_FIRST_SHUFFLED_SYSCALL && - i <= ARM_FIRST_SHUFFLED_SYSCALL + - ARM_LAST_SPECIAL_SYSCALL + 1) -#endif - ) - continue; - - printf("#ifndef __NR_%s\n# define __NR_%s %u\n#endif\n", - name, name, syscall_bit + i); - } - - return 0; -}