Control: tag -1 upstream On Sun, 2014-05-18 at 16:48 +0100, Michael Tautschnig wrote: > Package: linux > Version: 3.14.4-1 > Usertags: goto-cc > > During a rebuild of all Debian packages in a clean sid chroot (using > cowbuilder > and pbuilder) the build failed with the following error. Please note that we > use our research compiler tool-chain (using tools from the cbmc package), > which > permits extended reporting on type inconsistencies at link time. > > [...] > HOSTCC arch/x86/tools/relocs_32.o > HOSTCC arch/x86/tools/relocs_64.o > HOSTCC arch/x86/tools/relocs_common.o > HOSTLD arch/x86/tools/relocs > > file > /srv/jenkins-slave/workspace/sid-goto-cc-linux/linux-3.14.4/arch/x86/tools/relocs.c > line 698: error: conflicting types for variable "per_cpu_load_addr" > old definition in module relocs_32 file > /srv/jenkins-slave/workspace/sid-goto-cc-linux/linux-3.14.4/arch/x86/tools/relocs.c > line 698 > unsigned int > new definition in module relocs_64 file > /srv/jenkins-slave/workspace/sid-goto-cc-linux/linux-3.14.4/arch/x86/tools/relocs.c > line 698 > unsigned long int > scripts/Makefile.host:127: recipe for target 'arch/x86/tools/relocs' failed > make[6]: *** [arch/x86/tools/relocs] Error 64 > /srv/jenkins-slave/workspace/sid-goto-cc-linux/linux-3.14.4/arch/x86/Makefile:179: > recipe for target 'archscripts' failed > make[5]: *** [archscripts] Error 2 > > Unlike other variables in relocs.c, per_cpu_load_addr is not marked static: > > http://sources.debian.net/src/linux/3.11.8-1/arch/x86/tools/relocs.c?hl=698#L698 > > As, however, the type used in its declaration is different for > relocs_32/relocs_64, a type conflict (of the thus duplicate definition) > arises. > The standard linker will pick either of the two definitions, possibly > resulting > in the 32 bit (unsigned int) version being used, which would cause arbitrary > values to be overwritten when assigning to per_cpu_load_addr in a 64 bit > context.
I think you are mistaken. The standard linker, GNU ld, is documented to use the maximum size of multiple 'common' symbol definitions. Nevertheless, in C terms this is obviously undefined behaviour and I doubt that the program was intended to depend on this. Ben. -- Ben Hutchings Usenet is essentially a HUGE group of people passing notes in class. - Rachel Kadel, `A Quick Guide to Newsgroup Etiquette'
signature.asc
Description: This is a digitally signed message part