Puzzle:Is addend ok when handling relocations in linking mips32-elf

Amker.Cheng amker.cheng@gmail.com
Mon Mar 9 11:11:00 GMT 2009


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.



More information about the Binutils mailing list