Backport ARM patches from HEAD to binutils-csl-arm-2005q1-branch.
	* elf32-arm.c (elf32_arm_check_relocs): Increment count for all
	relocation types.  Don't count relocations which will use a PLT.
	* 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.
	* include/libiberty.h (ffs): Declare.
2005-03-29  Julian Brown  <julian@codesourcery.com>

	* elf32-arm.c (elf32_arm_final_link_relocate): Use blx to get to
	symbian plt entries from thumb mode.
	* gas/config/tc-arm.c (marked_pr_dependency): New bitmap, bit N
	indicates whether personality routine index N has been output for this
	section.
	(mapping_state): tc_segment_info_data now struct not enum.
	(arm_elf_change_section): Likewise, and marked_pr_dependency is now
	handled on section change.
	(create_unwind_entry): Previous code to output dependency removed.
	(s_arm_unwind_fnend): Output dependency if it hasn't been done already
	for this section.
	* gas/config/tc-arm.h (TC_SEGMENT_INFO_TYPE): Redefined as struct
	arm_segment_info_type.
	(arm_segment_info_type): New struct.
	* gas/testsuite/gas/arm/unwind.d: Update expected output.
	* bfd/bfd-in.h (bfd_is_arm_mapping_symbol_name): Add prototype.
	* bfd/bfd-in2.h: Regenerate.
	* bfd/elf32-arm.c (elf32_arm_is_target_special_symbol): Rename call to
	bfd_is_arm_mapping_symbol_name.
	(elf32_arm_output_symbol_hook): Likewise.
	(arm_elf_find_function): Likewise, and include STT_NOTYPE in test for
	mapping symbols.
	(is_arm_mapping_symbol_name): Function moved from here...
	* bfd/cpu-arm.c (bfd_is_arm_mapping_symbol_name): ...to here,
	renamed and made global.
	* gas/config/tc-arm.c (mapping_state): Change documentation in
	function comment to cross-reference spec instead. Change type of
	mapping symbols to BSF_NO_TYPE.
	(arm_adjust_symtab): Don't change type of mapping symbols here.
	* gas/testsuite/gas/arm/mapping.d: Update expected output.
	* ld/testsuite/ld-arm/arm-app-abs32.d: Likewise.
	* ld/testsuite/ld-arm/arm-app.d: Likewise.
	* ld/testsuite/ld-arm/mixed-app.d: Likewise.
2005-04-08  Paul Brook  <paul@codesourcery.com>

	* 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.
	* ld/configure.tgt (arm-wrs-linux-gnueabi*): Support both big- and
	little-endian.
2005-04-13  Paul Brook  <paul@codesourcery.com>

	Backport from mainline.
	2005-04-11  Alan Modra  <amodra@bigpond.net.au>
	* emultempl/elf32.em (gld${EMULATION_NAME}_stat_needed): Ignore
	as_needed libs that were not needed.
	(gld${EMULATION_NAME}_check_needed): Likewise.
	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.
Remove generated documentation and translation files from CVS.
Delete the right files
	* 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-05-01  Zack Weinberg  <zack@codesourcery.com>

	* 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-05-01  Zack Weinberg  <zack@codesourcery.com>

	* 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  Paul Brook  <paul@codesourcery.com>

	* 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  Paul Brook  <paul@codesourcery.com>

	* bfd/elflink.c (_bfd_elf_merge_symbol): Skip weak definitions if a
	strong definition has already been seen.
	* ldlang.c (Scan_for_self_assignment): Check an assignment tree to
	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.
	* elf32-arm.c (elf32_arm_final_link_relocate): Gracefully handle
	the situation where a symbol's section is not known but a section
	relative R_ARM_RELATIVE reloc has to be generated for the Symbian
	OS.