diff options
author | Kazu Hirata <kazu@codesourcery.com> | 2000-11-16 00:54:12 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@codesourcery.com> | 2000-11-16 00:54:12 +0000 |
commit | cbfe05c4c649f887c078c9b7268e4484fbe5d45c (patch) | |
tree | d6a50340bc1131cfa25eb1900132fce2719e360d /bfd/coff-w65.c | |
parent | d34802440cbfa90c30602e62e18100c81427ea86 (diff) | |
download | gdb-cbfe05c4c649f887c078c9b7268e4484fbe5d45c.zip gdb-cbfe05c4c649f887c078c9b7268e4484fbe5d45c.tar.gz gdb-cbfe05c4c649f887c078c9b7268e4484fbe5d45c.tar.bz2 |
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.c | 59 |
1 files changed, 22 insertions, 37 deletions
diff --git a/bfd/coff-w65.c b/bfd/coff-w65.c index c82d4d7..ef60416 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 \ |