This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] MIPS gas/bfd: Relocation handling cleanup


Thiemo Seufer wrote:
> Hello All,
> 
> this patch sanitizes the MIPS relocation handling, specifically the
> zero-addend workarounds, the pcrel/gprel specialcases and some minor
> fixes for cornercases.
> 
> It enables also sane overflow checking from md_apply_fix3, the current
> version checks the old addend value.
> 
> Tested for mips-linux, mips64-linux, mips-sgi-irix6, mips-elf, mips-ecoff.
> 
> 
> Thiemo
> 
> 
> 2003-05-27  Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
> 
> 	/bfd/ChangeLog
> 	* elf32-mips.c (mips_elf_generic_reloc): New Function.
> 	(elf_mips_howto_table_rel): Use it.
> 	(gprel32_with_gp): Move prototype.
> 	(mips_elf_hi16_reloc): Check for ! BSF_LOCAL instead of zero addend.
> 	Use mips_elf_generic_reloc.
> 	(mips_elf_got16_reloc): Check for ! BSF_LOCAL instead of zero addend.
> 	Code cleanup.
> 	(_bfd_mips_elf32_gprel16_reloc): Check for ! BSF_LOCAL instead of
> 	zero addend.
> 	(mips_elf_gprel32_reloc): Likewise. Use the same GP assignment logic
> 	as in the other *_gprel*_reloc functions.
> 	(gprel32_with_gp): Handle partial_inplace properly.
> 	(mips32_64bit_reloc): Use mips_elf_generic_reloc.
> 	(mips16_gprel_reloc): Check for ! BSF_LOCAL instead of zero addend.
> 	Do addend handling directly instead of calling
> 	_bfd_mips_elf_gprel16_with_gp. Handle partial_inplace properly.
> 	* elf64-mips.c (mips_elf64_hi16_reloc): Check for ! BSF_LOCAL instead
> 	of zero addend. Handle partial_inplace properly.
> 	(mips_elf64_got16_reloc): Check for ! BSF_LOCAL instead of zero
> 	addend.
> 	(mips_elf64_gprel16_reloc): Likewise.
> 	(mips_elf64_literal_reloc): Likewise.
> 	(mips_elf64_gprel32_reloc): Likewise. Use the same GP assignment
> 	logic as in the other *_gprel*_reloc functions. Handle
> 	partial_inplace properly.
> 	(mips_elf64_shift6_reloc): Check for ! BSF_LOCAL instead of zero
> 	addend. Handle partial_inplace properly.
> 	(mips16_gprel_reloc): Likewise. Do addend handling directly instead
> 	of calling _bfd_mips_elf_gprel16_with_gp.
> 	* elfn32-mips.c (mips_elf_got16_reloc): Check for BSF_LOCAL.
> 	(mips_elf_gprel32_reloc): Check for ! BSF_LOCAL instead
> 	of zero addend.
> 	(mips_elf_shift6_reloc): Handle partial_inplace properly.
> 	(mips16_gprel_reloc): Likewise. Do addend handling directly instead
> 	of calling _bfd_mips_elf_gprel16_with_gp.
> 	* elfxx-mips.c (_bfd_mips_elf_gprel16_with_gp): Handle
> 	partial_inplace properly. Fix wrong addend handling. Fix overflow
> 	check.
> 	(_bfd_mips_elf_sign_extend): Renamed from mips_elf_sign_extend and
> 	exported.
> 	(mips_elf_calculate_relocation): Use _bfd_mips_elf_sign_extend.
> 	(_bfd_mips_elf_relocate_section): Likewise.
> 	(mips_elf_create_dynamic_relocation): Update sec_info_type access.
> 	* elfxx-mips.h (_bfd_mips_relax_section): Fix prototype declaration.
> 	(_bfd_mips_elf_sign_extend): New prototype.
> 
> 	/gas/ChangeLog
> 	* config/tc-mips.c (md_pcrel_from): Return actual pcrel address.
> 	(md_apply_fix3): Ignore non-special relocations. Remove superfluous
> 	exceptions from size assert. Remove most of the addend fixup
> 	specialcasing. Remove value, use valP directly. simplify fx_addnumber
> 	handling. Remove zero addend specialcases.
> 	(tc_gen_reloc): Use appropriate value for reloc2 addend. Remove
> 	the addend fixup specialcase.
> 	* config/tc-mips.h (MD_APPLY_SYM_VALUE): Define as 0.

Ping?


Thiemo


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]