2001-01-01 Kazu Hirata <kazu@hxi.com>
* reloc.c: Fix formatting. * riscix.c: Likewise. * rs6000-core.c: Likewise. * xcoff-target.h: Likewise.
This commit is contained in:
parent
7dc542b23c
commit
3d85563291
5 changed files with 76 additions and 99 deletions
|
@ -1,3 +1,10 @@
|
|||
2001-01-01 Kazu Hirata <kazu@hxi.com>
|
||||
|
||||
* reloc.c: Fix formatting.
|
||||
* riscix.c: Likewise.
|
||||
* rs6000-core.c: Likewise.
|
||||
* xcoff-target.h: Likewise.
|
||||
|
||||
2000-12-29 Hans-Peter Nilsson <hp@bitrange.com>
|
||||
|
||||
* elfcode.h (elf_object_p): Also restore the bfd mach field on
|
||||
|
|
20
bfd/reloc.c
20
bfd/reloc.c
|
@ -146,7 +146,6 @@ DESCRIPTION
|
|||
to the relocation offset. Its interpretation is dependent upon
|
||||
the howto. For example, on the 68k the code:
|
||||
|
||||
|
||||
| char foo[];
|
||||
| main()
|
||||
| {
|
||||
|
@ -161,11 +160,9 @@ DESCRIPTION
|
|||
| unlk fp
|
||||
| rts
|
||||
|
||||
|
||||
This could create a reloc pointing to <<foo>>, but leave the
|
||||
offset in the data, something like:
|
||||
|
||||
|
||||
|RELOCATION RECORDS FOR [.text]:
|
||||
|offset type value
|
||||
|00000006 32 _foo
|
||||
|
@ -176,21 +173,17 @@ DESCRIPTION
|
|||
|0000000c 4e5e ; unlk fp
|
||||
|0000000e 4e75 ; rts
|
||||
|
||||
|
||||
Using coff and an 88k, some instructions don't have enough
|
||||
space in them to represent the full address range, and
|
||||
pointers have to be loaded in two parts. So you'd get something like:
|
||||
|
||||
|
||||
| or.u r13,r0,hi16(_foo+0x12345678)
|
||||
| ld.b r2,r13,lo16(_foo+0x12345678)
|
||||
| jmp r1
|
||||
|
||||
|
||||
This should create two relocs, both pointing to <<_foo>>, and with
|
||||
0x12340000 in their addend field. The data would consist of:
|
||||
|
||||
|
||||
|RELOCATION RECORDS FOR [.text]:
|
||||
|offset type value
|
||||
|00000002 HVRT16 _foo+0x12340000
|
||||
|
@ -200,7 +193,6 @@ DESCRIPTION
|
|||
|00000004 1c4d5678 ; ld.b r2,r13,0x5678
|
||||
|00000008 f400c001 ; jmp r1
|
||||
|
||||
|
||||
The relocation routine digs out the value from the data, adds
|
||||
it to the addend to get the original offset, and then adds the
|
||||
value of <<_foo>>. Note that all 32 bits have to be kept around
|
||||
|
@ -223,7 +215,6 @@ DESCRIPTION
|
|||
Both relocs contain a pointer to <<foo>>, and the offsets
|
||||
contain junk.
|
||||
|
||||
|
||||
|RELOCATION RECORDS FOR [.text]:
|
||||
|offset type value
|
||||
|00000004 HI22 _foo+0x12345678
|
||||
|
@ -235,7 +226,6 @@ DESCRIPTION
|
|||
|0000000c 81c7e008 ; ret
|
||||
|00000010 81e80000 ; restore
|
||||
|
||||
|
||||
o <<howto>>
|
||||
|
||||
The <<howto>> field can be imagined as a
|
||||
|
@ -391,7 +381,6 @@ FUNCTION
|
|||
DESCRIPTION
|
||||
The HOWTO define is horrible and will go away.
|
||||
|
||||
|
||||
.#define HOWTO(C, R,S,B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
|
||||
. {(unsigned)C,R,S,B, P, BI, O,SF,NAME,INPLACE,MASKSRC,MASKDST,PC}
|
||||
|
||||
|
@ -399,7 +388,6 @@ DESCRIPTION
|
|||
And will be replaced with the totally magic way. But for the
|
||||
moment, we are compatible, so do it this way.
|
||||
|
||||
|
||||
.#define NEWHOWTO( FUNCTION, NAME,SIZE,REL,IN) HOWTO(0,0,SIZE,0,REL,0,complain_overflow_dont,FUNCTION, NAME,false,0,0,IN)
|
||||
.
|
||||
|
||||
|
@ -589,7 +577,6 @@ DESCRIPTION
|
|||
|
||||
*/
|
||||
|
||||
|
||||
bfd_reloc_status_type
|
||||
bfd_perform_relocation (abfd, reloc_entry, data, input_section, output_bfd,
|
||||
error_message)
|
||||
|
@ -651,7 +638,6 @@ bfd_perform_relocation (abfd, reloc_entry, data, input_section, output_bfd,
|
|||
else
|
||||
relocation = symbol->value;
|
||||
|
||||
|
||||
reloc_target_output_section = symbol->section->output_section;
|
||||
|
||||
/* Convert input-section-relative symbol value to absolute. */
|
||||
|
@ -990,7 +976,6 @@ DESCRIPTION
|
|||
|
||||
*/
|
||||
|
||||
|
||||
bfd_reloc_status_type
|
||||
bfd_install_relocation (abfd, reloc_entry, data_start, data_start_offset,
|
||||
input_section, error_message)
|
||||
|
@ -1780,7 +1765,6 @@ displacements off that register. These relocation types are
|
|||
handled specially, because the value the register will have is
|
||||
decided relatively late.
|
||||
|
||||
|
||||
ENUM
|
||||
BFD_RELOC_I960_CALLJ
|
||||
ENUMDOC
|
||||
|
@ -3009,7 +2993,6 @@ CODE_FRAGMENT
|
|||
.typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
FUNCTION
|
||||
bfd_reloc_type_lookup
|
||||
|
@ -3025,7 +3008,6 @@ DESCRIPTION
|
|||
|
||||
*/
|
||||
|
||||
|
||||
reloc_howto_type *
|
||||
bfd_reloc_type_lookup (abfd, code)
|
||||
bfd *abfd;
|
||||
|
@ -3037,7 +3019,6 @@ bfd_reloc_type_lookup (abfd, code)
|
|||
static reloc_howto_type bfd_howto_32 =
|
||||
HOWTO (0, 00, 2, 32, false, 0, complain_overflow_bitfield, 0, "VRT32", false, 0xffffffff, 0xffffffff, true);
|
||||
|
||||
|
||||
/*
|
||||
INTERNAL_FUNCTION
|
||||
bfd_default_reloc_type_lookup
|
||||
|
@ -3049,7 +3030,6 @@ SYNOPSIS
|
|||
DESCRIPTION
|
||||
Provides a default relocation lookup routine for any architecture.
|
||||
|
||||
|
||||
*/
|
||||
|
||||
reloc_howto_type *
|
||||
|
|
25
bfd/riscix.c
25
bfd/riscix.c
|
@ -19,7 +19,6 @@ You should have received a copy of the GNU General Public License
|
|||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
|
||||
/* RISC iX overloads the MAGIC field to indicate more than just the usual
|
||||
[ZNO]MAGIC values. Also included are squeezing information and
|
||||
shared library usage. */
|
||||
|
@ -116,20 +115,20 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||
if (bfd_get_outsymbols (abfd) != (asymbol **) NULL \
|
||||
&& bfd_get_symcount (abfd) != 0) \
|
||||
{ \
|
||||
if (bfd_seek (abfd, (file_ptr)(N_SYMOFF(*execp)), SEEK_SET) != 0) \
|
||||
if (bfd_seek (abfd, (file_ptr) (N_SYMOFF(*execp)), SEEK_SET) != 0) \
|
||||
return false; \
|
||||
\
|
||||
if (! NAME(aout,write_syms)(abfd)) return false; \
|
||||
if (! NAME(aout,write_syms) (abfd)) return false; \
|
||||
\
|
||||
if (bfd_seek (abfd, (file_ptr)(N_TRELOFF(*execp)), SEEK_SET) != 0) \
|
||||
if (bfd_seek (abfd, (file_ptr) (N_TRELOFF(*execp)), SEEK_SET) != 0) \
|
||||
return false; \
|
||||
\
|
||||
if (! riscix_squirt_out_relocs (abfd, obj_textsec (abfd))) \
|
||||
return false; \
|
||||
if (bfd_seek (abfd, (file_ptr)(N_DRELOFF(*execp)), SEEK_SET) != 0) \
|
||||
if (bfd_seek (abfd, (file_ptr) (N_DRELOFF(*execp)), SEEK_SET) != 0) \
|
||||
return false; \
|
||||
\
|
||||
if (!NAME(aout,squirt_out_relocs)(abfd, obj_datasec (abfd))) \
|
||||
if (!NAME(aout,squirt_out_relocs) (abfd, obj_datasec (abfd))) \
|
||||
return false; \
|
||||
} \
|
||||
}
|
||||
|
@ -163,7 +162,6 @@ static reloc_howto_type riscix_std_reloc_howto[] = {
|
|||
#define RISCIX_TABLE_SIZE \
|
||||
(sizeof (riscix_std_reloc_howto) / sizeof (reloc_howto_type))
|
||||
|
||||
|
||||
static bfd_reloc_status_type
|
||||
riscix_fix_pcrel_26_done (abfd, reloc_entry, symbol, data, input_section,
|
||||
output_bfd, error_message)
|
||||
|
@ -308,7 +306,6 @@ riscix_swap_std_reloc_out (abfd, g, natptr)
|
|||
if (r_length == 3)
|
||||
r_pcrel = r_pcrel ? 0 : 1;
|
||||
|
||||
|
||||
#if 0
|
||||
/* For a standard reloc, the addend is in the object file. */
|
||||
r_addend = g->addend + (*(g->sym_ptr_ptr))->section->output_section->vma;
|
||||
|
@ -412,13 +409,12 @@ riscix_squirt_out_relocs (abfd, section)
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* This is just like the standard aoutx.h version but we need to do our
|
||||
* own mapping of external reloc type values to howto entries.
|
||||
*/
|
||||
long
|
||||
MY(canonicalize_reloc)(abfd, section, relptr, symbols)
|
||||
MY(canonicalize_reloc) (abfd, section, relptr, symbols)
|
||||
bfd *abfd;
|
||||
sec_ptr section;
|
||||
arelent **relptr;
|
||||
|
@ -446,7 +442,7 @@ MY(canonicalize_reloc)(abfd, section, relptr, symbols)
|
|||
return section->reloc_count;
|
||||
}
|
||||
|
||||
if (!NAME(aout,slurp_reloc_table)(abfd, section, symbols))
|
||||
if (!NAME(aout,slurp_reloc_table) (abfd, section, symbols))
|
||||
return -1;
|
||||
tblptr = section->relocation;
|
||||
|
||||
|
@ -506,7 +502,6 @@ riscix_some_aout_object_p (abfd, execp, callback_to_real_object_p)
|
|||
if (N_DYNAMIC(*execp))
|
||||
abfd->flags |= DYNAMIC;
|
||||
|
||||
|
||||
if ((execp->a_info & MF_SQUEEZED) != 0) /* Squeezed files aren't supported
|
||||
(yet)! */
|
||||
{
|
||||
|
@ -568,7 +563,7 @@ riscix_some_aout_object_p (abfd, execp, callback_to_real_object_p)
|
|||
: (SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS));
|
||||
obj_bsssec (abfd)->flags = SEC_ALLOC;
|
||||
|
||||
result = (*callback_to_real_object_p)(abfd);
|
||||
result = (*callback_to_real_object_p) (abfd);
|
||||
|
||||
#if defined(MACH) || defined(STAT_FOR_EXEC)
|
||||
/* The original heuristic doesn't work in some important cases. The
|
||||
|
@ -611,7 +606,6 @@ riscix_some_aout_object_p (abfd, execp, callback_to_real_object_p)
|
|||
return result;
|
||||
}
|
||||
|
||||
|
||||
static const bfd_target *
|
||||
MY(object_p) (abfd)
|
||||
bfd *abfd;
|
||||
|
@ -634,12 +628,11 @@ MY(object_p) (abfd)
|
|||
if (!(MACHTYPE_OK (N_MACHTYPE (exec)))) return 0;
|
||||
#endif
|
||||
|
||||
NAME(aout,swap_exec_header_in)(abfd, &exec_bytes, &exec);
|
||||
NAME(aout,swap_exec_header_in) (abfd, &exec_bytes, &exec);
|
||||
|
||||
target = riscix_some_aout_object_p (abfd, &exec, MY(callback));
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
|
||||
#include "aout-target.h"
|
||||
|
|
|
@ -60,7 +60,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||
|
||||
#undef SCNHDR
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Support for core file stuff.. */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
@ -538,9 +537,9 @@ rs6000coff_core_p (abfd)
|
|||
|
||||
/* .data sections from loaded objects. */
|
||||
if (proc64)
|
||||
size = (int)((LdInfo *)0)->l64.ldinfo_filename;
|
||||
size = (int) ((LdInfo *)0)->l64.ldinfo_filename;
|
||||
else
|
||||
size = (int)((LdInfo *)0)->l32.ldinfo_filename;
|
||||
size = (int) ((LdInfo *)0)->l32.ldinfo_filename;
|
||||
|
||||
while (1)
|
||||
{
|
||||
|
@ -560,7 +559,7 @@ rs6000coff_core_p (abfd)
|
|||
{
|
||||
ldi_core = ldinfo.l32.ldinfo_core;
|
||||
ldi_datasize = ldinfo.l32.ldinfo_datasize;
|
||||
ldi_dataorg = (bfd_vma)(long) ldinfo.l32.ldinfo_dataorg;
|
||||
ldi_dataorg = (bfd_vma) (long) ldinfo.l32.ldinfo_dataorg;
|
||||
ldi_next = ldinfo.l32.ldinfo_next;
|
||||
}
|
||||
|
||||
|
@ -602,7 +601,7 @@ rs6000coff_core_p (abfd)
|
|||
}
|
||||
else
|
||||
{
|
||||
vminfo_addr = (bfd_vma)(long) vminfo.old.vminfo_addr;
|
||||
vminfo_addr = (bfd_vma) (long) vminfo.old.vminfo_addr;
|
||||
vminfo_size = vminfo.old.vminfo_size;
|
||||
vminfo_offset = vminfo.old.vminfo_offset;
|
||||
}
|
||||
|
@ -621,8 +620,6 @@ rs6000coff_core_p (abfd)
|
|||
return abfd->xvec; /* this is garbage for now. */
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* return `true' if given core is from the given executable.. */
|
||||
boolean
|
||||
rs6000coff_core_file_matches_executable_p (core_bfd, exec_bfd)
|
||||
|
@ -646,9 +643,9 @@ rs6000coff_core_file_matches_executable_p (core_bfd, exec_bfd)
|
|||
c_loader = (file_ptr) COLD_LOADER (core.old);
|
||||
|
||||
if (CORE_NEW (core) && CNEW_PROC64 (core.new))
|
||||
size = (int)((LdInfo *)0)->l64.ldinfo_filename;
|
||||
size = (int) ((LdInfo *)0)->l64.ldinfo_filename;
|
||||
else
|
||||
size = (int)((LdInfo *)0)->l32.ldinfo_filename;
|
||||
size = (int) ((LdInfo *)0)->l32.ldinfo_filename;
|
||||
|
||||
if (bfd_seek (core_bfd, c_loader + size, SEEK_SET) != 0)
|
||||
return false;
|
||||
|
|
Loading…
Reference in a new issue