* bfd/elf32-ppc.c (struct ppc_elf_link_hash_entry): Add new field
has_sda_refs.
(ppc_elf_copy_indirect_symbol): Copy has_sda_refs.
(ppc_elf_check_relocs): Set has_sda_refs.
(ppc_elf_adjust_dynamic_symbol): Check has_sda_refs before eliminating
copy relocations. Use has_sda_refs to place variables in .sbss.
(ppc_elf_finish_dynamic_symbol): Use has_sda_refs to place variables in
.sbss.
ld/testsuite/
* ld-powerpc/sdalib.s, ld-powerpc/sdadyn.s, ld-powerpc/sdadyn.d: New
files.
* ld-powerpc/powerpc.exp: Run the new test.
* gas/Makefile.am: Have 'all' depend on 'info'.
* ld/Makefile.am: Have 'all' depend on 'info' and 'ld.1'.
* bfd/Makefile.in, binutils/Makefile.in, gas/Makefile.in
* ld/Makefile.in: Regenerate.
* arm.h: Import complete list of official relocation names
and numbers from AAELF. Define FAKE_RELOCs for old names.
Remove a few old names no longer used anywhere.
bfd:
* elf32-arm.c: Wherever possible, use official reloc names
from AAELF.
(elf32_arm_howto_table, elf32_arm_tls_gd32_howto)
(elf32_arm_tls_ldo32_howto, elf32_arm_tls_ldm32_howto)
(elf32_arm_tls_le32_howto, elf32_arm_tls_ie32_howto)
(elf32_arm_vtinherit_howto, elf32_arm_vtentry_howto)
(elf32_arm_pc11_howto, elf32_arm_thm_pc9_howto, elf32_arm_got_prel)
(elf32_arm_r_howto): Replace with elf32_arm_howto_table_1,
elf32_arm_howto_table_2, and elf32_arm_howto_table_3.
Add many new relocations from AAELF.
(elf32_arm_howto_from_type): Update to match.
(elf32_arm_reloc_map): Add entries for R_ARM_THM_JUMP24,
R_ARM_THM_JUMP11, R_ARM_THM_JUMP19, R_ARM_THM_JUMP8,
R_ARM_THM_JUMP6, R_ARM_GNU_VTINHERIT, and R_ARM_GNU_VTENTRY.
(elf32_arm_reloc_type_lookup): Use elf32_arm_howto_from_type.
(elf32_arm_final_link_relocate): Add support for
R_ARM_THM_JUMP24, R_ARM_THM_JUMP19, R_ARM_THM_JUMP6. Remove
case entries redundant with default.
* reloc.c: Reorganize ARM relocations. Add Thumb
assembler-internal relocations BFD_RELOC_ARM_T32_OFFSET_U8,
BFD_RELOC_ARM_T32_OFFSET_IMM, BFD_RELOC_ARM_T32_IMMEDIATE.
Add visible relocations BFD_RELOC_THUMB_PCREL_BRANCH7,
BFD_RELOC_THUMB_BRANCH20, BFD_RELOC_THUMB_BRANCH25.
Delete unused relocations BFD_RELOC_ARM_GOT12, BFD_RELOC_ARM_COPY.
* bfd-in2.h, libbfd.h: Regenerate.
opcodes:
* arm-dis.c (thumb_opcodes): Add disassembly for V6T2 16-bit
instructions. Adjust disassembly of some opcodes to match
unified syntax.
(thumb32_opcodes): New table.
(print_insn_thumb): Rename print_insn_thumb16; don't handle
two-halfword branches here.
(print_insn_thumb32): New function.
(print_insn): Choose among print_insn_arm, print_insn_thumb16,
and print_insn_thumb32. Be consistent about order of
halfwords when printing 32-bit instructions.
gas:
* hash.c (hash_lookup): Add len parameter. All callers changed.
(hash_find_n): New interface.
* hash.h: Prototype hash_find_n.
* sb.c: Include as.h.
(scrub_from_sb, sb_to_scrub, scrub_position): New statics.
(sb_scrub_and_add_sb): New interface.
* sb.h: Prototype sb_scrub_and_add_sb.
* input-scrub.c (input_scrub_include_sb): Use sb_scrub_and_add_sb.
* config/tc-arm.h (TC_FORCE_RELOCATION_LOCAL): Remove
reference to BFD_RELOC_ARM_GOT12 which is never generated.
* config/tc-arm.c: Rewrite, adding Thumb-2 support.
gas/testsuite:
* gas/arm/arm.exp: Convert all existing "gas_test" tests to
"run_dump_test" tests. Run more tests unconditionally. Run new tests.
* gas/arm/arch4t.s, gas/arm/arch6zk.s, gas/arm/arm3.s, gas/arm/arm6.s
* gas/arm/arm7dm.s, gas/arm/bignum1.s, gas/arm/float.s
* gas/arm/immed.s, gas/arm/iwmmxt.s, gas/arm/offset.s, gas/arm/thumb.s:
Adjust to work as a dump test.
* gas/arm/arch4t.d, gas/arm/arch6zk.d, gas/arm/arm3.d, gas/arm/arm6.d
* gas/arm/arm7dm.d, gas/arm/bignum1.d, gas/arm/float.d
* gas/arm/immed.d, gas/arm/iwmmxt.d, gas/arm/offset.d, gas/arm/thumb.d:
New files.
* gas/arm/armv1-bad.l, gas/arm/armv1-bad.s: Remove tests for
diagnostics that don't happen in the first pass anymore.
* gas/arm/iwmmxt-bad.l, gas/arm/r15-bad.l, gas/arm/req.l
* gas/arm/vfp-bad.l:
Update expected diagnostics.
* gas/arm/pic.d: Update expected reloc name.
* gas/arm/thumbv6.d: CPY no longer appears in disassembly.
* gas/arm/r15-bad.s: Avoid two-argument mul.
* gas/arm/req.s: Adjust comments.
* gas/arm/maverick.d, gas/arm/maverick.s: Avoid inappropriate
use of PC.
* gas/arm/macro-1.d, gas/arm/macro1.s
* gas/arm/t16-bad.l, gas/arm/t16-bad.s
* gas/arm/tcompat.d, gas/arm/tcompat.s
* gas/arm/tcompat2.d, gas/arm/tcompat2.s
* gas/arm/thumb32.d, gas/arm/thumb32.s
New test pair.
ld/testsuite:
* ld-arm/mixed-app.d: Adjust expected disassembly a little.
associated with it.
elf32-arm.c (elf32_arm_final_link_relocate): Gracefully handle the situation
where a symbols's section is not known but a section relative R_ARM_RELATIVE
reloc has to be generated for the Symbian OS.
see if the same value is being used on the rhs as on the lhs.
(print_assignment): Call scan_for_self_assignment and if it
returns true, do no display the result of the computation but
instead just the final value of the symbol on the lhs.
* ld.texinfo: Document this behaviour and provide an example of
when it will happen.
2005-05-05 H.J. Lu <hongjiu.lu@intel.com>
* elflink.c (_bfd_elf_provide_section_bound_symbols): Use
"__bss_start" instead of "_edata" as fallback.
ld/
2005-05-05 H.J. Lu <hongjiu.lu@intel.com>
* scripttempl/elf.sc: Document the usage of __bss_start.
bfd/
* config.bfd: Use bfd_elf32_i386_vxworks_vec for i?86-*-vxworks.
* configure.in: Add bfd_elf32_i386_vxworks_vec. i386 targets need
elf-vxworks.lo.
* configure: Regenerate.
* Makefile.am (BFD32_BACKENDS): Add elf-vxworks.lo.
(BFD32_BACKENDS_CFILES): Add elf-vxworks.c.
(elf32-i386.lo): Depend on elf-vxworks.h.
(elf-vxworks.lo): New rule.
* Makefile.in: Regenerate.
* elf-bfd.h (elf_backend_data): Update type of
elf_backend_emit_relocs.
(_bfd_elf_link_output_relocs): Update prototype.
* elflink.c (_bfd_elf_link_output_relocs): Always use
bed->elf_backend_emit_relocs when outputting relocations.
* elfxx-target.h (elf_backend_emit_relocs): Default to
_bfd_elf_link_output_relocs.
* targets.c (bfd_elf32_i386_vxworks_vec): Declare.
(_bfd_target_vector): Add bfd_elf32_i386_vxworks_vec.
* elf32-i386.c: Add elf32-i386-vxworks target BFD.
(elf_i386_plt0_entry): Remove padding.
(elf_i386_pic_plt0_entry): Ditto.
(PLTRESOLVE_RELOCS_SHLIB, PLTRESOLVE_RELOCS): Define.
(PLT_NON_JUMP_SLOT_RELOCS): Define.
(elf_i386_link_hash_table): Add srelplt2, hgot, hplt, is_vxworks and
plt0_pad_byte fields.
(elf_i386_link_hash_table_create): Zero them.
(elf_i386_create_dynamic_sections): Create static relocation section.
(allocate_dynrelocs): Allocate space for static PLT relocations.
(elf_i386_size_dynamic_sections): Save shortcuts to PLT and GOT
symbols. Give PLT symbols function type. Don't strip PLT sections
if we have exported symbols from them.
(elf_i386_finish_dynamic_symbol): Fill in VxWorks PLT static
relocation section. Don't mark _GLOBAL_OFFSET_TABLE_ as absolute on
VxWorks.
(elf_i386_finish_dynamic_sections): Allow different pad bytes.
Add relocation for GOT location. Fill in PLT static relocations.
(elf_i386_vxworks_link_hash_table_create): New function.
(elf_i386_vxworks_link_output_symbol_hook): New function.
* elf-vxworks.h: New file.
gas/
* config/tc-i386.h (ELF_TARGET_FORMAT): Define for TE_VXWORKS.
gas/testsuite/
* gas/i386/i386.exp: Don't run divide test on vxworks.
ld/
* Makefile.am: Add eelf_i386_vxworks.
* Makefile.in: Regenerate.
* configure.tgt: Make i?86-*-vxworks use targ_emul=elf_i386_vxworks.
* emulparams/elf_i386_vxworks.sh: New file.
* emulparams/vxworks.sh: New file.
* scripttempl/elf.sc: Add DATA_END_SYMBOLS and ETEXT_NAME.
gas/testsuite/
* lib/gas-defs.exp (regexp_diff): Pass test if last line is "#...".
ld/testsuite/
* lib/ld-lib.exp (regexp_diff): Pass test if last line is "#...".
* ld-elfweak/elfweak.exp: Run size2.d.
* ld-elfwaek/size2.d: New file.
* ld-elfwaek/size2a.s: New file.
* ld-elfwaek/size2b.s: New file.
* emultempl/elf32.em (gld${EMULATION_NAME}_provide_bound_symbols):
Use the first SEC_ALLOC section which isn't SEC_READONLY or the
last SEC_ALLOC section if such a section doesn't exist.
* bfd/bfd-in2.h: Regenerate.
* bfd/elf32-arm.c (elf32_arm_link_hash_table): New field, 'use_blx'.
(elf32_arm_link_hash_table_create): Initialise fix_v4bx, use_blx.
(bfd_elf32_arm_set_target_relocs): Handle use_blx.
(elf32_arm_final_link_relocate): Use Thumb BLX for R_ARM_THM_PC22
relocations if requested to.
(allocate_dynrelocs): Don't count size of omitted Thumb stubs based on
use_blx rather than symbian_p.
(elf32_arm_finish_dynamic_symbol): Don't output Thumb PLT stubs if
use_blx is in effect.
(elf32_arm_symbian_link_hash_table_create): Enable use_blx by default
for SymbianOS.
* ld/ld.texinfo: Document --use-blx.
* ld/emultempl/armelf.em (use_blx): New variable.
(arm_elf_create_output_section_statements): Communicate value of
use_blx to bfd.
(PARSE_AND_LIST_PROLOGUE): Add OPTION_USE_BLX.
(PARSE_AND_LIST_OPTIONS): Add --use-blx option.
(PARSE_AND_LIST_ARGS_CASES): Add OPTION_USE_BLX case.
bfd/
Add TLS support for 64-bit Sparc ELF.
* elf64-sparc.c (sparc64_elf_dyn_relocs,
sparc64_elf_link_hash_entry, sparc64_elf_obj_tdata): New structs.
(GOT_UNKNOWN, GOT_NORMAL, GOT_TLD_GD, GOT_TLD_IE,
sparc64_elf_hash_entry, sparc64_elf_tdata,
sparc64_elf_local_got_tls_type): New defines.
(sparc64_elf_mkobject): New function.
(sparc64_elf_link_hash_table): Add members for dynamic linker
sections PLT, RELPLT, DYNBSS, and RELBSS. Add tls_ldm_got
uion to track TLS GOT references. Add sym_sec to cache
mappings from local sym to section.
(link_hash_newfunc): New function.
(sparc64_elf_bfd_link_hash_table_create): Rename to
sparc64_elf_link_hash_table_create for consistency.
Pass link_hash_newfunc to _bfd_elf_link_hash_table_init.
(sparc64_elf_create_dynamic_sections): Initialize new section
members of sparc64_elf_link_hash_table. Only init srelbss
if not-shared.
(sparc64_elf_copy_indirect_symbol, sparc64_elf_tls_transition):
New functions.
(SPARC_NOP): Define.
(sparc64_elf_build_plt, sparc64_elf_plt_entry_offset,
sparc64_elf_plt_ptr_offset): Delete.
(sparc64_plt_entry_build): New function to build PLT entries
gradually instread of all at once at the end of linking.
(sparc64_elf_check_relocs): Delete dynobj, sgot, and srelgot
local vars. Get them from sparc64_elf_hash_table instead.
Check early on if r_symndx is in bounds. Handle TLS transitions.
Account for TLS GOT references and DF_STATIC_TLS, as needed.
For TLS relocs, record the tls_type in either
sparc64_elf_local_got_tls_type or sparc64_elf_hash_entry as
appropriate. For R_SPARC_TLS_{GD,LDM}_CALL, emit a reference
to the __tls_get_addr symbol. For PLT relocs, track references
via h->plt.refcount. When R_SPARC_{PC10,PC22,PC_HH22,PC_HM10,
PC_LM22} and h not-NULL, set h->non_got_ref. For global data
symbol references, count the number of relocations needed for
that symbol. For default switch case, don't error, this lets
the TLS relocs not explicitly handled by this function get
accepted.
(sparc64_elf_gc_mark_hook, sparc64_gc_sweep_hook): New functions.
(sparc64_elf_adjust_dynamic_symbol): Remove dynobj local var, get
it from sparc64_elf_hash_table. Store the real PLT offset
in h->plt.offset, and build PLT entries one at a time. Also
get .dynbss section pointer from htab.
(allocate_dynrelocs, readonly_dynrelocs,
sparc64_omit_section_dynsym): New functions.
(sparc64_elf_omit_section_dynsym): Use these new functions as
helpers.
(dtpoff_base, tpoff): New functions.
(sparc64_elf_relocate_section): Kill dynobj, sgot, and splt
locals, get them from sparc64_elf_hash_table. Handle TLS
relocations and refcounting in main relocation loop.
(sparc64_elf_finish_dynamic_symbol): Use
sparc64_elf_link_hash_table. Build PLT entries as we see
them. Handle TLS GOT relocations.
(sparc64_elf_finish_dynamic_sections): Get sgot and dynobj
from sparc64_elf_hash_table. Initialize only PLT header
not all entries since we not build PLT entries one by one.
(elf_backend_copy_indirect_symbol, bfd_elf64_mkobject,
elf_backend_gc_mark_hook, elf_backend_gc_sweep_hook,
elf_backend_can_gc_sections, elf_backend_can_refcount): Define.
ld/testsuite/
* ld-selective/sel-dump.exp: Do not exclude sparc64-*.
* ld-selective/selective.exp: Likewise.
* ld-sparc/sparc.exp: Add {32,64}-bit prefix to test
names so we know which one is failing. Run sparc64 TLS
tests on multi-arch sparc platforms.
* ld-sparc/tls64.sd, ld-sparc/tlssunbin64.dd,
ld-sparc/tlssunbin64.rd, ld/testsuite/ld-sparc/tlssunbin64.sd,
ld-sparc/tlssunbin64.td, ld-sparc/tlssunnopic64.dd,
ld-sparc/tlssunnopic64.rd, ld-sparc/tlssunnopic64.sd,
ld-sparc/tlssunpic64.dd, ld-sparc/tlssunpic64.rd,
ld-sparc/tlssunpic64.sd, ld-sparc/tlssunpic64.td): Update now
that sparc64 ELF does support TLS.
* elf32-sparc.c (elf32_sparc_relocate_section,
R_SPARC_TLS_LDO_{HIX22,LOX10}): When not shared, transition to
R_SPARC_TLS_LE_{HIX22,LOX10}.
(elf32_sparc_relocate_section, R_SPARC_TLS_{LDO,LE}_HIX22): Only
xor relocation with 0xffffffff if R_SPARC_TLS_LE_HIX22.
(elf32_sparc_relocate_section, R_SPARC_TLS_{LDO,LE}_LOX10): Only
or 0x1c00 into relocation if R_SPARC_TLS_LE_HIX22.
* ld-sparc/tlssunbin32.dd: Update for TLS relocation fixes.
* ld-sparc/tlssunbin32.rd: Likewise.
* ld-sparc/tlssunbin32.sd: Likewise.
* ld-sparc/tlssunpic32.dd: Likewise.