* elf32-hppa.c (elf32_hppa_bfd_final_link_relocate): Don't mess

with the operands of an R_PARISC_DPREL21L relocation if the insn
        is not "addil <symbol>,%r27".
This commit is contained in:
Jeff Law 1995-06-17 15:43:06 +00:00
parent 018dafca8a
commit 9a6880571c
2 changed files with 12 additions and 2 deletions

View File

@ -1,3 +1,9 @@
Sat Jun 17 09:40:44 1995 Jeff Law (law@snake.cs.utah.edu)
* elf32-hppa.c (elf32_hppa_bfd_final_link_relocate): Don't mess
with the operands of an R_PARISC_DPREL21L relocation if the insn
is not "addil <symbol>,%r27".
Fri Jun 16 15:04:47 1995 Stan Shebs <shebs@andros.cygnus.com> Fri Jun 16 15:04:47 1995 Stan Shebs <shebs@andros.cygnus.com>
* bfd-in.h (NT_subsystem, NT_stack_heap): Declare but don't * bfd-in.h (NT_subsystem, NT_stack_heap): Declare but don't

View File

@ -1300,11 +1300,15 @@ elf32_hppa_bfd_final_link_relocate (howto, input_bfd, output_bfd,
section. If it's a code section, then "data pointer relative" makes section. If it's a code section, then "data pointer relative" makes
no sense. In that case we don't adjust the "value", and for 21 bit no sense. In that case we don't adjust the "value", and for 21 bit
addil instructions, we change the source addend register from %dp to addil instructions, we change the source addend register from %dp to
%r0. */ %r0.
case R_PARISC_DPREL21L: case R_PARISC_DPREL21L:
r_field = e_lrsel; r_field = e_lrsel;
if (sym_sec->flags & SEC_CODE) if (sym_sec->flags & SEC_CODE)
insn &= ~0x03e00000; {
if ((insn & 0xfc) >> 26 == 0xa
&& (insn & 0x03e00000) >> 21 == 0x1b)
insn &= ~0x03e00000;
}
else else
value -= elf32_hppa_hash_table (info)->global_value; value -= elf32_hppa_hash_table (info)->global_value;
goto do_basic_type_1; goto do_basic_type_1;