My previous change to keep the Xtensa property tables from being GC'ed exposed another problem. If the first entry in a property table is removed by the linker's relaxation, the relocation for the entry was getting its offset set to a negative value. The subsequent call to elf_xtensa_discard_info_for_section was compounding the problem by neglecting to sort the relocations. (They should normally be sorted following relaxation, but relaxation is not always enabled.) While working on this, I decided to make the relaxation code more robust with regard to relocations on the property table entries, and I also added some new predicates to check for the various kinds of property tables. Tested with the testsuite for an xtensa-elf target, and by building "busybox" for xtensa-linux-gnu. Committed on the mainline. bfd/ * elf32-xtensa.c (xtensa_is_insntable_section): New. (xtensa_is_proptable_section): New. (elf_xtensa_discard_info_for_section): Handle "full" .xt.prop property tables with 12-byte entries, as well as tables with 8-byte entries. Sort the relocations before examining them. (relax_property_section): Use xtensa_is_proptable_section and xtensa_is_littable_section. Rewrite code for combining table entries to be more robust in case of unexpected relocations. Do not set offset of unused relocations to less than zero. (xtensa_is_property_section): Use other functions instead of duplicating section name comparisons. (xtensa_is_littable_section): Use CONST_STRNEQ for ".gnu.linkonce.p.". (xtensa_get_property_predef_flags): Use xtensa_is_insntable_section.