Created attachment 6397 [details] Draft implementation of config.h include-guard This bug is a generalization of bug 13558. When compiling a source file in binutils, config.h needs to be #included before any system header file. The configuration header may contain feature test-macro definitions, and if those are not in place before a system header is pulled in, bugs like 13558 tend to happen. Numerous files in the binutils CVS source fail to do this correctly, however: * Sometimes, bfd.h (or the like) is included before sysdep.h, when sysdep.h is responsible for #including config.h * Sometimes, neither sysdep.h nor config.h is #included at all * Sometimes, config.h is #included twice, leading to re-definition warnings These issues are not always fatal, but when they are, they tend to occur on less-popular platforms that are not used in primary development (e.g. AIX in the case of bug 13558). I would like to propose a mechanism, draft-implemented in the attached patch against CVS, that enforces correct inclusion of the config header. The patch is self-explanatory, as should be the issues it exposes when binutils CVS is built.
Hi Daniel, I like the patch in principle, but I feel that there is a problem with it - we cannot rely upon building the binutils only in a glibc environment. They are also built with other C libraries. I cannot think of a clean way to test for the presence of system header files however, so maybe AH_VERBATIM macros could be made conditional somehow ? Perhaps on the use of the --enable-maintainer-mode config option ? You also mention that config.h is included twice sometimes. Does your patch catch this ? I am not aware of any config.h redefinition warnings when building the binutils locally, so can you tell me more about where and when this happens ? Cheers Nick
The thought is that __GLIBC__ catches system headers in what is presumably the main development environment, GNU/Linux. It doesn't really need to work on other systems to be useful, because as long as config.h is the first thing seen on Linux, the same should hold true on other systems (given no changes in the source, and the absence of funky cpp conditionals that early on). Even if someone hacks on binutils in a non-Linux environment, any issues with the #includes should become apparent once some other developer builds on Linux. Enabling this only in maintainer mode would be sensible; I left that out because you would need to do this via e.g. "#ifdef MAINTAINER_MODE" in the AH_VERBATIM (note that the AH_VERBATIM itself can't be conditionalized), so then you'd need to conditionally AC_DEFINE(MAINTAINER_MODE)... it just seemed like more trouble than it was worth. I don't see that this should ever trip erroneously out in the wild, barring a user setting CPPFLAGS=-D__GLIBC__ or the like for some odd reason. I have to walk back my comments on config.h being #included twice---what I had actually seen in my build of the CVS source was this: g++ -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"sidcomp\" -DVERSION=\"0.1\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -I. -I$(srcdir)/sid/component/cgen-cpu/xstormy16 -I$(srcdir)/sid/component/cgen-cpu/xstormy16 -I$(srcdir)/sid/component/cgen-cpu/xstormy16/.. -I../../../include -I$(srcdir)/sid/component/cgen-cpu/xstormy16/../../../include -I../../../../bfd -I$(srcdir)/sid/component/cgen-cpu/xstormy16/../../../../include -g -O2 -MT xstormy16.lo -MD -MP -MF .deps/xstormy16.Tpo -c $(srcdir)/sid/component/cgen-cpu/xstormy16/xstormy16.cxx -fPIC -DPIC -o .libs/xstormy16.o In file included from $(srcdir)/sid/component/cgen-cpu/xstormy16/xstormy16.cxx:8:0: ../../../../bfd/config.h:267:0: warning: "PACKAGE" redefined [enabled by default] <command-line>:0:0: note: this is the location of the previous definition ../../../../bfd/config.h:358:0: warning: "VERSION" redefined [enabled by default] <command-line>:0:0: note: this is the location of the previous definition It's actually a clash between a project that doesn't use config.h and one that does, and that in a section of the binutils tree that isn't binutils proper. My bad :] The reason I didn't add any logic detecting double-#inclusion, at any rate, was that you'd already get copious warnings from that, and it's not likely to be a build-breaker on exotic platforms in the way the other header snafus have been.
CVSROOT: /cvs/src Module name: src Changes by: nickc@sourceware.org 2012-05-17 15:13:28 Modified files: gas : ChangeLog Makefile.am Makefile.in aclocal.m4 cgen.c config.in configure configure.in gas/config : tc-dlx.c tc-h8300.c tc-lm32.c tc-mep.c tc-microblaze.c tc-mmix.c tc-msp430.c tc-or32.c tc-tic4x.c tc-tic54x.c tc-xtensa.c gas/doc : Makefile.in bfd : ChangeLog bfd-in.h bfd-in2.h compress.c config.in configure configure.in elf32-m68hc1x.c elf64-hppa.c plugin.c som.c sysdep.h xsym.c ld : ChangeLog config.in configure configure.in sysdep.h opcodes : ChangeLog alpha-dis.c alpha-opc.c avr-dis.c cgen-opc.c config.in configure configure.in cr16-dis.c cris-dis.c crx-dis.c d10v-dis.c d10v-opc.c d30v-dis.c d30v-opc.c h8500-dis.c i370-dis.c i370-opc.c m10200-dis.c m10300-dis.c micromips-opc.c mips-opc.c mips16-opc.c moxie-dis.c or32-opc.c pj-dis.c ppc-dis.c ppc-opc.c rl78-decode.c rl78-decode.opc rx-decode.c rx-decode.opc s390-dis.c sh-dis.c sh64-dis.c sparc-dis.c sparc-opc.c spu-dis.c sysdep.h tic30-dis.c tic54x-dis.c tic80-dis.c tic80-opc.c tilegx-dis.c tilepro-dis.c v850-dis.c v850-opc.c vax-dis.c w65-dis.c xgate-dis.c xtensa-dis.c gold : ChangeLog config.in configure configure.ac binutils : ChangeLog aclocal.m4 config.in configure configure.in unwind-ia64.c Added files: gas : itbl-lex-wrapper.c gas/config : bfin-lex-wrapper.c Log message: PR 14072 * configure.in: Add check that sysdep.h has been included before any system header files. * configure: Regenerate. * config.in: Regenerate. * sysdep.h: Generate an error if included before config.h. * alpha-opc.c: Include sysdep.h before any other header file. * alpha-dis.c: Likewise. * avr-dis.c: Likewise. * cgen-opc.c: Likewise. * cr16-dis.c: Likewise. * cris-dis.c: Likewise. * crx-dis.c: Likewise. * d10v-dis.c: Likewise. * d10v-opc.c: Likewise. * d30v-dis.c: Likewise. * d30v-opc.c: Likewise. * h8500-dis.c: Likewise. * i370-dis.c: Likewise. * i370-opc.c: Likewise. * m10200-dis.c: Likewise. * m10300-dis.c: Likewise. * micromips-opc.c: Likewise. * mips-opc.c: Likewise. * mips61-opc.c: Likewise. * moxie-dis.c: Likewise. * or32-opc.c: Likewise. * pj-dis.c: Likewise. * ppc-dis.c: Likewise. * ppc-opc.c: Likewise. * s390-dis.c: Likewise. * sh-dis.c: Likewise. * sh64-dis.c: Likewise. * sparc-dis.c: Likewise. * sparc-opc.c: Likewise. * spu-dis.c: Likewise. * tic30-dis.c: Likewise. * tic54x-dis.c: Likewise. * tic80-dis.c: Likewise. * tic80-opc.c: Likewise. * tilegx-dis.c: Likewise. * tilepro-dis.c: Likewise. * v850-dis.c: Likewise. * v850-opc.c: Likewise. * vax-dis.c: Likewise. * w65-dis.c: Likewise. * xgate-dis.c: Likewise. * xtensa-dis.c: Likewise. * rl78-decode.opc: Likewise. * rl78-decode.c: Regenerate. * rx-decode.opc: Likewise. * rx-decode.c: Regenerate. * configure.in: Add check that sysdep.h has been included before any system header files. * configure: Regenerate. * config.in: Regenerate. * sysdep.h: Generate an error if included before config.h. * configure.in: Add check that sysdep.h has been included before any system header files. * configure: Regenerate. * config.in: Regenerate. * aclocal.m4: Regenerate. * bfd-in.h: Generate an error if included before config.h. * sysdep.h: Likewise. * bfd-in2.h: Regenerate. * compress.c: Remove #include "config.h". * plugin.c: Likewise. * elf32-m68hc1x.c: Include sysdep.h before alloca-conf.h. * elf64-hppa.c: Likewise. * som.c: Likewise. * xsymc.c: Likewise. * configure.in: Add check that sysdep.h has been included before any system header files. * configure: Regenerate. * config.in: Regenerate. * configure.in: Add check that sysdep.h has been included before any system header files. * configure: Regenerate. * config.in: Regenerate. * aclocal.m4: Regenerate. * Makefile.am: Use wrappers around C files generated by flex. * Makefile.in: Regenerate. * doc/Makefile.in: Regenerate. * itbl-lex-wrapper.c: New file. * config/bfin-lex-wrapper.c: New file. * cgen.c: Include as.h before setjmp.h. * config/tc-dlx.c: Include as.h before any other header. * config/tc-h8300.c: Likewise. * config/tc-lm32.c: Likewise. * config/tc-mep.c: Likewise. * config/tc-microblaze.c: Likewise. * config/tc-mmix.c: Likewise. * config/tc-msp430.c: Likewise. * config/tc-or32.c: Likewise. * config/tc-tic4x.c: Likewise. * config/tc-tic54x.c: Likewise. * config/tc-xtensa.c: Likewise. * configure.in: Add check that sysdep.h has been included before any system header files. * configure: Regenerate. * config.in: Regenerate. * unwind-ia64.h: Include config.h. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/itbl-lex-wrapper.c.diff?cvsroot=src&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/ChangeLog.diff?cvsroot=src&r1=1.4738&r2=1.4739 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/Makefile.am.diff?cvsroot=src&r1=1.199&r2=1.200 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/Makefile.in.diff?cvsroot=src&r1=1.222&r2=1.223 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/aclocal.m4.diff?cvsroot=src&r1=1.41&r2=1.42 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/cgen.c.diff?cvsroot=src&r1=1.40&r2=1.41 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config.in.diff?cvsroot=src&r1=1.40&r2=1.41 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/configure.diff?cvsroot=src&r1=1.268&r2=1.269 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/configure.in.diff?cvsroot=src&r1=1.229&r2=1.230 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/bfin-lex-wrapper.c.diff?cvsroot=src&r1=NONE&r2=1.1 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-dlx.c.diff?cvsroot=src&r1=1.24&r2=1.25 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-h8300.c.diff?cvsroot=src&r1=1.66&r2=1.67 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-lm32.c.diff?cvsroot=src&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-mep.c.diff?cvsroot=src&r1=1.16&r2=1.17 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-microblaze.c.diff?cvsroot=src&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-mmix.c.diff?cvsroot=src&r1=1.35&r2=1.36 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-msp430.c.diff?cvsroot=src&r1=1.33&r2=1.34 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-or32.c.diff?cvsroot=src&r1=1.17&r2=1.18 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-tic4x.c.diff?cvsroot=src&r1=1.33&r2=1.34 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-tic54x.c.diff?cvsroot=src&r1=1.35&r2=1.36 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/config/tc-xtensa.c.diff?cvsroot=src&r1=1.125&r2=1.126 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/doc/Makefile.in.diff?cvsroot=src&r1=1.116&r2=1.117 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/ChangeLog.diff?cvsroot=src&r1=1.5692&r2=1.5693 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/bfd-in.h.diff?cvsroot=src&r1=1.163&r2=1.164 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/bfd-in2.h.diff?cvsroot=src&r1=1.574&r2=1.575 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/compress.c.diff?cvsroot=src&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/config.in.diff?cvsroot=src&r1=1.50&r2=1.51 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/configure.diff?cvsroot=src&r1=1.365&r2=1.366 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/configure.in.diff?cvsroot=src&r1=1.313&r2=1.314 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/elf32-m68hc1x.c.diff?cvsroot=src&r1=1.44&r2=1.45 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/elf64-hppa.c.diff?cvsroot=src&r1=1.107&r2=1.108 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/plugin.c.diff?cvsroot=src&r1=1.16&r2=1.17 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/som.c.diff?cvsroot=src&r1=1.85&r2=1.86 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/sysdep.h.diff?cvsroot=src&r1=1.21&r2=1.22 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/xsym.c.diff?cvsroot=src&r1=1.31&r2=1.32 http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/ChangeLog.diff?cvsroot=src&r1=1.2444&r2=1.2445 http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/config.in.diff?cvsroot=src&r1=1.35&r2=1.36 http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/configure.diff?cvsroot=src&r1=1.120&r2=1.121 http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/configure.in.diff?cvsroot=src&r1=1.75&r2=1.76 http://sourceware.org/cgi-bin/cvsweb.cgi/src/ld/sysdep.h.diff?cvsroot=src&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/ChangeLog.diff?cvsroot=src&r1=1.1813&r2=1.1814 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/alpha-dis.c.diff?cvsroot=src&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/alpha-opc.c.diff?cvsroot=src&r1=1.16&r2=1.17 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/avr-dis.c.diff?cvsroot=src&r1=1.24&r2=1.25 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/cgen-opc.c.diff?cvsroot=src&r1=1.20&r2=1.21 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/config.in.diff?cvsroot=src&r1=1.16&r2=1.17 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/configure.diff?cvsroot=src&r1=1.141&r2=1.142 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/configure.in.diff?cvsroot=src&r1=1.105&r2=1.106 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/cr16-dis.c.diff?cvsroot=src&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/cris-dis.c.diff?cvsroot=src&r1=1.21&r2=1.22 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/crx-dis.c.diff?cvsroot=src&r1=1.17&r2=1.18 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/d10v-dis.c.diff?cvsroot=src&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/d10v-opc.c.diff?cvsroot=src&r1=1.14&r2=1.15 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/d30v-dis.c.diff?cvsroot=src&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/d30v-opc.c.diff?cvsroot=src&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/h8500-dis.c.diff?cvsroot=src&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/i370-dis.c.diff?cvsroot=src&r1=1.6&r2=1.7 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/i370-opc.c.diff?cvsroot=src&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/m10200-dis.c.diff?cvsroot=src&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/m10300-dis.c.diff?cvsroot=src&r1=1.14&r2=1.15 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/micromips-opc.c.diff?cvsroot=src&r1=1.5&r2=1.6 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/mips-opc.c.diff?cvsroot=src&r1=1.91&r2=1.92 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/mips16-opc.c.diff?cvsroot=src&r1=1.17&r2=1.18 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/moxie-dis.c.diff?cvsroot=src&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/or32-opc.c.diff?cvsroot=src&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/pj-dis.c.diff?cvsroot=src&r1=1.11&r2=1.12 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/ppc-dis.c.diff?cvsroot=src&r1=1.56&r2=1.57 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/ppc-opc.c.diff?cvsroot=src&r1=1.142&r2=1.143 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/rl78-decode.c.diff?cvsroot=src&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/rl78-decode.opc.diff?cvsroot=src&r1=1.2&r2=1.3 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/rx-decode.c.diff?cvsroot=src&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/rx-decode.opc.diff?cvsroot=src&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/s390-dis.c.diff?cvsroot=src&r1=1.19&r2=1.20 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/sh-dis.c.diff?cvsroot=src&r1=1.28&r2=1.29 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/sh64-dis.c.diff?cvsroot=src&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/sparc-dis.c.diff?cvsroot=src&r1=1.22&r2=1.23 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/sparc-opc.c.diff?cvsroot=src&r1=1.28&r2=1.29 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/spu-dis.c.diff?cvsroot=src&r1=1.3&r2=1.4 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/sysdep.h.diff?cvsroot=src&r1=1.9&r2=1.10 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/tic30-dis.c.diff?cvsroot=src&r1=1.12&r2=1.13 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/tic54x-dis.c.diff?cvsroot=src&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/tic80-dis.c.diff?cvsroot=src&r1=1.8&r2=1.9 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/tic80-opc.c.diff?cvsroot=src&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/tilegx-dis.c.diff?cvsroot=src&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/tilepro-dis.c.diff?cvsroot=src&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/v850-dis.c.diff?cvsroot=src&r1=1.13&r2=1.14 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/v850-opc.c.diff?cvsroot=src&r1=1.14&r2=1.15 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/vax-dis.c.diff?cvsroot=src&r1=1.15&r2=1.16 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/w65-dis.c.diff?cvsroot=src&r1=1.10&r2=1.11 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/xgate-dis.c.diff?cvsroot=src&r1=1.1&r2=1.2 http://sourceware.org/cgi-bin/cvsweb.cgi/src/opcodes/xtensa-dis.c.diff?cvsroot=src&r1=1.7&r2=1.8 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gold/ChangeLog.diff?cvsroot=src&r1=1.912&r2=1.913 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gold/config.in.diff?cvsroot=src&r1=1.32&r2=1.33 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gold/configure.diff?cvsroot=src&r1=1.75&r2=1.76 http://sourceware.org/cgi-bin/cvsweb.cgi/src/gold/configure.ac.diff?cvsroot=src&r1=1.72&r2=1.73 http://sourceware.org/cgi-bin/cvsweb.cgi/src/binutils/ChangeLog.diff?cvsroot=src&r1=1.1910&r2=1.1911 http://sourceware.org/cgi-bin/cvsweb.cgi/src/binutils/aclocal.m4.diff?cvsroot=src&r1=1.33&r2=1.34 http://sourceware.org/cgi-bin/cvsweb.cgi/src/binutils/config.in.diff?cvsroot=src&r1=1.36&r2=1.37 http://sourceware.org/cgi-bin/cvsweb.cgi/src/binutils/configure.diff?cvsroot=src&r1=1.146&r2=1.147 http://sourceware.org/cgi-bin/cvsweb.cgi/src/binutils/configure.in.diff?cvsroot=src&r1=1.110&r2=1.111 http://sourceware.org/cgi-bin/cvsweb.cgi/src/binutils/unwind-ia64.c.diff?cvsroot=src&r1=1.17&r2=1.18
Hi Daniel, OK, you have persuaded me. I have applied your patch to my local sources, fixed up all the places where it found problems with the order of header file inclusion and then checked in the resulting (rather large) patch. If you have any more problems with header file inclusion please reopen this PR. Cheers Nick
(In reply to comment #4) > Hi Daniel, > > OK, you have persuaded me. I have applied your patch to my local sources, > fixed up all the places where it found problems with the order of header file > inclusion and then checked in the resulting (rather large) patch. Looks like this patch caused breakage all over. Please build crosses to e.g. arm-eabi and cris-elf. A "make check" will show weird ERRORs for missing tools. Looks like e.g. as-new isn't linked anymore.
Created attachment 6408 [details] example libtool, this one for arm-eabi gas; objdir/gas/libtool Looks like libtool for some programs (like gas) is now broken; truncated just before the code for func_dirname_and_basename (the head comment is there, the function not). Nothing suspicious in the log around building it
Created attachment 6409 [details] Patch to fix remaining files in CVS Nick, thank you for getting this in; I hope it'll make everyone's lives easier once the dust settles. I'm not seeing the odd behavior that Roland McGrath attributed to incorrect configure regeneration, but then, I'm only testing with a bog-standard Linux/x86 build. There are a handful of files still tripping the new checks. The attached patch against CVS resolves them for me.
CVSROOT: /cvs/src Module name: src Changes by: nickc@sourceware.org 2012-05-18 10:29:12 Modified files: bfd : ChangeLog bfd-in.h bfd-in2.h Log message: PR 14072 * bfd-in.h: Check for PACKAGE or PACKAGE_VERSION before complaining about config.h not having been included. * bfd-in2.h: Regenerate. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/ChangeLog.diff?cvsroot=src&r1=1.5694&r2=1.5695 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/bfd-in.h.diff?cvsroot=src&r1=1.164&r2=1.165 http://sourceware.org/cgi-bin/cvsweb.cgi/src/bfd/bfd-in2.h.diff?cvsroot=src&r1=1.575&r2=1.576
Created attachment 6413 [details] Patch to fix remaining file in CVS Looks like most of the files that my patch addressed in comment 7 have been fixed independently. Only one file remains.
include guard in <bfd.h> breaks e.g. oprofile build.
See #14243 re oprofile.