This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: [PATCH] MIPS gas/bfd: Relocation handling cleanup
- From: Thiemo Seufer <ica2_ts at csv dot ica dot uni-stuttgart dot de>
- To: binutils at sources dot redhat dot com
- Cc: Eric Christopher <echristo at redhat dot com>
- Date: Tue, 10 Jun 2003 14:21:09 +0200
- Subject: Re: [PATCH] MIPS gas/bfd: Relocation handling cleanup
- References: <20030527063742.GD18653@rembrandt.csv.ica.uni-stuttgart.de>
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