On Thu, Jan 12, 2017 at 01:34:13PM -0800, Alexey Neyman wrote: >>From 13ebccef9a6fd13e2af6060f8e0f8d8700ecb261 Mon Sep 17 00:00:00 2001 > From: Alexey Neyman <sti...@att.net> > Date: Thu, 12 Jan 2017 13:15:59 -0800 > Subject: [PATCH] Get ioctl definitions from host, not build.
Please prefix with a component and omit the trailing dot, e.g. ioctlsort: get ioctl definitions from host, not build > When cross-compiling, ioctlsort must obtain _IOC_* values from the > host, build's values may be incompatible. > > Signed-off-by: Alexey Neyman <sti...@att.net> > --- > Makefile.am | 9 +++++++-- > ioctls_iocdef.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ > ioctlsort.c | 12 +++++++++--- > 3 files changed, 60 insertions(+), 5 deletions(-) > create mode 100644 ioctls_iocdef.c > > diff --git a/Makefile.am b/Makefile.am > index 25caf9a..08e7704 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -824,10 +824,15 @@ ioctl_redefs%.h: ioctlent%.h ioctlent0.h > ioctlent%.h: ioctlsort% > ./$< > $@ > > +# Need to pick up <linux/ioctl.h> definitions *for host* while compiling > +# ioctlsort *for build*, hence this magic. > +ioctls_iocdef.h: $(srcdir)/ioctls_iocdef.c > + $(CC) $(DEFAULT_INCLUDES) $(INCLUDES) -E -P $< | grep ^DEFINE | sed > 's/^DEFINE/#define/' > $@ > + 1st, I slightly prefer ioctl_iocdef over ioctls_iocdef. 2nd, we usually keep intermediate targets. 3rd, the right way to invoke the preprocessor is $(CPP) with all its options. 4th, sed after grep is a bad shell style. 5th, let's make "ioctl_iocdef.h" a 100% replacement of <linux/ioctl.h> for ioctlsort.c. For example, ioctl_iocdef.i: $(srcdir)/ioctl_iocdef.c $(CPP) -P $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(strace_CPPFLAGS) $(CPPFLAGS) $< -o $@ ioctl_iocdef.h: ioctl_iocdef.i sed -n 's/^DEFINE HOST/#define /p' $< > $@ > ioctlsort%$(BUILD_EXEEXT): ioctlsort%.o > $(ioctlsort_CC) $(ioctlsort_CFLAGS) $(ioctlsort_LDFLAGS) $< -o $@ > > -ioctlsort%.o: ioctls_all%.h $(srcdir)/ioctlsort.c > +ioctlsort%.o: ioctls_all%.h ioctls_iocdef.h $(srcdir)/ioctlsort.c > $(ioctlsort_CC) $(ioctlsort_DEFS) $(ioctlsort_INCLUDES) > $(ioctlsort_CPPFLAGS) $(ioctlsort_CFLAGS) -DIOCTLSORT_INC=\"$<\" -c -o $@ > $(srcdir)/ioctlsort.c > > ioctls_all%.h: $(srcdir)/$(OS)/$(ARCH)/ioctls_inc%.h > $(srcdir)/$(OS)/$(ARCH)/ioctls_arch%.h > @@ -835,7 +840,7 @@ ioctls_all%.h: $(srcdir)/$(OS)/$(ARCH)/ioctls_inc%.h > $(srcdir)/$(OS)/$(ARCH)/ioc > > BUILT_SOURCES = $(ioctl_redefs_h) $(ioctlent_h) \ > native_printer_decls.h native_printer_defs.h printers.h sen.h > sys_func.h .version > -CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) $(mpers_preproc_files) \ > +CLEANFILES = $(ioctl_redefs_h) $(ioctlent_h) $(mpers_preproc_files) > ioctls_iocdef.h \ > native_printer_decls.h native_printer_defs.h printers.h sen.h > sys_func.h > DISTCLEANFILES = gnu/stubs-32.h gnu/stubs-x32.h The last but not least, please add ioctl_iocdef.c to EXTRA_DIST. > diff --git a/ioctls_iocdef.c b/ioctls_iocdef.c > new file mode 100644 > index 0000000..85b864a > --- /dev/null > +++ b/ioctls_iocdef.c > @@ -0,0 +1,44 @@ > +/* > + * Copyright (c) 2001 Wichert Akkerman <wich...@cistron.nl> > + * Copyright (c) 2004-2015 Dmitry V. Levin <l...@altlinux.org> > + * 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. > + */ I'm sorry but this is not true, I didn't write this. > +/* > + * This file is *PREPROCESSED*, not *COMPILED* for host and the result > + * is included into ioctlsort (which is compiled for build). Since some > + * of these values are used in structure initializers, they cannot be > + * defined as 'const unsigned int' - instead, they have to be macros. > + * Hence, the result of preprocessing will be run through sed to change > + * 'DEFINE' into '#define' > + */ > +#include <linux/ioctl.h> > + > +DEFINE HOST_IOC_NONE _IOC_NONE > +DEFINE HOST_IOC_READ _IOC_READ > +DEFINE HOST_IOC_WRITE _IOC_WRITE > + > +DEFINE HOST_IOC_SIZESHIFT _IOC_SIZESHIFT > +DEFINE HOST_IOC_DIRSHIFT _IOC_DIRSHIFT > diff --git a/ioctlsort.c b/ioctlsort.c > index 9c31691..1526dc3 100644 > --- a/ioctlsort.c > +++ b/ioctlsort.c > @@ -33,7 +33,8 @@ > #include <stdio.h> > #include <stdlib.h> > #include <string.h> > -#include <linux/ioctl.h> > + > +#include "ioctls_iocdef.h" Let's make ioctls_iocdef.h containing all necessary definitions so that this hunk would be enough. -- ldv
pgploUAMBDhJJ.pgp
Description: PGP signature
------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today. http://sdm.link/xeonphi
_______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel