2005-05-01 Paul Brook * bfd/elflink.c (_bfd_elf_merge_symbol): Skip weak definitions if a strong definition has already been seen. 2005-05-01 Paul Brook * bfd/elf32-arm.c (bfd_elf32_arm_process_before_allocation): Treat R_ARM_PLT32 the same as R_ARM_PC24. (arm_add_to_rel): Ditto. 2005-05-01 Zack Weinberg * gas/config/tc-arm.c (thumb32_mode): Rename unified_syntax. All uses changed to match. (COND_ALWAYS): Don't offset. (COND_MASK): Delete. (struct arm_it): Add cond field. (struct asm_opcode): Add tag field. Change some fields to unsigned int and/or to bitfields. (my_get_expression): If unified_syntax, always treat the prefix as optional. (s_thumb32, s_thumb32_func): Delete. (opcode_select, s_force_thumb): Don't set thumb32_mode. (s_syntax): New function. (md_pseudo_table): Update to match. (do_blx, do_iwmmxt_wldstw): Look at inst.cond, not inst.instruction, for the condition. (do_it): New function. (do_t_branch): Get the condition from inst.cond and patch it into the appropriate place. (output_inst): If inst.size == 0, output nothing, but do issue a diagnostic if any. (enum opcode_tag): New set of constants. (opcode_lookup): New function. (md_assemble): Use opcode_lookup. Restructure a little. (conds, OPS0): Adjust comment. (TxCE, TxCM, TUE, TUF): Rewrite. (TCC): Delete. (TxC3, TC3, tC3, TxCM_, C3, C3E): New notational macros. (insns): Use TC3, tC3, or C3, as appropriate, for all instructions where the conditional infix appears after the third letter of the mnemonic. Use TCE for 'b'. Use C3E for 'cmfe' and 'cnfe'. Change 'czbne' to 'cbnz', 'czbeq' to 'cbz'. Use TUE, with a dummy ARM opcode, for all variants of 'it'. * opcodes/arm-dis.c: Change 'czbne' to 'cbnz', 'czbeq' to 'cbz'. * gas/testsuite/gas/arm/thumb.d: bal.n is no longer distinguishable from b.n. * gas/testsuite/gas/arm/thumb32.d: Likewise. Change 'czbne' to 'cbnz', 'czbeq' to 'cbz'. * gas/testsuite/gas/arm/thumb32.s: Use .syntax unified. Change 'czbne' to 'cbnz', 'czbeq' to 'cbz'. 2005-05-01 Zack Weinberg * gas/config/tc-arm.c (encode_thumb32_addr_mode): Set inst.reloc.pc_rel if is_pc. (T16_32_TAB): Delete unused entry for BLX. (do_t_ldst): Don't offset inst.reloc.exp.X_add_number for PC-relative addressing. (md_pcrel_from): Report the adjusted PC for BFD_RELOC_ARM_THUMB_OFFSET and BFD_RELOC_ARM_T32_OFFSET_IMM. (md_apply_fix3): Correct bitmasks for BFD_RELOC_ARM_T32_OFFSET_IMM. Do not round up value for PC-relative BFD_RELOC_ARM_THUMB_OFFSET. * gas/testsuite/gas/arm/thumb.s: Test PC-relative ldr more thoroughly. * gas/testsuite/gas/arm/thumb.d: Update to match. * gas/testsuite/gas/arm/thumb32.s: Properly align labels that will be targeted by blx instructions. * gas/testsuite/gas/arm/thumb32.d: Update to match. Correct expected dissassembly of PC-relative ldr. * gas/testsuite/gas/arm/macro1.s: Add leading label and trailing padding for a.out compatibility. * gas/testsuite/gas/arm/macro1.d: Update to match. * gas/testsuite/gas/arm/tcompat2.s: Add trailing padding for a.out compatibility. * gas/testsuite/gas/arm/tcompat2.d: Update to match. * opcodes/arm-dis.c (print_insn_thumb32): Reorganize %a and %A handling. Call info->print_address_func when %a/%A are applied to a PC-relative instruction. 2005-04-29 Zack Weinberg * gas/sb.c: Include as.h. (sb_to_scrub, scrub_position, scrub_from_sb): New statics. (sb_scrub_and_add_sb): New interface. * gas/sb.h: Declare sb_scrub_and_add_sb. * gas/input-scrub.c (input_scrub_include_sb): Use it. * gas/config/tc-arm.c (do_t_arit3c): Correct typo in expression. (do_t_mul): Allow dest to equal either source1 or source2 in 16-bit form; do not complain about dest == source1 in any case. * gas/testsuite/gas/arm/tcompat2.s: Test both dest==source1 and dest==source2 for commutative arithmetic instructions. * gas/testsuite/gas/arm/tcompat2.d: Update to match. * gas/testsuite/gas/arm/t16-bad.l: Adjust expected diagnostic. * gas/testsuite/gas/arm/macro1.s, gas/arm/macro1.d: New test pair. * gas/testsuite/gas/arm/arm.exp: Run it. 2005-04-25 Zack Weinberg Thumb32 assembler. * include/elf/arm.h: Import full set of relocation names from latest AAELF. Make the primary name of all relocations be the one AAELF specifies. Provide aliases under the traditional names. Kill FIRST_INVALID_RELOC_* and LAST_INVALID_RELOC_*. * bfd/reloc.c: Reorganize ARM relocations. Remove ARM relocations that are never generated. Document more of the relocations. Add relocations for Thumb32. * bfd/libbfd.h, bfd/bfd-in2.h: Regenerate. * bfd/elf32-arm.c: Reorganize howto tables. Implement Thumb32 relocations. * ld/testsuite/ld-arm/mixed-app.d: Adjust expectations for renamed relocations. * gas/hash.c (hash_find_n): New interface. * gas/hash.h: Prototype it. * gas/config/tc-arm.c: Rewrite and reorganize. Implement 32-bit Thumb instructions. * gas/testsuite/gas/arm: Convert all "gas_test" style tests to "run_dump_test" style tests, for more thorough testing. Make adjustments to expectations where necessary. * gas/testsuite/gas/arm/t16-bad.s, gas/testsuite/gas/arm/tcompat.s * gas/testsuite/gas/arm/tcompat2.s, gas/testsuite/gas/arm/thumb32.s: New test cases. * opcodes/arm-dis.c: Add support for Thumb32 instructions and 16-bit V6T2 instructions. 2005-04-13 Paul Brook Backport from mainline. 2005-04-11 Alan Modra * emultempl/elf32.em (gld${EMULATION_NAME}_stat_needed): Ignore as_needed libs that were not needed. (gld${EMULATION_NAME}_check_needed): Likewise. 2005-04-08 Mark Mitchell * ld/configure.tgt (arm-wrs-linux-gnueabi*): Support both big- and little-endian. 2005-04-08 Paul Brook * elf32-arm.c (ARM2THUMB_GLUE_SIZE): Rename... (ARM2THUMB_STATIC_GLUE_SIZE): ... to this. (ARM2THUMB_PIC_GLUE_SIZE): Define. (a2t1p_ldr_insn, a2t2p_add_pc_insn, a2t3p_bx_r12_insn): Add. (elf32_arm_to_thumb_stub): Create PIC stubs. (record_arm_to_thumb_glue): Use different stub size for relocatable images. 2005-03-29 Julian Brown * elf32-arm.c (elf32_arm_final_link_relocate): Use blx to get to symbian plt entries from thumb mode. 2005-03-28 Daniel Jacobowitz Phil Blundell * bfd/bfd-in2.h, libbfd.h: Regenerated. * bfd/reloc.c: Add ARM TLS relocations. * bfd/elf32-arm.c (elf32_arm_howto_table): Add dynamic TLS relocations. (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): New. (elf32_arm_howto_from_type): Support TLS relocations. (elf32_arm_reloc_map): Likewise. (elf32_arm_reloc_type_lookup): Likewise. (TCB_SIZE): Define. (struct elf32_arm_obj_tdata): New. (elf32_arm_tdata, elf32_arm_local_got_tls_type): Define. (elf32_arm_mkobject): New function. (struct elf32_arm_relocs_copied): Add pc_count. (elf32_arm_hash_entry, GOT_UNKNOWN, GOT_NORMAL, GOT_TLS_GD) (GOT_TLS_IE): Define. (struct elf32_arm_link_hash_table): Add tls_ldm_got. (elf32_arm_link_hash_newfunc): Initialize tls_type. (elf32_arm_copy_indirect_symbol): Copy pc_count and tls_type. (elf32_arm_link_hash_table_create): Initialize tls_ldm_got. (dtpoff_base, tpoff): New functions. (elf32_arm_final_link_relocate): Handle TLS relocations. (IS_ARM_TLS_RELOC): Define. (elf32_arm_relocate_section): Warn about TLS mismatches. (elf32_arm_gc_sweep_hook): Handle TLS relocations and pc_count. (elf32_arm_check_relocs): Detect invalid symbol indexes. Handle TLS relocations and pc_count. (elf32_arm_adjust_dynamic_symbol): Check non_got_ref. (allocate_dynrelocs): Handle TLS. Bind REL32 relocs to local calls. (elf32_arm_size_dynamic_sections): Handle TLS. (elf32_arm_finish_dynamic_symbol): Likewise. (bfd_elf32_mkobject): Define. * gas/config/tc-arm.c (arm_parse_reloc): Add TLS relocations. (md_apply_fix3): Mark TLS symbols. (tc_gen_reloc): Handle TLS relocations. (arm_fix_adjustable): Ignore TLS relocations. (s_arm_elf_cons): Support expressions after decorated symbols. * gas/testsuite/gas/arm/tls.s, gas/testsuite/gas/arm/tls.d: New files. * gas/testsuite/gas/arm/arm.exp: Run TLS test. * include/elf/arm.h: Add TLS relocations. * ld/testsuite/ld-arm/tls-lib.s, ld/testsuite/ld-arm/tls-lib.d, ld/testsuite/ld-arm/tls-lib.r, ld/testsuite/ld-arm/tls-app.s, ld/testsuite/ld-arm/tls-app.d, ld/testsuite/ld-arm/tls-app.r: New files. * ld/testsuite/ld-arm/arm-lib.ld, ld/testsuite/ld-arm/arm-dyn.ld: Increase data segment alignment. * ld/testsuite/ld-arm/arm-elf.exp: Run TLS tests. 2005-03-28 Daniel Jacobowitz * bfd/elf32-arm.c (elf32_arm_check_relocs): Increment count for all relocation types. Don't count relocations which will use a PLT. 2005-03-23 Jim Blandy * config/tc-arm.c (arm_adjust_symtab): Fetch elf_sym's binding attributes properly. 2005-03-21 Nick Clifton * gas/testsuite/gas/arm/iwmmxt.s: Update instructions that use the "never" value in the conditional field to use "le" instead. This is so that the disassembler will disassemble them. * gas/testsuite/gas/arm/iwmmxt.d: Update expected disassemblies. 2005-03-18 Julian Brown * ld/scripttempl/armbpapi.sc (.rel.dyn): Add .rel.init_array, .rel.fini_array. (.rela.dyn): Add .rela.init_array, .rela.fini_array. (SECTIONS): Add .rel.other, .rela.other, .reli.other after PLT relocs. 2005-03-16 Daniel Jacobowitz * gas/configure.tgt: Set emulation for arm-*-eabi*. * gas/config/tc-arm.c (meabi_flags): Check EABI_DEFAULT. * gas/config/te-armeabi.h: New file. * gas/config/te-armlinuxeabi.h (EABI_DEFAULT): Define. * gas/config/te-symbian.h: Include "te-armeabi.h". 2005-03-15 Zack Weinberg * gas/config/tc-arm.c (do_mla): Rename to do_mlas, take second is_mls parameter; do not diagnose Rm==Rd when is_mls. (do_mla, do_mls, five_bit_unsigned_immediate, bfci_lsb_and_width) (do_bfc, do_bfi, do_bfx, do_rbit, do_mov16, do_ldsttv4): New functions. (insns): Add ARMv6T2 instructions: bfc bfi mls movw movt rbit sbfx ubfx ldrht ldrsht ldrsbt strht. (arm_archs): Add V6T2 variants. 2005-03-12 Zack Weinberg * gas/config/tc-arm.c (tinsns): Add ARMv6K instructions sev, wfe, wfi, yield. * opcodes/arm-dis.c (thumb_opcodes): Add ARMv6K instructions nop, sev, wfe, wfi, yield. * gas/testsuite/gas/arm/thumbv6k.d, gas/arm/thumbv6k.s: New dump test. * gas/testsuite/gas/arm/arm.exp: Run it. 2005-03-12 Zack Weinberg * opcodes/arm-dis.c (arm_opcodes): Document %E and %V. Add entries for v6T2 ARM instructions: bfc bfi mls strht ldrht ldrsht ldrsbt movw movt rbit ubfx sbfx. (print_insn_arm): Add support for %E and %V. * include/opcode/arm.h: Adjust comments for ARM_EXT_V4T and ARM_EXT_V5T. Add ARM_EXT_V6T2, ARM_ARCH_V6T2, ARM_ARCH_V6KT2, ARM_ARCH_V6ZT2, and ARM_ARCH_V6ZKT2.