summaryrefslogtreecommitdiff
path: root/bfd/coff-w65.c
diff options
context:
space:
mode:
authorKazu Hirata <kazu@codesourcery.com>2000-11-16 00:54:12 +0000
committerKazu Hirata <kazu@codesourcery.com>2000-11-16 00:54:12 +0000
commit5c15e31e004995a123c5160d3a999ddb590aa21e (patch)
tree19fcc8e0f38923ece00b1da97077004567f7f79c /bfd/coff-w65.c
parent3d4a6d3fa24114588748bdd434bcbfd4d05097ab (diff)
downloadbinutils-redhat-5c15e31e004995a123c5160d3a999ddb590aa21e.tar.gz
2000-11-15 Kazu Hirata <kazu@hxi.com>
* coff-rs6000.c: Fix formatting. * coff-sh.c: Likewise. * coff-sparc.c: Likewise. * coff-tic30.c: Likewise. * coff-tic54x.c: Likewise. * coff-tic80.c: Likewise. * coff-w65.c: Likewise. * coff-we32k.c: Likewise. * coff-z8k.c: Likewise.
Diffstat (limited to 'bfd/coff-w65.c')
-rw-r--r--bfd/coff-w65.c59
1 files changed, 22 insertions, 37 deletions
diff --git a/bfd/coff-w65.c b/bfd/coff-w65.c
index c82d4d7844..ef604164a2 100644
--- a/bfd/coff-w65.c
+++ b/bfd/coff-w65.c
@@ -42,7 +42,6 @@ static reloc_howto_type howto_table[] =
};
-
/* Turn a howto into a reloc number */
#define SELECT_RELOC(x,howto) \
@@ -52,7 +51,6 @@ static reloc_howto_type howto_table[] =
#define W65 1 /* Customize coffcode.h */
#define __A_MAGIC_SET__
-
/* Code to swap in the reloc */
#define SWAP_IN_RELOC_OFFSET bfd_h_get_32
#define SWAP_OUT_RELOC_OFFSET bfd_h_put_32
@@ -60,7 +58,6 @@ static reloc_howto_type howto_table[] =
dst->r_stuff[0] = 'S'; \
dst->r_stuff[1] = 'C';
-
static int
select_reloc (howto)
reloc_howto_type *howto;
@@ -81,14 +78,11 @@ rtype2howto (internal, dst)
#define RTYPE2HOWTO(internal, relocentry) rtype2howto(internal,relocentry)
-
/* Perform any necessary magic to the addend in a reloc entry */
-
#define CALC_ADDEND(abfd, symbol, ext_reloc, cache_ptr) \
cache_ptr->addend = ext_reloc.r_offset;
-
#define RELOC_PROCESSING(relent,reloc,symbols,abfd,section) \
reloc_processing(relent, reloc, symbols, abfd, section)
@@ -112,15 +106,12 @@ reloc_processing (relent, reloc, symbols, abfd, section)
relent->sym_ptr_ptr = (asymbol **)&(bfd_abs_symbol);
}
-
-
relent->addend = reloc->r_offset;
relent->address -= section->vma;
/* relent->section = 0;*/
}
-
static int
h8300_reloc16_estimate(abfd, input_section, reloc, shrink, link_info)
bfd *abfd;
@@ -129,11 +120,11 @@ h8300_reloc16_estimate(abfd, input_section, reloc, shrink, link_info)
unsigned int shrink;
struct bfd_link_info *link_info;
{
- bfd_vma value;
+ bfd_vma value;
bfd_vma dot;
bfd_vma gap;
- /* The address of the thing to be relocated will have moved back by
+ /* The address of the thing to be relocated will have moved back by
the size of the shrink - but we don't change reloc->address here,
since we need it to know where the relocation lives in the source
uncooked section */
@@ -141,10 +132,9 @@ h8300_reloc16_estimate(abfd, input_section, reloc, shrink, link_info)
/* reloc->address -= shrink; conceptual */
bfd_vma address = reloc->address - shrink;
-
switch (reloc->howto->type)
- {
+ {
case R_MOV16B2:
case R_JMP2:
shrink+=2;
@@ -155,40 +145,40 @@ h8300_reloc16_estimate(abfd, input_section, reloc, shrink, link_info)
value = bfd_coff_reloc16_get_value(reloc, link_info, input_section);
if (value >= 0xff00)
- {
+ {
/* Change the reloc type from 16bit, possible 8 to 8bit
possible 16 */
- reloc->howto = reloc->howto + 1;
+ reloc->howto = reloc->howto + 1;
/* The place to relc moves back by one */
/* This will be two bytes smaller in the long run */
shrink +=2 ;
bfd_perform_slip(abfd, 2, input_section, address);
- }
+ }
break;
- /* This is the 24 bit branch which could become an 8 bitter,
+ /* This is the 24 bit branch which could become an 8 bitter,
the relocation points to the first byte of the insn, not the
actual data */
case R_JMPL1:
value = bfd_coff_reloc16_get_value(reloc, link_info, input_section);
-
+
dot = input_section->output_section->vma +
input_section->output_offset + address;
-
+
/* See if the address we're looking at within 127 bytes of where
we are, if so then we can use a small branch rather than the
jump we were going to */
gap = value - dot ;
-
+
if (-120 < (long)gap && (long)gap < 120 )
- {
+ {
/* Change the reloc type from 24bit, possible 8 to 8bit
possible 32 */
- reloc->howto = reloc->howto + 1;
+ reloc->howto = reloc->howto + 1;
/* This will be two bytes smaller in the long run */
shrink +=2 ;
bfd_perform_slip(abfd, 2, input_section, address);
@@ -198,23 +188,22 @@ h8300_reloc16_estimate(abfd, input_section, reloc, shrink, link_info)
case R_JMP1:
value = bfd_coff_reloc16_get_value(reloc, link_info, input_section);
-
+
dot = input_section->output_section->vma +
input_section->output_offset + address;
-
+
/* See if the address we're looking at within 127 bytes of where
we are, if so then we can use a small branch rather than the
jump we were going to */
gap = value - (dot - shrink);
-
if (-120 < (long)gap && (long)gap < 120 )
- {
+ {
/* Change the reloc type from 16bit, possible 8 to 8bit
possible 16 */
- reloc->howto = reloc->howto + 1;
+ reloc->howto = reloc->howto + 1;
/* The place to relc moves back by one */
/* This will be two bytes smaller in the long run */
@@ -224,11 +213,9 @@ h8300_reloc16_estimate(abfd, input_section, reloc, shrink, link_info)
break;
}
-
return shrink;
}
-
/* First phase of a relaxing link */
/* Reloc types
@@ -336,8 +323,8 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
{
int gap = bfd_coff_reloc16_get_value (reloc, link_info,
input_section);
- bfd_vma dot = link_order->offset
- + dst_address
+ bfd_vma dot = link_order->offset
+ + dst_address
+ link_order->u.indirect.section->output_section->vma;
gap -= dot + 1;
@@ -346,7 +333,7 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
(link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr),
reloc->howto->name, reloc->addend, input_section->owner,
input_section, reloc->address)))
- abort();
+ abort ();
}
bfd_put_8 (abfd, gap, data + dst_address);
dst_address += 1;
@@ -358,11 +345,10 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
{
bfd_vma gap = bfd_coff_reloc16_get_value (reloc, link_info,
input_section);
- bfd_vma dot = link_order->offset
- + dst_address
+ bfd_vma dot = link_order->offset
+ + dst_address
+ link_order->u.indirect.section->output_section->vma;
-
/* This wraps within the page, so ignore the relativeness, look at the
high part */
if ((gap & 0xf0000) != (dot & 0xf0000)) {
@@ -370,7 +356,7 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
(link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr),
reloc->howto->name, reloc->addend, input_section->owner,
input_section, reloc->address)))
- abort();
+ abort ();
}
gap -= dot + 2;
@@ -394,7 +380,6 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
#include "coffcode.h"
-
#undef coff_bfd_get_relocated_section_contents
#undef coff_bfd_relax_section
#define coff_bfd_get_relocated_section_contents \