* coff-alpha.c (reloc_nil): New function.

(alpha_howto_table): Use it as special_function to prevent certain relocs from
being adjusted by bfd_perform_relocation.  IGNORE reloc should be
partial_inplace.
(alpha_ecoff_get_relocated_section_contents): Accept a LITERAL reloc on an
"ldl" instruction too.
This commit is contained in:
Ken Raeburn 1994-02-08 20:58:20 +00:00
parent 4dd4933e7c
commit fa965415f5
2 changed files with 31 additions and 9 deletions

View File

@ -1,3 +1,12 @@
Tue Feb 8 15:55:50 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
* coff-alpha.c (reloc_nil): New function.
(alpha_howto_table): Use it as special_function to prevent certain
relocs from being adjusted by bfd_perform_relocation. IGNORE
reloc should be partial_inplace.
(alpha_ecoff_get_relocated_section_contents): Accept a LITERAL
reloc on an "ldl" instruction too.
Tue Feb 8 00:32:28 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
* elf32-hppa.c (CURRENT_STUB_OFFSET, hppa_elf_build_arg_reloc_stub,

View File

@ -1,5 +1,5 @@
/* BFD back-end for ALPHA Extended-Coff files.
Copyright 1993 Free Software Foundation, Inc.
Copyright 1993, 1994 Free Software Foundation, Inc.
Modified from coff-mips.c by Steve Chamberlain <sac@cygnus.com> and
Ian Lance Taylor <ian@cygnus.com>.
@ -111,6 +111,18 @@ static boolean alpha_relocate_section PARAMS ((bfd *, struct bfd_link_info *,
/* How to process the various reloc types. */
static bfd_reloc_status_type
reloc_nil (abfd, reloc, sym, data, sec, output_bfd)
bfd *abfd;
arelent *reloc;
asymbol *sym;
PTR data;
asection *sec;
bfd *output_bfd;
{
return bfd_reloc_ok;
}
/* In case we're on a 32-bit machine, construct a 64-bit "-1" value
from smaller values. Start with zero, widen, *then* decrement. */
#define MINUS_ONE (((bfd_vma)0) - 1)
@ -127,9 +139,9 @@ static reloc_howto_type alpha_howto_table[] =
true, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
0, /* special_function */
reloc_nil, /* special_function */
"IGNORE", /* name */
false, /* partial_inplace */
true, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
true), /* pcrel_offset */
@ -214,7 +226,7 @@ static reloc_howto_type alpha_howto_table[] =
false, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
0, /* special_function */
reloc_nil, /* special_function */
"LITUSE", /* name */
false, /* partial_inplace */
0, /* src_mask */
@ -239,7 +251,7 @@ static reloc_howto_type alpha_howto_table[] =
true, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
0, /* special_function */
reloc_nil, /* special_function */
"GPDISP", /* name */
true, /* partial_inplace */
0xffff, /* src_mask */
@ -827,9 +839,10 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
unsigned long insn;
/* I believe that the LITERAL reloc will only apply to a
ldq instruction, so check my assumption. */
ldq or ldl instruction, so check my assumption. */
insn = bfd_get_32 (input_bfd, data + rel->address);
BFD_ASSERT (((insn >> 26) & 0x3f) == 0x29);
BFD_ASSERT (((insn >> 26) & 0x3f) == 0x29
|| ((insn >> 26) & 0x3f) == 0x28);
rel->addend -= gp;
r = bfd_perform_relocation (input_bfd, rel, data, input_section,
@ -1852,10 +1865,10 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data =
{
/* COFF backend structure. */
{
(void (*) PARAMS ((bfd *,PTR,int,int,PTR))) bfd_void, /* aux_in */
(void (*) PARAMS ((bfd *,PTR,int,int,int,int,PTR))) bfd_void, /* aux_in */
(void (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* sym_in */
(void (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* lineno_in */
(unsigned (*) PARAMS ((bfd *,PTR,int,int,PTR))) bfd_void, /* aux_out */
(unsigned (*) PARAMS ((bfd *,PTR,int,int,int,int,PTR)))bfd_void,/*aux_out*/
(unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* sym_out */
(unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* lineno_out */
(unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* reloc_out */