This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Puzzle:Is addend ok when handling relocations in linking mips32-elf
- From: "Amker.Cheng" <amker dot cheng at gmail dot com>
- To: binutils at sourceware dot org
- Date: Mon, 9 Mar 2009 19:11:45 +0800
- Subject: Puzzle:Is addend ok when handling relocations in linking mips32-elf
Hi All:
I'm studying mips-elf relocation process in gnu ld and puzzled about
following codes.
In mips-elf relocation function for ld which is
"_bfd_mips_elf_relocate_section",
the addend is calculated some kind like:
STEP 1 : addend = mips_elf_obtain_contents (howto, rel, input_bfd,
contents);
STEP 2 : addend &= howto->src_mask;
STEP 3 : addend <<= howto->rightshift;
STEP 4 : mips_elf_calculate_relocation (output_bfd, input_bfd,
input_section, info, rel,
addend, howto, local_syms,
local_sections, &value,
&name, &require_jalx,
use_saved_addend_p)
It seems that above code doesn't take howto->bitpos into consider.
For now most howto structs in elf32-mips.c set howto->bitpos to 0,
except R_MIPS_SHIFT5 and R_MIPS_SHIFT6.
I searched source codes and found that R_MIPS_SHIFT5 and R_MIPS_SHIFT6
are not used currently.
here comes the problem, If i have a howto structure with nonzero bitpos,
I think addend will be wrong and should be right shift with howto->bitpos.
Right or I just missed something important?
Thanks and any tips will be appreciated.
Regards.