* elf32-hppa.c (final_link_relocate): For all DP relative relocations,
adjust addil instructions if the symbol has no section.
This commit is contained in:
parent
1e2330ba1f
commit
95d0f04a0b
|
@ -1,3 +1,8 @@
|
||||||
|
2003-01-07 John David Anglin <dave.anglin@nrc.gc.ca>
|
||||||
|
|
||||||
|
* elf32-hppa.c (final_link_relocate): For all DP relative relocations,
|
||||||
|
adjust addil instructions if the symbol has no section.
|
||||||
|
|
||||||
2003-01-07 DJ Delorie <dj@redhat.com>
|
2003-01-07 DJ Delorie <dj@redhat.com>
|
||||||
|
|
||||||
* elf32-xstormy16.c (xstormy16_elf_howto_table): Make REL_12 not
|
* elf32-xstormy16.c (xstormy16_elf_howto_table): Make REL_12 not
|
||||||
|
|
|
@ -3416,15 +3416,14 @@ final_link_relocate (input_section, contents, rel, value, htab, sym_sec, h)
|
||||||
case R_PARISC_DPREL14R:
|
case R_PARISC_DPREL14R:
|
||||||
case R_PARISC_DPREL14F:
|
case R_PARISC_DPREL14F:
|
||||||
/* For all the DP relative relocations, we need to examine the symbol's
|
/* For all the DP relative relocations, we need to examine the symbol's
|
||||||
section. If it's a code section, then "data pointer relative" makes
|
section. If it has no section or if it's a code section, then
|
||||||
no sense. In that case we don't adjust the "value", and for 21 bit
|
"data pointer relative" makes no sense. In that case we don't
|
||||||
addil instructions, we change the source addend register from %dp to
|
adjust the "value", and for 21 bit addil instructions, we change the
|
||||||
%r0. This situation commonly arises when a variable's "constness"
|
source addend register from %dp to %r0. This situation commonly
|
||||||
|
arises for undefined weak symbols and when a variable's "constness"
|
||||||
is declared differently from the way the variable is defined. For
|
is declared differently from the way the variable is defined. For
|
||||||
instance: "extern int foo" with foo defined as "const int foo". */
|
instance: "extern int foo" with foo defined as "const int foo". */
|
||||||
if (sym_sec == NULL)
|
if (sym_sec == NULL || (sym_sec->flags & SEC_CODE) != 0)
|
||||||
break;
|
|
||||||
if ((sym_sec->flags & SEC_CODE) != 0)
|
|
||||||
{
|
{
|
||||||
if ((insn & ((0x3f << 26) | (0x1f << 21)))
|
if ((insn & ((0x3f << 26) | (0x1f << 21)))
|
||||||
== (((int) OP_ADDIL << 26) | (27 << 21)))
|
== (((int) OP_ADDIL << 26) | (27 << 21)))
|
||||||
|
|
Loading…
Reference in New Issue