ARM: Raise incompatibility errors for shared objects
Daniel Jacobowitz
drow@mvista.com
Mon Oct 27 15:35:00 GMT 2003
More information about the Binutils mailing list
Mon Oct 27 15:35:00 GMT 2003
- Previous message (by thread): [PATCH] readelf -x
- Next message (by thread): ARM: Raise incompatibility errors for shared objects
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I was recently told that the ARM linker didn't complain when it used a shared object marked as VFP and a binary marked FPA, or vice versa. The problem turned out to be some code in elf32_arm_merge_private_bfd_data designed to skip archives with no contents; if I remember right this was added for the linux kernel because the empty archives seemed to have the wrong flags (since they were uninitialized). Unfortunately, shared objects are linked by removing their sections, to prevent them from being copied into the output file. If one is used for building new sections (e.g. .dynamic) then the warning triggers; if it isn't, then the warning does not trigger. This patch prevents skipping DYNAMIC objects. Patch is against 2.14 but also applies to HEAD. OK? -- Daniel Jacobowitz MontaVista Software Debian GNU/Linux Developer 2003-10-24 Daniel Jacobowitz <drow@mvista.com> * elf32-arm.h (elf32_arm_merge_private_bfd_data): Never skip dynamic objects. --- binutils-2.14/bfd/elf32-arm.h.orig 2003-10-24 17:50:16.000000000 -0400 +++ binutils-2.14/bfd/elf32-arm.h 2003-10-24 17:53:25.000000000 -0400 @@ -2491,21 +2491,27 @@ elf32_arm_merge_private_bfd_data (ibfd, if (in_flags == out_flags) return TRUE; - /* Check to see if the input BFD actually contains any sections. - If not, its flags may not have been initialised either, but it cannot - actually cause any incompatibility. */ - for (sec = ibfd->sections; sec != NULL; sec = sec->next) - { - /* Ignore synthetic glue sections. */ - if (strcmp (sec->name, ".glue_7") - && strcmp (sec->name, ".glue_7t")) - { - null_input_bfd = FALSE; - break; + /* Check to see if the input BFD actually contains any sections. If + not, its flags may not have been initialised either, but it + cannot actually cause any incompatibility. Do not short-circuit + dynamic objects; their section list may be emptied by + elf_link_add_object_symbols. */ + + if (!(ibfd->flags & DYNAMIC)) + { + for (sec = ibfd->sections; sec != NULL; sec = sec->next) + { + /* Ignore synthetic glue sections. */ + if (strcmp (sec->name, ".glue_7") + && strcmp (sec->name, ".glue_7t")) + { + null_input_bfd = FALSE; + break; + } } + if (null_input_bfd) + return TRUE; } - if (null_input_bfd) - return TRUE; /* Complain about various flag mismatches. */ if (EF_ARM_EABI_VERSION (in_flags) != EF_ARM_EABI_VERSION (out_flags))
- Previous message (by thread): [PATCH] readelf -x
- Next message (by thread): ARM: Raise incompatibility errors for shared objects
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list