mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-02-21 10:02:26 +00:00
* Makefile.in: added coff-h8300
* configure.in: now h8 is a coff target * cpu-h8300.c: fix various disassembly problems * libcoff.h: took out some code which has been #0ed for a long time. * targets.c: added h8 coff * coff-a29k.c, coff-i386.c, coff-i960.c, coff-m68k.c, coff-m88k.c added new macro RTYPE2HOWTO to take a load of #ifdefs out of coffcode.h * coffcode.h: Started to change the way machine dependencies are handled, from the nest of #ifdefs to macros defined in the including coff-<foo>.c
This commit is contained in:
parent
a33336a38e
commit
3b4f1a5d05
@ -1,3 +1,21 @@
|
||||
Tue Nov 26 09:10:55 1991 Steve Chamberlain (sac at cygnus.com)
|
||||
|
||||
* Makefile.in: added coff-h8300
|
||||
* configure.in: now h8 is a coff target
|
||||
* cpu-h8300.c: fix various disassembly problems
|
||||
* libcoff.h: took out some code which has been #0ed for a long
|
||||
time.
|
||||
* targets.c: added h8 coff
|
||||
* coff-a29k.c, coff-i386.c, coff-i960.c, coff-m68k.c, coff-m88k.c
|
||||
added new macro RTYPE2HOWTO to take a load of #ifdefs out of
|
||||
coffcode.h
|
||||
* coffcode.h: Started to change the way machine dependencies are
|
||||
handled, from the nest of #ifdefs to macros defined in the
|
||||
including coff-<foo>.c
|
||||
|
||||
|
||||
|
||||
|
||||
Fri Nov 22 08:11:42 1991 John Gilmore (gnu at cygnus.com)
|
||||
|
||||
* aoutx.h (some_aout_object_p): Set the `executable' bit
|
||||
|
@ -55,7 +55,7 @@ BFD_MACHINES = cpu-h8300.o cpu-i960.o cpu-sparc.o cpu-m68k.o cpu-m88k.o \
|
||||
BFD_BACKENDS = oasys.o ieee.o srec.o elf.o stab-syms.o\
|
||||
aout64.o aout32.o demo64.o sunos.o newsos3.o i386aout.o bout.o \
|
||||
coff-i960.o coff-a29k.o coff-m68k.o coff-i386.o coff-m88k.o \
|
||||
coff-mips.o coff-rs6000.o
|
||||
coff-mips.o coff-rs6000.o coff-h8300.o
|
||||
|
||||
OPTIONAL_BACKENDS = trad-core.o
|
||||
|
||||
@ -68,7 +68,7 @@ CFILES = libbfd.c opncls.c bfd.c archive.c targets.c cache.c archures.c \
|
||||
format.c section.c core.c syms.c stabs-syms.c reloc.c init.c ctor.c \
|
||||
coff-m88k.c coff-mips.c trad-core.c newsos3.c i386aout.c bout.c elf.c \
|
||||
cpu-h8300.c cpu-i960.c cpu-sparc.c cpu-m68k.c cpu-m88k.c \
|
||||
cpu-vax.c cpu-mips.c cpu-a29k.c cpu-i386.c cpu-rs6000.c
|
||||
cpu-vax.c cpu-mips.c cpu-a29k.c cpu-i386.c cpu-rs6000.c coff-h8300.c
|
||||
|
||||
STAGESTUFF = $(TARGETLIB) $(OFILES)
|
||||
|
||||
@ -281,8 +281,6 @@ archive.o : archive.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
targets.o : targets.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h
|
||||
cache.o : cache.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h
|
||||
archures.o : archures.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h
|
||||
coff-i386.o : coff-i386.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
$(INCDIR)/coff-i386.h $(INCDIR)/internalcoff.h libcoff.h coffcode.h
|
||||
aout64.o : aout64.c
|
||||
aout32.o : aout32.c aoutx.h $(INCDIR)/bfd.h $(INCDIR)/ansidecl.h \
|
||||
$(INCDIR)/obstack.h libaout.h libbfd.h $(INCDIR)/aout64.h \
|
||||
@ -291,19 +289,14 @@ sunos.o : sunos.c aoutf1.h $(INCDIR)/bfd.h $(INCDIR)/obstack.h \
|
||||
libaout.h libbfd.h $(INCDIR)/aout64.h $(INCDIR)/stab.gnu.h \
|
||||
$(INCDIR)/stab.def $(INCDIR)/ar.h
|
||||
demo64.o : demo64.c
|
||||
coff-i960.o : coff-i960.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
$(INCDIR)/coff-i960.h $(INCDIR)/internalcoff.h libcoff.h coffcode.h
|
||||
|
||||
srec.o : srec.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h
|
||||
oasys.o : oasys.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
$(INCDIR)/oasys.h liboasys.h
|
||||
ieee.o : ieee.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
$(INCDIR)/ieee.h libieee.h
|
||||
coff-m68k.o : coff-m68k.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
$(INCDIR)/coff-m68k.h $(INCDIR)/internalcoff.h libcoff.h coffcode.h
|
||||
coff-a29k.o : coff-a29k.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
$(INCDIR)/coff-a29k.h $(INCDIR)/internalcoff.h libcoff.h coffcode.h
|
||||
coff-rs6000.o: coff-rs6000.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
$(INCDIR)/coff-rs6000.h $(INCDIR)/internalcoff.h libcoff.h coffcode.h
|
||||
coff-h8300.o: coff-h8300.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
$(INCDIR)/coff-h8300.h $(INCDIR)/internalcoff.h libcoff.h coffcode.h
|
||||
format.o : format.c $(INCDIR)/bfd.h \
|
||||
$(INCDIR)/obstack.h libbfd.h
|
||||
section.o : section.c $(INCDIR)/bfd.h \
|
||||
@ -315,11 +308,7 @@ syms.o : syms.c $(INCDIR)/bfd.h \
|
||||
syms.o : stab-syms.c
|
||||
reloc.o : reloc.c $(INCDIR)/bfd.h \
|
||||
$(INCDIR)/obstack.h libbfd.h
|
||||
coff-m88k.o : coff-m88k.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
$(INCDIR)/coff-m88k.h $(INCDIR)/internalcoff.h libcoff.h coffcode.h
|
||||
coff-mips.o : coff-mips.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
$(INCDIR)/coff-mips.h $(INCDIR)/internalcoff.h libcoff.h trad-core.h \
|
||||
coffcode.h
|
||||
|
||||
trad-core.o : trad-core.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h \
|
||||
libbfd.h libaout.h
|
||||
newsos3.o : newsos3.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
|
@ -230,6 +230,19 @@ static reloc_howto_type howto_table[] =
|
||||
|
||||
#define BADMAG(x) A29KBADMAG(x)
|
||||
|
||||
/* This macro translates an external r_type field into a pointer to an
|
||||
entry in the above table */
|
||||
|
||||
|
||||
#define RTYPE2HOWTO(cache_ptr, dst) \
|
||||
if (dst.r_type == R_IHCONST) { \
|
||||
/* Add in the value which was stored in the symbol index */\
|
||||
cache_ptr->addend += dst.r_symndx; \
|
||||
/* Throw away the bogus symbol pointer */ \
|
||||
cache_ptr->sym_ptr_ptr = 0; \
|
||||
} \
|
||||
cache_ptr->howto = howto_table + dst.r_type; \
|
||||
|
||||
#include "coffcode.h"
|
||||
|
||||
bfd_target a29kcoff_big_vec =
|
||||
|
@ -20,13 +20,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#define I386 1
|
||||
#include <ansidecl.h>
|
||||
#include <sysdep.h>
|
||||
#include "bfd.h"
|
||||
#include "sysdep.h"
|
||||
#include "libbfd.h"
|
||||
#include "obstack.h"
|
||||
#include "i386coff.h"
|
||||
#include "coff-i386.h"
|
||||
#include "internalcoff.h"
|
||||
#include "libcoff.h"
|
||||
|
||||
@ -60,6 +58,11 @@ static reloc_howto_type howto_table[] =
|
||||
|
||||
#define SELECT_RELOC(x,howto) { x = howto->type; }
|
||||
#define BADMAG(x) I386BADMAG(x)
|
||||
#define I386 1 /* Customize coffcode.h */
|
||||
|
||||
#define RTYPETOHOWTO(cache_ptr, dst) \
|
||||
cache_ptr->howto = howto_table + dst.r_type;
|
||||
|
||||
#include "coffcode.h"
|
||||
|
||||
#define coff_write_armap bsd_write_armap
|
||||
@ -70,7 +73,7 @@ bfd *a ;
|
||||
|
||||
bfd_target i386coff_vec =
|
||||
{
|
||||
"i386coff", /* name */
|
||||
"coff-i386", /* name */
|
||||
bfd_target_coff_flavour,
|
||||
false, /* data byte order is little */
|
||||
false, /* header byte order is little */
|
||||
|
@ -1,34 +1,34 @@
|
||||
/* Intel 960 COFF support for BFD. */
|
||||
/* Intel 960 COFF support for BFD.
|
||||
Copyright (C) 1990-1991 Free Software Foundation, Inc.
|
||||
Written by Cygnus Support.
|
||||
|
||||
/* Copyright (C) 1990, 1991 Free Software Foundation, Inc.
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
This file is part of BFD, the Binary File Diddler.
|
||||
|
||||
BFD is free software; you can redistribute it and/or modify
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 1, or (at your option)
|
||||
any later version.
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
BFD is distributed in the hope that it will be useful,
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with BFD; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#define I960 1
|
||||
#define BADMAG(x) I960BADMAG(x)
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <sysdep.h>
|
||||
#include "bfd.h"
|
||||
#include "sysdep.h"
|
||||
#include "libbfd.h"
|
||||
#include "obstack.h"
|
||||
#include "intel-coff.h"
|
||||
#include "coff-i960.h"
|
||||
#include "internalcoff.h"
|
||||
#include "libcoff.h" /* to allow easier abstraction-breaking */
|
||||
|
||||
|
||||
@ -36,7 +36,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
#define BAL 0x0b000000 /* Template for 'bal' instruction */
|
||||
#define BAL_MASK 0x00ffffff
|
||||
|
||||
static bfd_reloc_status_enum_type
|
||||
static bfd_reloc_status_type
|
||||
optcall_callback(abfd, reloc_entry, symbol_in, data, ignore_input_section)
|
||||
bfd *abfd;
|
||||
arelent *reloc_entry;
|
||||
@ -47,13 +47,13 @@ asection *ignore_input_section;
|
||||
/* This item has already been relocated correctly, but we may be
|
||||
* able to patch in yet better code - done by digging out the
|
||||
* correct info on this symbol */
|
||||
bfd_reloc_status_enum_type result;
|
||||
bfd_reloc_status_type result;
|
||||
coff_symbol_type *cs = coffsymbol(symbol_in);
|
||||
|
||||
/* So the target symbol has to be of coff type, and the symbol
|
||||
has to have the correct native information within it */
|
||||
if ((cs->symbol.the_bfd->xvec->flavour != bfd_target_coff_flavour_enum)
|
||||
|| (cs->native == (struct internal_syment *)NULL)) {
|
||||
if ((cs->symbol.the_bfd->xvec->flavour != bfd_target_coff_flavour)
|
||||
|| (cs->native == (combined_entry_type *)NULL)) {
|
||||
/* This is interesting, consider the case where we're outputting */
|
||||
/* coff from a mix n match input, linking from coff to a symbol */
|
||||
/* defined in a bout file will cause this match to be true. Should */
|
||||
@ -62,17 +62,17 @@ asection *ignore_input_section;
|
||||
result = bfd_reloc_dangerous;
|
||||
}
|
||||
else {
|
||||
switch (cs->native->n_sclass)
|
||||
switch (cs->native->u.syment.n_sclass)
|
||||
{
|
||||
case C_LEAFSTAT:
|
||||
case C_LEAFEXT:
|
||||
/* This is a call to a leaf procedure, replace instruction with a bal
|
||||
to the correct location */
|
||||
{
|
||||
union internal_auxent *aux = (union internal_auxent *)(cs->native+2);
|
||||
union internal_auxent *aux = &((cs->native+2)->u.auxent);
|
||||
int word = bfd_get_32(abfd, data + reloc_entry->address);
|
||||
int olf = (aux->x_bal.x_balntry - cs->native->n_value);
|
||||
BFD_ASSERT(cs->native->n_numaux==2);
|
||||
int olf = (aux->x_bal.x_balntry - cs->native->u.syment.n_value);
|
||||
BFD_ASSERT(cs->native->u.syment.n_numaux==2);
|
||||
/* We replace the original call instruction with a bal to */
|
||||
/* the bal entry point - the offset of which is described in the */
|
||||
/* 2nd auxent of the original symbol. We keep the native sym and */
|
||||
@ -85,10 +85,9 @@ asection *ignore_input_section;
|
||||
result = bfd_reloc_ok;
|
||||
break;
|
||||
case C_SCALL:
|
||||
{
|
||||
/* This is a call to a system call, replace with a calls to # */
|
||||
BFD_ASSERT(0);
|
||||
}
|
||||
/* This is a call to a system call, replace with a calls to # */
|
||||
BFD_ASSERT(0);
|
||||
result = bfd_reloc_ok;
|
||||
break;
|
||||
default:
|
||||
result = bfd_reloc_ok;
|
||||
@ -141,12 +140,15 @@ static reloc_howto_type howto_table[] =
|
||||
|
||||
/* The real code is in coffcode.h */
|
||||
|
||||
#define RTYPE2HOWTO(cache_ptr, dst) \
|
||||
cache_ptr->howto = howto_table + dst.r_type;
|
||||
|
||||
#include "coffcode.h"
|
||||
|
||||
bfd_target icoff_little_vec =
|
||||
{
|
||||
"coff-Intel-little", /* name */
|
||||
bfd_target_coff_flavour_enum,
|
||||
bfd_target_coff_flavour,
|
||||
false, /* data byte order is little */
|
||||
false, /* header byte order is little */
|
||||
|
||||
@ -158,6 +160,7 @@ bfd_target icoff_little_vec =
|
||||
'/', /* ar_pad_char */
|
||||
15, /* ar_max_namelen */
|
||||
|
||||
3, /* minimum alignment power */
|
||||
_do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* data */
|
||||
_do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* hdrs */
|
||||
|
||||
@ -174,7 +177,7 @@ bfd_target icoff_little_vec =
|
||||
bfd_target icoff_big_vec =
|
||||
{
|
||||
"coff-Intel-big", /* name */
|
||||
bfd_target_coff_flavour_enum,
|
||||
bfd_target_coff_flavour,
|
||||
false, /* data byte order is little */
|
||||
true, /* header byte order is big */
|
||||
|
||||
@ -186,6 +189,7 @@ bfd_target icoff_big_vec =
|
||||
'/', /* ar_pad_char */
|
||||
15, /* ar_max_namelen */
|
||||
|
||||
3, /* minimum alignment power */
|
||||
_do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* data */
|
||||
_do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* hdrs */
|
||||
|
||||
|
@ -1,34 +1,33 @@
|
||||
/* Copyright (C) 1990, 1991 Free Software Foundation, Inc.
|
||||
/* Motorola 68000 COFF back-end for BFD.
|
||||
Copyright (C) 1990-1991 Free Software Foundation, Inc.
|
||||
Written by Cygnus Support.
|
||||
|
||||
This file is part of BFD, the Binary File Diddler.
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
BFD is free software; you can redistribute it and/or modify
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 1, or (at your option)
|
||||
any later version.
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
BFD is distributed in the hope that it will be useful,
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with BFD; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#define M68 1
|
||||
#include <ansidecl.h>
|
||||
#include <sysdep.h>
|
||||
#include "bfd.h"
|
||||
#include "sysdep.h"
|
||||
#include "libbfd.h"
|
||||
#include "obstack.h"
|
||||
#include "m68kcoff.h"
|
||||
#include "coff-m68k.h"
|
||||
#include "internalcoff.h"
|
||||
#include "libcoff.h"
|
||||
|
||||
|
||||
static reloc_howto_type howto_table[] =
|
||||
{
|
||||
HOWTO(R_RELBYTE, 0, 0, 8, false, 0, true, true,0,"8", true, 0x000000ff,0x000000ff, false),
|
||||
@ -40,20 +39,24 @@ static reloc_howto_type howto_table[] =
|
||||
};
|
||||
|
||||
|
||||
/* Turn a howto into a reloc nunmber */
|
||||
/* Turn a howto into a reloc number */
|
||||
|
||||
#define SELECT_RELOC(x,howto) { x = howto_table[howto->size +(int)howto->pc_relative*3].type; }
|
||||
#define BADMAG(x) M68KBADMAG(x)
|
||||
#include "coff-code.h"
|
||||
#define M68 1 /* Customize coffcode.h */
|
||||
|
||||
#define RTYPE2HOWTO(internal, relocentry) \
|
||||
(internal)->howto = ( howto_table + (relocentry).r_type - R_RELBYTE);
|
||||
|
||||
#include "coffcode.h"
|
||||
|
||||
|
||||
#define coff_write_armap bsd_write_armap
|
||||
|
||||
|
||||
bfd_target m68kcoff_vec =
|
||||
{
|
||||
"m68kcoff", /* name */
|
||||
bfd_target_coff_flavour_enum,
|
||||
"coff-m68k", /* name */
|
||||
bfd_target_coff_flavour,
|
||||
true, /* data byte order is big */
|
||||
true, /* header byte order is big */
|
||||
|
||||
@ -64,7 +67,7 @@ bfd_target m68kcoff_vec =
|
||||
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
|
||||
'/', /* ar_pad_char */
|
||||
15, /* ar_max_namelen */
|
||||
|
||||
3, /* minimum section alignment */
|
||||
_do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* data */
|
||||
_do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* hdrs */
|
||||
|
||||
@ -76,8 +79,4 @@ _do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* hdrs
|
||||
_bfd_write_archive_contents, bfd_false},
|
||||
|
||||
JUMP_TABLE(coff)
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
@ -81,6 +81,23 @@ static reloc_howto_type howto_table[] =
|
||||
};
|
||||
|
||||
|
||||
/* Code to swap in the reloc offset */
|
||||
#define SWAP_IN_RELOC_OFFSET bfd_h_get_16
|
||||
#define SWAP_OUT_RELOC_OFFSET bfd_h_put_16
|
||||
|
||||
|
||||
/* Code to turn an external r_type into a pointer to an entry in the
|
||||
above howto table */
|
||||
#define RTYPE2HOWTO(cache_ptr, dst) \
|
||||
if (dst.r_type >= R_PCR16L && dst.r_type <= R_VRT32) { \
|
||||
cache_ptr->howto = howto_table + dst.r_type - R_PCR16L; \
|
||||
cache_ptr->addend += dst.r_offset << 16; \
|
||||
} \
|
||||
else { \
|
||||
BFD_ASSERT(0); \
|
||||
}
|
||||
|
||||
|
||||
|
||||
#define BADMAG(x) MC88BADMAG(x)
|
||||
#include "coffcode.h"
|
||||
@ -89,7 +106,7 @@ static reloc_howto_type howto_table[] =
|
||||
|
||||
bfd_target m88kbcs_vec =
|
||||
{
|
||||
"m88kbcs", /* name */
|
||||
"coff-m88kbcs", /* name */
|
||||
bfd_target_coff_flavour,
|
||||
true, /* data byte order is big */
|
||||
true, /* header byte order is big */
|
||||
|
357
bfd/coffcode.h
357
bfd/coffcode.h
@ -27,19 +27,19 @@ structures on disk, and the occasional extra field.
|
||||
|
||||
Coff in all its varieties is implimented with a few common files and a
|
||||
number of implementation specific files. For example, The 88k bcs coff
|
||||
format is implemented in the file @code{m88k-bcs.c}. This file
|
||||
@code{#include}s @code{m88k-bcs.h} which defines the external
|
||||
format is implemented in the file @code{coff-m88k.c}. This file
|
||||
@code{#include}s @code{coff-m88k.h} which defines the external
|
||||
structure of the coff format for the 88k, and @code{internalcoff.h}
|
||||
which defines the internal structure. @code{m88k-bcs.c} also defines
|
||||
which defines the internal structure. @code{coff-m88k.c} also defines
|
||||
the relocations used by the 88k format @xref{Relocations}. Then the
|
||||
major portion of coff code is included (@code{coffcode.h}) which
|
||||
defines the methods used to act upon the types defined in
|
||||
@code{m88k-bcs.h} and @code{internalcoff.h}.
|
||||
@code{coff-m88k.h} and @code{internalcoff.h}.
|
||||
|
||||
The Intel i960 processor version of coff is implemented in
|
||||
@code{icoff.c}. This file has the same structure as
|
||||
@code{m88k-bcs.c}, except that it includes @code{intel-coff.h} rather
|
||||
than @code{m88k-bcs.h}.
|
||||
@code{coff-i960.c}. This file has the same structure as
|
||||
@code{coff-m88k.c}, except that it includes @code{coff-i960.h} rather
|
||||
than @code{coff-m88k.h}.
|
||||
|
||||
@subsection Porting To A New Version of Coff
|
||||
|
||||
@ -402,8 +402,8 @@ DEFUN(bfd_swap_reloc_in,(abfd, reloc_src, reloc_dst),
|
||||
reloc_dst->r_type = bfd_h_get_16(abfd, (bfd_byte *) reloc_src->r_type);
|
||||
#endif
|
||||
|
||||
#if M88
|
||||
reloc_dst->r_offset = bfd_h_get_16(abfd, (bfd_byte *) reloc_src->r_offset);
|
||||
#ifdef SWAP_IN_RELOC_OFFSET
|
||||
reloc_dst->r_offset = SWAP_IN_RELOC_OFFSET(abfd, reloc_src->r_offset);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -418,10 +418,18 @@ DEFUN(coff_swap_reloc_out,(abfd, src, dst),
|
||||
struct external_reloc *reloc_dst = (struct external_reloc *)dst;
|
||||
bfd_h_put_32(abfd, reloc_src->r_vaddr, (bfd_byte *) reloc_dst->r_vaddr);
|
||||
bfd_h_put_32(abfd, reloc_src->r_symndx, (bfd_byte *) reloc_dst->r_symndx);
|
||||
bfd_h_put_16(abfd, reloc_src->r_type, (bfd_byte *) reloc_dst->r_type);
|
||||
#if M88
|
||||
bfd_h_put_16(abfd, reloc_src->r_offset, (bfd_byte *) reloc_dst->r_offset);
|
||||
bfd_h_put_16(abfd, reloc_src->r_type, (bfd_byte *)
|
||||
reloc_dst->r_type);
|
||||
|
||||
#ifdef SWAP_OUT_RELOC_OFFSET
|
||||
SWAP_OUT_RELOC_OFFSET(abfd,
|
||||
reloc_src->r_offset,
|
||||
(bfd_byte *) reloc_dst->r_offset);
|
||||
#endif
|
||||
#ifdef SWAP_OUT_RELOC_EXTRA
|
||||
SWAP_OUT_RELOC_EXTRA(abfd,reloc_src, reloc_dst);
|
||||
#endif
|
||||
|
||||
return sizeof(struct external_reloc);
|
||||
}
|
||||
|
||||
@ -1065,6 +1073,12 @@ machine = 0;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef H8300MAGIC
|
||||
case H8300MAGIC:
|
||||
arch = bfd_arch_h8300;
|
||||
machine = 0;
|
||||
break;
|
||||
#endif
|
||||
|
||||
default: /* Unreadable input file type */
|
||||
arch = bfd_arch_obscure;
|
||||
@ -1741,30 +1755,90 @@ DEFUN(coff_print_symbol,(ignore_abfd, filep, symbol, how),
|
||||
{
|
||||
FILE *file = (FILE *)filep;
|
||||
switch (how) {
|
||||
case bfd_print_symbol_name:
|
||||
fprintf(file, "%s", symbol->name);
|
||||
break;
|
||||
case bfd_print_symbol_more:
|
||||
fprintf(file, "coff %lx %lx", (unsigned long) coffsymbol(symbol)->native,
|
||||
(unsigned long) coffsymbol(symbol)->lineno);
|
||||
break;
|
||||
case bfd_print_symbol_nm:
|
||||
case bfd_print_symbol_all:
|
||||
case bfd_print_symbol_name:
|
||||
fprintf(file, "%s", symbol->name);
|
||||
break;
|
||||
case bfd_print_symbol_more:
|
||||
fprintf(file, "coff %lx %lx", (unsigned long) coffsymbol(symbol)->native,
|
||||
(unsigned long) coffsymbol(symbol)->lineno);
|
||||
break;
|
||||
case bfd_print_symbol_nm:
|
||||
|
||||
{
|
||||
CONST char *section_name = symbol->section == (asection *) NULL ?
|
||||
"*abs" : symbol->section->name;
|
||||
bfd_print_symbol_vandf((PTR) file, symbol);
|
||||
|
||||
|
||||
fprintf(file, " %-5s %s %s %s",
|
||||
section_name,
|
||||
coffsymbol(symbol)->native ? "n" : "g",
|
||||
coffsymbol(symbol)->lineno ? "l" : " ",
|
||||
symbol->name);
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
case bfd_print_symbol_all:
|
||||
/* Print out the symbols in a reasonable way */
|
||||
{
|
||||
CONST char *section_name = symbol->section == (asection *) NULL ?
|
||||
"*abs" : symbol->section->name;
|
||||
|
||||
|
||||
if (coffsymbol(symbol)->native)
|
||||
{
|
||||
CONST char *section_name = symbol->section == (asection *) NULL ?
|
||||
(CONST char *)"*abs" : symbol->section->name;
|
||||
bfd_print_symbol_vandf((PTR) file, symbol);
|
||||
unsigned int aux;
|
||||
combined_entry_type *combined = coffsymbol(symbol)->native;
|
||||
combined_entry_type *root = obj_raw_syments(ignore_abfd);
|
||||
|
||||
fprintf(file,"[%3d]",
|
||||
combined - root);
|
||||
|
||||
|
||||
fprintf(file, " %-5s %s %s %s",
|
||||
section_name,
|
||||
coffsymbol(symbol)->native ? "n" : "g",
|
||||
coffsymbol(symbol)->lineno ? "l" : " ",
|
||||
symbol->name);
|
||||
}
|
||||
fprintf(file, "(sc %2d)(fl%4x)(ty%3x)(sc%3d) nx(%d) %08x %s",
|
||||
combined->u.syment.n_scnum,
|
||||
combined->u.syment.n_flags,
|
||||
combined->u.syment.n_type,
|
||||
combined->u.syment.n_sclass,
|
||||
combined->u.syment.n_numaux,
|
||||
combined->u.syment.n_value,
|
||||
symbol->name
|
||||
);
|
||||
for (aux = 0; aux < combined->u.syment.n_numaux; aux++)
|
||||
{
|
||||
fprintf(file,"\n");
|
||||
switch (combined->u.syment.n_sclass) {
|
||||
case C_FILE:
|
||||
fprintf(file, "File ");
|
||||
break;
|
||||
default:
|
||||
fprintf(file, "AUX tv %x lnno %x size %x",
|
||||
combined[aux+1].u.auxent.x_sym.x_misc.x_lnsz.x_lnno,
|
||||
combined[aux+1].u.auxent.x_sym.x_misc.x_lnsz.x_size);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
else {
|
||||
bfd_print_symbol_vandf((PTR) file, symbol);
|
||||
fprintf(file, " %-5s %s %s %s",
|
||||
section_name,
|
||||
coffsymbol(symbol)->native ? "n" : "g",
|
||||
coffsymbol(symbol)->lineno ? "l" : " ",
|
||||
symbol->name);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* NO_COFF_SYMBOLS */
|
||||
@ -1782,7 +1856,7 @@ DEFUN(coff_set_flags,(abfd, magicp, flagsp),
|
||||
|
||||
#ifdef I960ROMAGIC
|
||||
|
||||
case bfd_arch_i960:
|
||||
case bfd_arch_i960:
|
||||
|
||||
{
|
||||
unsigned flags;
|
||||
@ -1836,20 +1910,25 @@ DEFUN(coff_set_flags,(abfd, magicp, flagsp),
|
||||
#endif
|
||||
|
||||
#ifdef MC88MAGIC
|
||||
case bfd_arch_m88k:
|
||||
*magicp = MC88OMAGIC;
|
||||
return true;
|
||||
break;
|
||||
case bfd_arch_m88k:
|
||||
*magicp = MC88OMAGIC;
|
||||
return true;
|
||||
break;
|
||||
#endif
|
||||
#ifdef H8300MAGIC
|
||||
case bfd_arch_h8300:
|
||||
*magicp = H8300MAGIC;
|
||||
return true;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef A29K_MAGIC_BIG
|
||||
case bfd_arch_a29k:
|
||||
if (abfd->xvec->byteorder_big_p)
|
||||
*magicp = A29K_MAGIC_BIG;
|
||||
else
|
||||
*magicp = A29K_MAGIC_LITTLE;
|
||||
return true;
|
||||
break;
|
||||
case bfd_arch_a29k:
|
||||
if (abfd->xvec->byteorder_big_p)
|
||||
*magicp = A29K_MAGIC_BIG;
|
||||
else
|
||||
*magicp = A29K_MAGIC_LITTLE;
|
||||
return true;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#ifdef U802TOCMAGIC
|
||||
@ -2665,7 +2744,6 @@ asection *asect;
|
||||
if (cache_ptr->line_number == 0) {
|
||||
coff_symbol_type *sym =
|
||||
(coff_symbol_type *) (dst.l_addr.l_symndx
|
||||
+ obj_symbol_slew(abfd)
|
||||
+ obj_raw_syments(abfd))->u.syment._n._n_n._n_zeroes;
|
||||
cache_ptr->u.sym = (asymbol *) sym;
|
||||
sym->lineno = cache_ptr;
|
||||
@ -2942,15 +3020,15 @@ DEFUN(coff_get_symtab, (abfd, alocation),
|
||||
/* This nasty code looks at the symbol to decide whether or
|
||||
not it is descibes a constructor/destructor entry point. It
|
||||
is structured this way to (hopefully) speed non matches */
|
||||
|
||||
if (symbase->symbol.name[9] == '$')
|
||||
#if 0
|
||||
if (0 && symbase->symbol.name[9] == '$')
|
||||
{
|
||||
bfd_constructor_entry(abfd,
|
||||
(asymbol **)location,
|
||||
symbase->symbol.name[10] == 'I' ?
|
||||
"CTOR" : "DTOR");
|
||||
}
|
||||
|
||||
#endif
|
||||
*(location++) = symbase++;
|
||||
counter++;
|
||||
}
|
||||
@ -2999,60 +3077,91 @@ addend field.
|
||||
@end itemize
|
||||
*/
|
||||
|
||||
#ifndef CALC_ADDEND
|
||||
#define CALC_ADDEND(abfd, ptr, reloc, cache_ptr) \
|
||||
if (ptr && ptr->the_bfd == abfd \
|
||||
&& ptr->section != (asection *) NULL \
|
||||
&& ((ptr->flags & BSF_OLD_COMMON)== 0)) \
|
||||
{ \
|
||||
cache_ptr->addend = -(ptr->section->vma + ptr->value); \
|
||||
} \
|
||||
else { \
|
||||
cache_ptr->addend = 0; \
|
||||
}
|
||||
#endif
|
||||
|
||||
static boolean
|
||||
DEFUN(coff_slurp_reloc_table,(abfd, asect, symbols),
|
||||
bfd *abfd AND
|
||||
sec_ptr asect AND
|
||||
asymbol **symbols)
|
||||
{
|
||||
RELOC *native_relocs;
|
||||
arelent *reloc_cache;
|
||||
if (asect->relocation)
|
||||
return true;
|
||||
if (asect->reloc_count == 0)
|
||||
return true;
|
||||
if (asect->flags & SEC_CONSTRUCTOR)
|
||||
return true;
|
||||
RELOC *native_relocs;
|
||||
arelent *reloc_cache;
|
||||
arelent *cache_ptr;
|
||||
|
||||
unsigned int idx;
|
||||
|
||||
if (asect->relocation)
|
||||
return true;
|
||||
if (asect->reloc_count == 0)
|
||||
return true;
|
||||
if (asect->flags & SEC_CONSTRUCTOR)
|
||||
return true;
|
||||
#ifndef NO_COFF_SYMBOLS
|
||||
if (!coff_slurp_symbol_table(abfd))
|
||||
return false;
|
||||
if (!coff_slurp_symbol_table(abfd))
|
||||
return false;
|
||||
#endif
|
||||
native_relocs =
|
||||
(RELOC *) buy_and_read(abfd,
|
||||
asect->rel_filepos,
|
||||
SEEK_SET,
|
||||
(size_t) (RELSZ *
|
||||
asect->reloc_count));
|
||||
reloc_cache = (arelent *)
|
||||
bfd_alloc(abfd, (size_t) (asect->reloc_count * sizeof(arelent)));
|
||||
native_relocs =
|
||||
(RELOC *) buy_and_read(abfd,
|
||||
asect->rel_filepos,
|
||||
SEEK_SET,
|
||||
(size_t) (RELSZ *
|
||||
asect->reloc_count));
|
||||
reloc_cache = (arelent *)
|
||||
bfd_alloc(abfd, (size_t) (asect->reloc_count * sizeof(arelent)));
|
||||
|
||||
if (reloc_cache == NULL) {
|
||||
bfd_error = no_memory;
|
||||
return false;
|
||||
} { /* on error */
|
||||
arelent *cache_ptr;
|
||||
RELOC *src;
|
||||
for (cache_ptr = reloc_cache,
|
||||
src = native_relocs;
|
||||
cache_ptr < reloc_cache + asect->reloc_count;
|
||||
cache_ptr++,
|
||||
src++) {
|
||||
struct internal_reloc dst;
|
||||
asymbol *ptr;
|
||||
bfd_swap_reloc_in(abfd, src, &dst);
|
||||
if (reloc_cache == NULL) {
|
||||
bfd_error = no_memory;
|
||||
return false;
|
||||
}
|
||||
|
||||
dst.r_symndx += obj_symbol_slew(abfd);
|
||||
cache_ptr->sym_ptr_ptr = symbols + obj_convert(abfd)[dst.r_symndx];
|
||||
|
||||
for (idx = 0; idx < asect->reloc_count; idx ++)
|
||||
{
|
||||
struct internal_reloc dst;
|
||||
asymbol *ptr;
|
||||
struct external_reloc *src;
|
||||
|
||||
cache_ptr = reloc_cache + idx;
|
||||
src = native_relocs + idx;
|
||||
|
||||
bfd_swap_reloc_in(abfd, src, &dst);
|
||||
|
||||
|
||||
if (dst.r_symndx != -1)
|
||||
{
|
||||
cache_ptr->sym_ptr_ptr = symbols + obj_convert(abfd)[dst.r_symndx];
|
||||
}
|
||||
else
|
||||
{
|
||||
cache_ptr->sym_ptr_ptr = 0;
|
||||
ptr = 0;
|
||||
goto puke_logic;
|
||||
|
||||
}
|
||||
|
||||
#ifdef A29K
|
||||
/* AMD has two relocation entries for the 'consth' instruction.
|
||||
* The first is R_IHIHALF (part 1), the second is R_IHCONST
|
||||
* (part 2). The second entry's r_symndx does not contain
|
||||
* an index to a symbol but rather a value (apparently).
|
||||
* Also, see the ifdef below for saving the r_symndx value in addend.
|
||||
*/
|
||||
if (dst.r_type == R_IHCONST) {
|
||||
ptr = NULL;
|
||||
} else
|
||||
/* AMD has two relocation entries for the 'consth' instruction.
|
||||
* The first is R_IHIHALF (part 1), the second is R_IHCONST
|
||||
* (part 2). The second entry's r_symndx does not contain
|
||||
* an index to a symbol but rather a value (apparently).
|
||||
* Also, see the ifdef below for saving the r_symndx value in addend.
|
||||
*/
|
||||
if (dst.r_type == R_IHCONST) {
|
||||
ptr = NULL;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
ptr = *(cache_ptr->sym_ptr_ptr);
|
||||
cache_ptr->address = dst.r_vaddr;
|
||||
@ -3064,58 +3173,28 @@ DEFUN(coff_slurp_reloc_table,(abfd, asect, symbols),
|
||||
|
||||
Note that symbols which used to be common must be left alone */
|
||||
|
||||
if (ptr && ptr->the_bfd == abfd
|
||||
&& ptr->section != (asection *) NULL
|
||||
&& ((ptr->flags & BSF_OLD_COMMON)== 0))
|
||||
{
|
||||
#ifndef M88
|
||||
cache_ptr->addend = -(ptr->section->vma + ptr->value);
|
||||
#else
|
||||
cache_ptr->addend = 0;
|
||||
#endif
|
||||
puke_logic:
|
||||
cache_ptr->address = dst.r_vaddr;
|
||||
/*
|
||||
The symbols definitions that we have read in have been
|
||||
relocated as if their sections started at 0. But the offsets
|
||||
refering to the symbols in the raw data have not been
|
||||
modified, so we have to have a negative addend to compensate.
|
||||
|
||||
Note that symbols which used to be common must be left alone */
|
||||
|
||||
}
|
||||
else {
|
||||
cache_ptr->addend = 0;
|
||||
}
|
||||
/* Calculate any reloc addend by looking at the symbol */
|
||||
CALC_ADDEND(abfd, ptr, dst, cache_ptr);
|
||||
|
||||
cache_ptr->address -= asect->vma;
|
||||
cache_ptr->address -= asect->vma;
|
||||
cache_ptr->section = (asection *) NULL;
|
||||
|
||||
cache_ptr->section = (asection *) NULL;
|
||||
|
||||
#ifdef A29K
|
||||
if (dst.r_type == R_IHCONST) {
|
||||
/* Add in the value which was stored in the symbol index */
|
||||
/* See above comment */
|
||||
cache_ptr->addend += dst.r_symndx;
|
||||
/* Throw away the bogus symbol pointer */
|
||||
cache_ptr->sym_ptr_ptr = 0;
|
||||
}
|
||||
cache_ptr->howto = howto_table + dst.r_type;
|
||||
#endif
|
||||
#if I386
|
||||
cache_ptr->howto = howto_table + dst.r_type;
|
||||
#endif
|
||||
#if I960
|
||||
cache_ptr->howto = howto_table + dst.r_type;
|
||||
#endif
|
||||
#if M68
|
||||
cache_ptr->howto = howto_table + dst.r_type - R_RELBYTE;
|
||||
#endif
|
||||
#if M88
|
||||
if (dst.r_type >= R_PCR16L && dst.r_type <= R_VRT32) {
|
||||
cache_ptr->howto = howto_table + dst.r_type - R_PCR16L;
|
||||
cache_ptr->addend += dst.r_offset << 16;
|
||||
}
|
||||
else {
|
||||
BFD_ASSERT(0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
/* Fill in the cache_ptr->howto field from dst.r_type */
|
||||
RTYPE2HOWTO(cache_ptr, dst);
|
||||
}
|
||||
|
||||
asect->relocation = reloc_cache;
|
||||
return true;
|
||||
asect->relocation = reloc_cache;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
# appropriate for this directory. For more information, check any
|
||||
# existing configure script.
|
||||
|
||||
configdirs="doc"
|
||||
srctrigger=libbfd.c
|
||||
srcname="BFD"
|
||||
|
||||
@ -130,7 +131,7 @@ amd)
|
||||
|
||||
hitachi)
|
||||
case "${target_cpu}" in
|
||||
h8300) bfd_target=h8300-ieee ;;
|
||||
h8300) bfd_target=h8300-coff ;;
|
||||
*) echo "bad hitachi cpu" ;;
|
||||
esac
|
||||
;;
|
||||
|
@ -18,8 +18,8 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include "bfd.h"
|
||||
#include "sysdep.h"
|
||||
#include "libbfd.h"
|
||||
|
||||
#define DEFINE_TABLE
|
||||
@ -96,21 +96,21 @@ FILE *stream)
|
||||
|
||||
/* Find the exact opcode/arg combo */
|
||||
while (*p) {
|
||||
op_enum_type *nib;
|
||||
op_type *nib;
|
||||
unsigned int len = 0;
|
||||
q = *p++;
|
||||
nib =q->data.nib;
|
||||
while (*nib != E) {
|
||||
op_enum_type looking_for = *nib;
|
||||
op_type looking_for = *nib;
|
||||
int thisnib = data[len>>1] ;
|
||||
thisnib = (len & 1) ? (thisnib & 0xf) : ((thisnib >> 4) & 0xf);
|
||||
if ((int)looking_for & (int)B31) {
|
||||
if (((int)thisnib & 0x8) ==0) goto fail;
|
||||
looking_for = (op_enum_type)((int)looking_for & ~(int)B31);
|
||||
looking_for = (op_type)((int)looking_for & ~(int)B31);
|
||||
}
|
||||
if ((int)looking_for & (int)B30) {
|
||||
if (((int)thisnib & 0x8) !=0) goto fail;
|
||||
looking_for = (op_enum_type)((int)looking_for & ~(int)B30);
|
||||
looking_for = (op_type)((int)looking_for & ~(int)B30);
|
||||
}
|
||||
switch (looking_for) {
|
||||
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
|
||||
@ -130,7 +130,7 @@ FILE *stream)
|
||||
rdisp = thisnib;
|
||||
break;
|
||||
case KBIT:
|
||||
abs = thisnib == 0x80 ? 2:1;
|
||||
abs = thisnib == 0x8 ? 2:1;
|
||||
break;
|
||||
case IMM8:
|
||||
case ABS8SRC:
|
||||
@ -167,7 +167,7 @@ FILE *stream)
|
||||
;
|
||||
|
||||
}
|
||||
fprintf(stream, "%02x %02x .word\tH'%x,H'%x\n",
|
||||
fprintf(stream, "%02x %02x .word\tH'%x,H'%x",
|
||||
data[0], data[1],
|
||||
data[0], data[1]);
|
||||
return 2;
|
||||
@ -184,7 +184,7 @@ FILE *stream)
|
||||
fprintf(stream, "%s\t",q->name);
|
||||
/* Now print out the args */
|
||||
{
|
||||
op_enum_type *args = q->args.nib;
|
||||
op_type *args = q->args.nib;
|
||||
int hadone = 0;
|
||||
while (*args != E) {
|
||||
if (hadone)
|
||||
@ -193,7 +193,7 @@ FILE *stream)
|
||||
case IMM16:
|
||||
case IMM8:
|
||||
case IMM3:
|
||||
fprintf(stream, "#H'%x", (unsigned)abs); break;
|
||||
fprintf(stream, "#0x%x", (unsigned)abs); break;
|
||||
case RD8:
|
||||
fprintf(stream, "%s", regnames[rd]); break;
|
||||
case RS8:
|
||||
@ -214,14 +214,14 @@ FILE *stream)
|
||||
case ABS16SRC:
|
||||
case ABS16DST:
|
||||
case ABS8DST:
|
||||
fprintf(stream, "@H'%x", (unsigned)abs); break;
|
||||
fprintf(stream, "@0x%x", (unsigned)abs); break;
|
||||
case DISP8:
|
||||
fprintf(stream, ".%s%d (%x)",(char)abs>0 ? "+" :"", (char)abs,
|
||||
addr + (char)abs);
|
||||
break;
|
||||
case DISPSRC:
|
||||
case DISPDST:
|
||||
fprintf(stream, "@(%d,r%d)", abs, rdisp & 0x7); break;
|
||||
fprintf(stream, "@(0x%x,r%d)", abs, rdisp & 0x7); break;
|
||||
case CCR:
|
||||
fprintf(stream, "ccr"); break;
|
||||
case KBIT:
|
||||
@ -238,25 +238,25 @@ FILE *stream)
|
||||
|
||||
|
||||
|
||||
unsigned int DEFUN( print_insn_h8300,(addr, data, file),
|
||||
unsigned int DEFUN(print_insn_h8300,(addr, data, file),
|
||||
bfd_vma addr AND
|
||||
CONST bfd_byte *data AND
|
||||
CONST char *data AND
|
||||
PTR file)
|
||||
{
|
||||
static boolean init;
|
||||
if (!init) {
|
||||
bfd_h8_disassemble_init();
|
||||
init= 1;
|
||||
|
||||
}
|
||||
return bfd_h8_disassemble(addr, data, file);
|
||||
|
||||
return bfd_h8_disassemble(addr, (bfd_byte *)data, file);
|
||||
}
|
||||
|
||||
/*
|
||||
Relocations for the H8
|
||||
|
||||
*/
|
||||
static bfd_reloc_status_enum_type
|
||||
static bfd_reloc_status_type
|
||||
DEFUN(howto16_callback,(abfd, reloc_entry, symbol_in, data, ignore_input_section),
|
||||
bfd *abfd AND
|
||||
arelent *reloc_entry AND
|
||||
@ -277,7 +277,7 @@ asection *ignore_input_section)
|
||||
}
|
||||
|
||||
|
||||
static bfd_reloc_status_enum_type
|
||||
static bfd_reloc_status_type
|
||||
DEFUN(howto8_callback,(abfd, reloc_entry, symbol_in, data, ignore_input_section),
|
||||
bfd *abfd AND
|
||||
arelent *reloc_entry AND
|
||||
@ -298,7 +298,7 @@ asection *ignore_input_section)
|
||||
}
|
||||
|
||||
|
||||
static bfd_reloc_status_enum_type
|
||||
static bfd_reloc_status_type
|
||||
DEFUN(howto8_FFnn_callback,(abfd, reloc_entry, symbol_in, data, ignore_input_section),
|
||||
bfd *abfd AND
|
||||
arelent *reloc_entry AND
|
||||
@ -319,7 +319,7 @@ asection *ignore_input_section)
|
||||
return bfd_reloc_ok;
|
||||
}
|
||||
|
||||
static bfd_reloc_status_enum_type
|
||||
static bfd_reloc_status_type
|
||||
DEFUN(howto8_pcrel_callback,(abfd, reloc_entry, symbol_in, data, ignore_input_section),
|
||||
bfd *abfd AND
|
||||
arelent *reloc_entry AND
|
||||
@ -355,8 +355,8 @@ static reloc_howto_type howto_8_pcrel
|
||||
|
||||
static CONST struct reloc_howto_struct *
|
||||
DEFUN(local_bfd_reloc_type_lookup,(arch, code),
|
||||
bfd_arch_info_struct_type *arch AND
|
||||
bfd_reloc_code_enum_type code)
|
||||
CONST struct bfd_arch_info *arch AND
|
||||
bfd_reloc_code_type code)
|
||||
{
|
||||
switch (code) {
|
||||
case BFD_RELOC_16:
|
||||
@ -375,7 +375,7 @@ int bfd_default_scan_num_mach();
|
||||
|
||||
static boolean
|
||||
DEFUN(h8300_scan,(info, string),
|
||||
CONST struct bfd_arch_info_struct *info AND
|
||||
CONST struct bfd_arch_info *info AND
|
||||
CONST char *string)
|
||||
{
|
||||
if (strcmp(string,"h8300") == 0) return true;
|
||||
@ -384,7 +384,8 @@ CONST char *string)
|
||||
if (strcmp(string,"H8/300") == 0) return true;
|
||||
return false;
|
||||
}
|
||||
static bfd_arch_info_struct_type arch_info_struct =
|
||||
|
||||
static bfd_arch_info_type arch_info_struct =
|
||||
{
|
||||
16, /* 16 bits in a word */
|
||||
16, /* 16 bits in an address */
|
||||
@ -401,13 +402,8 @@ static bfd_arch_info_struct_type arch_info_struct =
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
void DEFUN_VOID(bfd_h8300_arch)
|
||||
void
|
||||
DEFUN_VOID(bfd_h8300_arch)
|
||||
{
|
||||
bfd_arch_linkin(&arch_info_struct);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -18,64 +18,48 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
/* Object file tdata; access macros */
|
||||
|
||||
#define obj_icof(bfd) ((struct icofdata *) ((bfd)->tdata))
|
||||
#define coff_data(bfd) ((struct icofdata *) ((bfd)->tdata))
|
||||
#define exec_hdr(bfd) (obj_icof(bfd)->hdr)
|
||||
#define obj_symbols(bfd) (obj_icof(bfd)->symbols)
|
||||
#define obj_sym_filepos(bfd) (obj_icof(bfd)->sym_filepos)
|
||||
#define coff_data(bfd) ((coff_data_type *) ((bfd)->tdata))
|
||||
#define exec_hdr(bfd) (coff_data(bfd)->hdr)
|
||||
#define obj_symbols(bfd) (coff_data(bfd)->symbols)
|
||||
#define obj_sym_filepos(bfd) (coff_data(bfd)->sym_filepos)
|
||||
|
||||
#define obj_relocbase(bfd) (obj_icof(bfd)->relocbase)
|
||||
#define obj_raw_syments(bfd) (obj_icof(bfd)->raw_syments)
|
||||
#define obj_convert(bfd) (obj_icof(bfd)->conversion_table)
|
||||
#if CFILE_STUFF
|
||||
#define obj_symbol_slew(bfd) (obj_icof(bfd)->symbol_index_slew)
|
||||
#else
|
||||
#define obj_symbol_slew(bfd) 0
|
||||
#endif
|
||||
#define obj_string_table(bfd) (obj_icof(bfd)->string_table)
|
||||
#define obj_relocbase(bfd) (coff_data(bfd)->relocbase)
|
||||
#define obj_raw_syments(bfd) (coff_data(bfd)->raw_syments)
|
||||
#define obj_convert(bfd) (coff_data(bfd)->conversion_table)
|
||||
|
||||
#if 0
|
||||
typedef struct coff_ptr_struct
|
||||
|
||||
/* `Tdata' information kept for COFF files. */
|
||||
|
||||
typedef struct coff_tdata
|
||||
{
|
||||
unsigned int offset;
|
||||
char fix_tag;
|
||||
char fix_end;
|
||||
union {
|
||||
union internal_auxent auxent;
|
||||
struct internal_syment syment;
|
||||
} u;
|
||||
} combined_entry_type;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
asymbol symbol;
|
||||
combined_entry_type *native;
|
||||
struct lineno_cache_entry *lineno;
|
||||
} coff_symbol_type;
|
||||
#endif
|
||||
|
||||
typedef struct icofdata
|
||||
{
|
||||
|
||||
struct coff_symbol_struct *symbols; /* symtab for input bfd */
|
||||
struct coff_symbol_struct *symbols; /* symtab for input bfd */
|
||||
unsigned int *conversion_table;
|
||||
file_ptr sym_filepos;
|
||||
|
||||
long symbol_index_slew; /* used during read to mark whether a
|
||||
C_FILE symbol as been added. */
|
||||
|
||||
struct coff_ptr_struct *raw_syments;
|
||||
struct coff_ptr_struct *raw_syments;
|
||||
struct lineno *raw_linenos;
|
||||
unsigned int raw_syment_count;
|
||||
char *string_table;
|
||||
unsigned short flags;
|
||||
|
||||
/* These are only valid once writing has begun */
|
||||
long int relocbase;
|
||||
|
||||
/* These members communicate important constants about the symbol table
|
||||
to GDB's symbol-reading code. These `constants' unfortunately vary
|
||||
from coff implementation to implementation... */
|
||||
unsigned local_n_btmask;
|
||||
unsigned local_n_btshft;
|
||||
unsigned local_n_tmask;
|
||||
unsigned local_n_tshift;
|
||||
unsigned local_symesz;
|
||||
unsigned local_auxesz;
|
||||
unsigned local_linesz;
|
||||
} coff_data_type;
|
||||
|
||||
/* We take the address of the first element of a asymbol to ensure that the
|
||||
@ -86,9 +70,9 @@ struct coff_ptr_struct *raw_syments;
|
||||
|
||||
/*THE FOLLOWING IS EXTRACTED FROM THE SOURCE*/
|
||||
|
||||
/* FROM coffcode.h*/
|
||||
/* ------------------------------START FROM coffcode.h
|
||||
/*:coffcode.h*/
|
||||
|
||||
/*
|
||||
The hidden information for an asymbol is:
|
||||
*/
|
||||
|
||||
@ -154,8 +138,6 @@ A pointer to the linenumber information for this symbol
|
||||
} coff_symbol_type;
|
||||
|
||||
/*
|
||||
|
||||
--------------------------------END FROM coffcode.h*/
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
@ -358,6 +358,7 @@ extern bfd_target i386aout_vec;
|
||||
extern bfd_target a29kcoff_big_vec;
|
||||
extern bfd_target trad_core_vec;
|
||||
extern bfd_target rs6000coff_vec;
|
||||
extern bfd_target h8300coff_vec;
|
||||
|
||||
#ifdef DEFAULT_VECTOR
|
||||
extern bfd_target DEFAULT_VECTOR;
|
||||
@ -406,6 +407,7 @@ SELECT_VECS,
|
||||
#define I386AOUT_VEC i386aout_vec
|
||||
#define A29KCOFF_BIG_VEC a29kcoff_big_vec
|
||||
#define RS6000COFF_VEC rs6000coff_vec
|
||||
#define H8300COFF_VEC h8300coff_vec
|
||||
#endif
|
||||
|
||||
bfd_target *target_vector[] = {
|
||||
@ -448,6 +450,9 @@ bfd_target *target_vector[] = {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef H300COFF_VEC
|
||||
&h8300coff_vec,
|
||||
#endif
|
||||
#ifdef M88KBCS_VEC
|
||||
&M88KBCS_VEC,
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user