mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-25 13:09:48 +00:00
RS/6000 support, by Metin G. Ozisik, Mimi Phûông-Thåo Võ, and John Gilmore.
This commit is contained in:
parent
c8c0a2bd59
commit
cbdc790909
@ -1,3 +1,31 @@
|
||||
Thu Oct 24 22:40:07 1991 John Gilmore (gnu at cygnus.com)
|
||||
|
||||
RS/6000 support, by Metin G. Ozisik, Mimi Phûông-Thåo Võ, and
|
||||
John Gilmore.
|
||||
|
||||
* Makefile.in: Add cpu-rs6000.c and rs6000coff.c.
|
||||
* configure.in: Add rs6000 case.
|
||||
* targets.c: Add rs6000 vector.
|
||||
* archures.c: Add rs6000, fix comment on romp.
|
||||
* bfd-in.h (enum bfd_error): Add no_debug_section error.
|
||||
* libcoff-in.h (struct coff_tdata): Remove unused string_table.
|
||||
* bfd.c (bfd_errmsgs): Add no_debug_section error message.
|
||||
* section.c (bfd_make_section): Return NULL on attempt to create
|
||||
a section twice.
|
||||
* coffcode.h (bfd_swap_reloc_in): Handle r_type and r_size.
|
||||
(bfd_swap_aouthdr_in): Handle lots more members.
|
||||
(make_a_section_from_file): If section has already been seen,
|
||||
just return false rather than overwriting it.
|
||||
(coff_real_object_p): Understand incoming magic numbers.
|
||||
(coff_set_flags): Understand outgoing magic numbers.
|
||||
(coff_compute_section_file_positions): outgoing aouthdr magic #.
|
||||
(build_debug_section): Add fn for reading debug string section.
|
||||
(get_normalized_symtab): Handle symbol names in debug string section.
|
||||
Remove unused obj_string_table.
|
||||
(coff_slurp_symbol_table): Handle rs6000-specific storage classes.
|
||||
* aoutx.h (translate_from_native_sym_flags, N_SET*): Check for
|
||||
existing section before making one.
|
||||
|
||||
Thu Oct 24 02:03:24 1991 Fred Fish (fnf at cygnus.com)
|
||||
|
||||
* elf.c: Add partial support for ELF format corefiles. Still needs
|
||||
|
@ -43,12 +43,13 @@ CFLAGS = -g $(HDEFINES) $(TDEFINES) $(CSEARCH) $(CSWITCHES) # -DINTEL960VERSION
|
||||
BFD_LIBS = libbfd.o opncls.o bfd.o archive.o targets.o cache.o \
|
||||
archures.o core.o section.o format.o syms.o reloc.o init.o
|
||||
|
||||
BFD_MACHINES=cpu-h8300.o cpu-i960.o cpu-sparc.o cpu-m68k.o cpu-m88k.o \
|
||||
cpu-vax.o cpu-mips.o cpu-a29k.o cpu-i386.o
|
||||
BFD_MACHINES = cpu-h8300.o cpu-i960.o cpu-sparc.o cpu-m68k.o cpu-m88k.o \
|
||||
cpu-vax.o cpu-mips.o cpu-a29k.o cpu-i386.o cpu-rs6000.o
|
||||
|
||||
BFD_BACKENDS = oasys.o ieee.o srec.o \
|
||||
aout64.o aout32.o demo64.o sunos.o newsos3.o i386aout.o bout.o \
|
||||
icoff.o amdcoff.o m68kcoff.o i386coff.o m88k-bcs.o ecoff.o elf.o
|
||||
icoff.o amdcoff.o m68kcoff.o i386coff.o m88k-bcs.o ecoff.o elf.o \
|
||||
rs6000coff.o
|
||||
|
||||
|
||||
OPTIONAL_BACKENDS = trad-core.o
|
||||
@ -58,11 +59,11 @@ BFD_H=$(INCDIR)/bfd.h
|
||||
# C source files that correspond to .o's.
|
||||
CFILES = libbfd.c opncls.c bfd.c archive.c targets.c cache.c archures.c \
|
||||
i386coff.c aout64.c aout32.c sunos.c demo64.c icoff.c srec.c \
|
||||
oasys.c ieee.c m68kcoff.c amdcoff.c \
|
||||
oasys.c ieee.c m68kcoff.c amdcoff.c rs6000coff.c \
|
||||
format.c section.c core.c syms.c reloc.c init.c \
|
||||
m88k-bcs.c ecoff.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.o
|
||||
cpu-vax.c cpu-mips.c cpu-a29k.c cpu-i386.c cpu-rs6000.c
|
||||
|
||||
STAGESTUFF = $(TARGETLIB) $(OFILES)
|
||||
|
||||
@ -125,6 +126,9 @@ $(BFD_MACHINES): libbfd.h $(BFD_H) $(RECONFIG)
|
||||
$(BFD_BACKENDS): libbfd.h $(BFD_H) $(RECONFIG)
|
||||
$(OPTIONAL_BACKENDS): libbfd.h $(BFD_H) $(RECONFIG)
|
||||
|
||||
# Get around a Sun Make bug in SunOS 4.1.1 with VPATH
|
||||
cpu-i386.o:cpu-i386.c
|
||||
|
||||
saber:
|
||||
#suppress 65 on bfd_map_over_sections
|
||||
#suppress 66 on bfd_map_over_sections
|
||||
@ -262,6 +266,8 @@ m68kcoff.o : m68kcoff.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
$(INCDIR)/m68kcoff.h $(INCDIR)/internalcoff.h libcoff.h coffcode.h
|
||||
amdcoff.o : amdcoff.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
$(INCDIR)/amdcoff.h $(INCDIR)/internalcoff.h libcoff.h coffcode.h
|
||||
rs6000coff.o: rs6000coff.c $(INCDIR)/bfd.h $(INCDIR)/obstack.h libbfd.h \
|
||||
$(INCDIR)/rs6000coff.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 \
|
||||
|
11
bfd/aoutx.h
11
bfd/aoutx.h
@ -700,7 +700,10 @@ bfd *abfd)
|
||||
asection *section ;
|
||||
arelent_chain *reloc = (arelent_chain *)bfd_alloc(abfd, sizeof(arelent_chain));
|
||||
strcpy(copy, cache_ptr->symbol.name);
|
||||
section = bfd_make_section(abfd,copy);
|
||||
section = bfd_get_section_by_name (abfd, copy);
|
||||
if (!section)
|
||||
section = bfd_make_section(abfd,copy);
|
||||
|
||||
switch ( (cache_ptr->type & N_TYPE) ) {
|
||||
case N_SETA:
|
||||
section->flags = SEC_CONSTRUCTOR;
|
||||
@ -1700,9 +1703,9 @@ DEFUN(NAME(aout,find_nearest_line),(abfd,
|
||||
}
|
||||
|
||||
int
|
||||
DEFUN(NAME(aout,sizeof_headers),(ignore_abfd, execable),
|
||||
bfd *ignore_abfd AND
|
||||
DEFUN(NAME(aout,sizeof_headers),(abfd, execable),
|
||||
bfd *abfd AND
|
||||
boolean execable)
|
||||
{
|
||||
return EXEC_BYTES_SIZE;
|
||||
return adata(abfd)->exec_bytes_size;
|
||||
}
|
||||
|
180
bfd/archures.c
180
bfd/archures.c
@ -22,11 +22,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
/*doc*
|
||||
@section Architectures
|
||||
BFD's idea of an architecture is implimented in @code{archures.c}. BFD
|
||||
keeps one atoms in a BFD describing the architecture of the data
|
||||
attached to the BFD; a pointer to a @code{bfd_arch_info_struct}.
|
||||
keeps one atom in a BFD describing the architecture of the data
|
||||
attached to the BFD; a pointer to a @code{bfd_arch_info_type}.
|
||||
|
||||
Pointers to structures can be requested independently of a bfd so that
|
||||
an archictectures information can be interrogated without access to an
|
||||
an architecture's information can be interrogated without access to an
|
||||
open bfd.
|
||||
|
||||
The arch information is provided by each architecture package. The
|
||||
@ -82,12 +82,13 @@ enum bfd_architecture
|
||||
bfd_arch_ns32k, {* National Semiconductor 32xxx *}
|
||||
bfd_arch_tahoe, {* CCI/Harris Tahoe *}
|
||||
bfd_arch_i860, {* Intel 860 *}
|
||||
bfd_arch_romp, {* IBM ROMP RS/6000 *}
|
||||
bfd_arch_romp, {* IBM ROMP PC/RT *}
|
||||
bfd_arch_alliant, {* Alliant *}
|
||||
bfd_arch_convex, {* Convex *}
|
||||
bfd_arch_m88k, {* Motorola 88xxx *}
|
||||
bfd_arch_pyramid, {* Pyramid Technology *}
|
||||
bfd_arch_h8300, {* Hitachi H8/300 *}
|
||||
bfd_arch_rs6000, {* IBM RS/6000 *}
|
||||
bfd_arch_last
|
||||
};
|
||||
*-
|
||||
@ -100,16 +101,16 @@ stuff
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include "bfd.h"
|
||||
#include "sysdep.h"
|
||||
#include "libbfd.h"
|
||||
|
||||
/*proto* bfd_arch_info_struct
|
||||
/*proto* bfd_arch_info
|
||||
This structure contains information on architectures.
|
||||
*+
|
||||
typedef int bfd_reloc_code_enum_type;
|
||||
typedef int bfd_reloc_code_type;
|
||||
|
||||
typedef struct bfd_arch_info_struct
|
||||
typedef struct bfd_arch_info
|
||||
{
|
||||
int bits_per_word;
|
||||
int bits_per_address;
|
||||
@ -120,52 +121,25 @@ typedef struct bfd_arch_info_struct
|
||||
CONST char *printable_name;
|
||||
{* true if this is the default machine for the architecture *}
|
||||
boolean the_default;
|
||||
CONST struct bfd_arch_info_struct * EXFUN((*compatible),(CONST struct bfd_arch_info_struct *a,
|
||||
CONST struct bfd_arch_info_struct *b));
|
||||
CONST struct bfd_arch_info * EXFUN((*compatible),(CONST struct bfd_arch_info *a,
|
||||
CONST struct bfd_arch_info *b));
|
||||
|
||||
|
||||
boolean EXFUN((*scan),(CONST struct bfd_arch_info_struct *,CONST char *));
|
||||
boolean EXFUN((*scan),(CONST struct bfd_arch_info *,CONST char *));
|
||||
unsigned int EXFUN((*disassemble),(bfd_vma addr, CONST char *data,
|
||||
PTR stream));
|
||||
CONST struct reloc_howto_struct *EXFUN((*reloc_type_lookup), (bfd_reloc_code_enum_type code));
|
||||
CONST struct reloc_howto_struct *EXFUN((*reloc_type_lookup), (CONST struct
|
||||
bfd_arch_info *,
|
||||
bfd_reloc_code_type code));
|
||||
|
||||
struct bfd_arch_info_struct *next;
|
||||
struct bfd_arch_info *next;
|
||||
|
||||
} bfd_arch_info_struct_type;
|
||||
} bfd_arch_info_type;
|
||||
|
||||
|
||||
*-
|
||||
*/
|
||||
|
||||
bfd_arch_info_struct_type *bfd_arch_info_list;
|
||||
|
||||
/*proto* bfd_printable_arch_mach
|
||||
Return a printable string representing the architecture and machine
|
||||
type.
|
||||
|
||||
NB. The use of this routine is depreciated.
|
||||
|
||||
*; PROTO(CONST char *,bfd_printable_arch_mach,
|
||||
(enum bfd_architecture arch, unsigned long machine));
|
||||
*/
|
||||
|
||||
CONST char *
|
||||
DEFUN(bfd_printable_arch_mach,(arch, machine),
|
||||
enum bfd_architecture arch AND
|
||||
unsigned long machine)
|
||||
{
|
||||
bfd_arch_info_struct_type *ap;
|
||||
bfd_check_init();
|
||||
for (ap = bfd_arch_info_list;
|
||||
ap != (bfd_arch_info_struct_type *)NULL;
|
||||
ap = ap->next) {
|
||||
if (ap->arch == arch &&
|
||||
((ap->mach == machine) || (ap->the_default && machine == 0))) {
|
||||
return ap->printable_name;
|
||||
}
|
||||
}
|
||||
return "UNKNOWN!";
|
||||
}
|
||||
bfd_arch_info_type *bfd_arch_info_list;
|
||||
|
||||
|
||||
/*proto* bfd_printable_name
|
||||
@ -193,26 +167,24 @@ supports any cpu which could be described with the name provided. The
|
||||
routine returns a pointer to an arch_info structure if a machine is
|
||||
found, otherwise NULL.
|
||||
|
||||
*; bfd_arch_info_struct_type *EXFUN(bfd_scan_arch,(CONST char *));
|
||||
*; bfd_arch_info_type *EXFUN(bfd_scan_arch,(CONST char *));
|
||||
*/
|
||||
|
||||
bfd_arch_info_struct_type *
|
||||
bfd_arch_info_type *
|
||||
DEFUN(bfd_scan_arch,(string),
|
||||
CONST char *string)
|
||||
{
|
||||
struct bfd_arch_info_struct *ap;
|
||||
struct bfd_arch_info *ap;
|
||||
|
||||
/* Look through all the installed architectures */
|
||||
for (ap = bfd_arch_info_list;
|
||||
ap != (bfd_arch_info_struct_type *)NULL;
|
||||
ap != (bfd_arch_info_type *)NULL;
|
||||
ap = ap->next) {
|
||||
/* Don't bother with anything if the first chars don't match */
|
||||
if (ap->arch_name[0] != string[0])
|
||||
continue;
|
||||
|
||||
if (ap->scan(ap, string))
|
||||
return ap;
|
||||
}
|
||||
return (bfd_arch_info_struct_type *)NULL;
|
||||
return (bfd_arch_info_type *)NULL;
|
||||
}
|
||||
|
||||
|
||||
@ -224,12 +196,12 @@ denominator between the two architectures and machine types implied by
|
||||
the BFDs and returns a pointer to an arch_info structure describing
|
||||
the compatible machine.
|
||||
|
||||
*; CONST bfd_arch_info_struct_type *EXFUN(bfd_arch_get_compatible,
|
||||
*; CONST bfd_arch_info_type *EXFUN(bfd_arch_get_compatible,
|
||||
(CONST bfd *abfd,
|
||||
CONST bfd *bbfd));
|
||||
*/
|
||||
|
||||
CONST bfd_arch_info_struct_type *
|
||||
CONST bfd_arch_info_type *
|
||||
DEFUN(bfd_arch_get_compatible,(abfd, bbfd),
|
||||
CONST bfd *abfd AND
|
||||
CONST bfd *bbfd)
|
||||
@ -244,11 +216,11 @@ CONST bfd *bbfd)
|
||||
What bfds are seeded with
|
||||
|
||||
*+
|
||||
extern bfd_arch_info_struct_type bfd_default_arch_struct;
|
||||
extern bfd_arch_info_type bfd_default_arch_struct;
|
||||
*-
|
||||
*/
|
||||
|
||||
bfd_arch_info_struct_type bfd_default_arch_struct =
|
||||
bfd_arch_info_type bfd_default_arch_struct =
|
||||
{
|
||||
32,32,8,bfd_arch_unknown,0,"unknown","unknown",true,
|
||||
bfd_default_compatible, bfd_default_scan,
|
||||
@ -257,13 +229,13 @@ bfd_arch_info_struct_type bfd_default_arch_struct =
|
||||
|
||||
/*proto* bfd_set_arch_info
|
||||
|
||||
*; void EXFUN(bfd_set_arch_info,(bfd *, bfd_arch_info_struct_type *));
|
||||
*; void EXFUN(bfd_set_arch_info,(bfd *, bfd_arch_info_type *));
|
||||
|
||||
*/
|
||||
|
||||
void DEFUN(bfd_set_arch_info,(abfd, arg),
|
||||
bfd *abfd AND
|
||||
bfd_arch_info_struct_type *arg)
|
||||
bfd_arch_info_type *arg)
|
||||
{
|
||||
abfd->arch_info = arg;
|
||||
}
|
||||
@ -284,15 +256,15 @@ boolean DEFUN(bfd_default_set_arch_mach,(abfd, arch, mach),
|
||||
enum bfd_architecture arch AND
|
||||
unsigned long mach)
|
||||
{
|
||||
static struct bfd_arch_info_struct *old_ptr = &bfd_default_arch_struct;
|
||||
static struct bfd_arch_info *old_ptr = &bfd_default_arch_struct;
|
||||
boolean found = false;
|
||||
/* run through the table to find the one we want, we keep a little
|
||||
cache to speed things up */
|
||||
if (old_ptr == 0 || arch != old_ptr->arch || mach != old_ptr->mach) {
|
||||
bfd_arch_info_struct_type *ptr;
|
||||
old_ptr = (bfd_arch_info_struct_type *)NULL;
|
||||
bfd_arch_info_type *ptr;
|
||||
old_ptr = (bfd_arch_info_type *)NULL;
|
||||
for (ptr = bfd_arch_info_list;
|
||||
ptr != (bfd_arch_info_struct_type *)NULL;
|
||||
ptr != (bfd_arch_info_type *)NULL;
|
||||
ptr= ptr->next) {
|
||||
if (ptr->arch == arch &&
|
||||
((ptr->mach == mach) || (ptr->the_default && mach == 0))) {
|
||||
@ -385,6 +357,7 @@ extern void EXFUN(bfd_vax_arch,(void));
|
||||
extern void EXFUN(bfd_a29k_arch,(void));
|
||||
extern void EXFUN(bfd_mips_arch,(void));
|
||||
extern void EXFUN(bfd_i386_arch,(void));
|
||||
extern void EXFUN(bfd_rs6000_arch,(void));
|
||||
|
||||
|
||||
|
||||
@ -402,6 +375,7 @@ static void EXFUN((*archures_init_table[]),()) =
|
||||
bfd_i960_arch,
|
||||
bfd_m68k_arch,
|
||||
bfd_vax_arch,
|
||||
bfd_rs6000_arch,
|
||||
#endif
|
||||
0
|
||||
};
|
||||
@ -434,12 +408,12 @@ DEFUN_VOID(bfd_arch_init)
|
||||
|
||||
Link the provided arch info structure into the list
|
||||
|
||||
*; void EXFUN(bfd_arch_linkin,(bfd_arch_info_struct_type *));
|
||||
*; void EXFUN(bfd_arch_linkin,(bfd_arch_info_type *));
|
||||
|
||||
*/
|
||||
|
||||
void DEFUN(bfd_arch_linkin,(ptr),
|
||||
bfd_arch_info_struct_type *ptr)
|
||||
bfd_arch_info_type *ptr)
|
||||
{
|
||||
ptr->next = bfd_arch_info_list;
|
||||
bfd_arch_info_list = ptr;
|
||||
@ -450,17 +424,17 @@ void DEFUN(bfd_arch_linkin,(ptr),
|
||||
|
||||
The default function for testing for compatibility
|
||||
|
||||
*; CONST bfd_arch_info_struct_type *EXFUN(bfd_default_compatible,
|
||||
(CONST bfd_arch_info_struct_type *a,
|
||||
CONST bfd_arch_info_struct_type *b));
|
||||
*; CONST bfd_arch_info_type *EXFUN(bfd_default_compatible,
|
||||
(CONST bfd_arch_info_type *a,
|
||||
CONST bfd_arch_info_type *b));
|
||||
*/
|
||||
|
||||
CONST bfd_arch_info_struct_type *
|
||||
CONST bfd_arch_info_type *
|
||||
DEFUN(bfd_default_compatible,(a,b),
|
||||
CONST bfd_arch_info_struct_type *a AND
|
||||
CONST bfd_arch_info_struct_type *b)
|
||||
CONST bfd_arch_info_type *a AND
|
||||
CONST bfd_arch_info_type *b)
|
||||
{
|
||||
if(a->arch != b->arch) return (bfd_arch_info_struct_type *)NULL;
|
||||
if(a->arch != b->arch) return NULL;
|
||||
|
||||
if (a->mach > b->mach) {
|
||||
return a;
|
||||
@ -475,13 +449,13 @@ DEFUN(bfd_default_compatible,(a,b),
|
||||
The default function for working out whether this is an architecture
|
||||
hit and a machine hit
|
||||
|
||||
*; boolean EXFUN(bfd_default_scan,(CONST struct bfd_arch_info_struct *, CONST char *));
|
||||
*; boolean EXFUN(bfd_default_scan,(CONST struct bfd_arch_info *, CONST char *));
|
||||
|
||||
*/
|
||||
|
||||
boolean
|
||||
DEFUN(bfd_default_scan,(info, string),
|
||||
CONST struct bfd_arch_info_struct *info AND
|
||||
CONST struct bfd_arch_info *info AND
|
||||
CONST char *string)
|
||||
{
|
||||
CONST char *ptr_src;
|
||||
@ -554,6 +528,10 @@ CONST char *string)
|
||||
arch = bfd_arch_i860;
|
||||
break;
|
||||
|
||||
case 6000:
|
||||
arch = bfd_arch_rs6000;
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@ -571,13 +549,65 @@ CONST char *string)
|
||||
|
||||
/*proto* bfd_get_arch_info
|
||||
|
||||
*; bfd_arch_info_struct_type * EXFUN(bfd_get_arch_info,(bfd *));
|
||||
*; bfd_arch_info_type * EXFUN(bfd_get_arch_info,(bfd *));
|
||||
|
||||
*/
|
||||
|
||||
bfd_arch_info_struct_type *
|
||||
bfd_arch_info_type *
|
||||
DEFUN(bfd_get_arch_info,(abfd),
|
||||
bfd *abfd)
|
||||
{
|
||||
return abfd->arch_info;
|
||||
}
|
||||
|
||||
|
||||
/*proto* bfd_lookup_arch
|
||||
|
||||
*; bfd_arch_info_type * EXFUN(bfd_lookup_arch,(enum
|
||||
bfd_architecture arch,long machine));
|
||||
|
||||
Look for the architecure info struct which matches the arguments
|
||||
given. A machine of 0 will match the machine/architecture structure which
|
||||
marks itself as the default.
|
||||
|
||||
*/
|
||||
|
||||
bfd_arch_info_type *
|
||||
DEFUN(bfd_lookup_arch,(arch, machine),
|
||||
enum bfd_architecture arch AND
|
||||
long machine)
|
||||
{
|
||||
bfd_arch_info_type *ap;
|
||||
bfd_check_init();
|
||||
for (ap = bfd_arch_info_list;
|
||||
ap != (bfd_arch_info_type *)NULL;
|
||||
ap = ap->next) {
|
||||
if (ap->arch == arch &&
|
||||
((ap->mach == machine) || (ap->the_default && machine == 0))) {
|
||||
return ap;
|
||||
}
|
||||
}
|
||||
return (bfd_arch_info_type *)NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*proto* bfd_printable_arch_mach
|
||||
Return a printable string representing the architecture and machine
|
||||
type.
|
||||
|
||||
NB. The use of this routine is depreciated.
|
||||
|
||||
*; PROTO(CONST char *,bfd_printable_arch_mach,
|
||||
(enum bfd_architecture arch, unsigned long machine));
|
||||
*/
|
||||
|
||||
CONST char *
|
||||
DEFUN(bfd_printable_arch_mach,(arch, machine),
|
||||
enum bfd_architecture arch AND
|
||||
unsigned long machine)
|
||||
{
|
||||
bfd_arch_info_type *ap = bfd_lookup_arch(arch, machine);
|
||||
if(ap) return ap->printable_name;
|
||||
return "UNKNOWN!";
|
||||
}
|
||||
|
20
bfd/bfd-in.h
20
bfd/bfd-in.h
@ -204,7 +204,8 @@ typedef enum bfd_error {
|
||||
no_more_archived_files, malformed_archive,
|
||||
symbol_not_found, file_not_recognized,
|
||||
file_ambiguously_recognized, no_contents,
|
||||
bfd_error_nonrepresentable_section,
|
||||
bfd_error_nonrepresentable_section,
|
||||
no_debug_section,
|
||||
invalid_error_code} bfd_ec;
|
||||
|
||||
extern bfd_ec bfd_error;
|
||||
@ -220,10 +221,10 @@ PROTO (void, bfd_perror, (CONST char *message));
|
||||
|
||||
typedef enum bfd_print_symbol
|
||||
{
|
||||
bfd_print_symbol_name_enum,
|
||||
bfd_print_symbol_type_enum,
|
||||
bfd_print_symbol_all_enum
|
||||
} bfd_print_symbol_enum_type;
|
||||
bfd_print_symbol_name,
|
||||
bfd_print_symbol_more,
|
||||
bfd_print_symbol_all
|
||||
} bfd_print_symbol_type;
|
||||
|
||||
|
||||
|
||||
@ -269,7 +270,14 @@ CAT(NAME,_bfd_debug_info_start),\
|
||||
CAT(NAME,_bfd_debug_info_end),\
|
||||
CAT(NAME,_bfd_debug_info_accumulate)
|
||||
|
||||
#define COFF_SWAP_TABLE coff_swap_aux_in, coff_swap_sym_in, coff_swap_lineno_in,
|
||||
#define COFF_SWAP_TABLE \
|
||||
coff_swap_aux_in, coff_swap_sym_in, coff_swap_lineno_in, \
|
||||
coff_swap_aux_out, coff_swap_sym_out, \
|
||||
coff_swap_lineno_out, coff_swap_reloc_out, \
|
||||
coff_swap_filehdr_out, coff_swap_aouthdr_out, \
|
||||
coff_swap_scnhdr_out
|
||||
|
||||
|
||||
|
||||
/* User program access to BFD facilities */
|
||||
|
||||
|
23
bfd/bfd.c
23
bfd/bfd.c
@ -162,6 +162,7 @@ $};
|
||||
#include "sysdep.h"
|
||||
#include "libbfd.h"
|
||||
|
||||
#undef strerror
|
||||
extern char *strerror();
|
||||
|
||||
|
||||
@ -196,6 +197,7 @@ char *bfd_errmsgs[] = { "No error",
|
||||
"File format is ambiguous",
|
||||
"Section has no contents",
|
||||
"Nonrepresentable section on output",
|
||||
"Symbol needs debug section which does not exist",
|
||||
"#<Invalid error code>"
|
||||
};
|
||||
|
||||
@ -418,6 +420,27 @@ bfd_get_mtime (abfd)
|
||||
#define bfd_set_arch_mach(abfd, arch, mach)\
|
||||
BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
|
||||
|
||||
#define bfd_coff_swap_reloc_out(abfd, i, o) \
|
||||
BFD_SEND (abfd, _bfd_coff_swap_reloc_out, (abfd, i, o))
|
||||
|
||||
#define bfd_coff_swap_lineno_out(abfd, i, o) \
|
||||
BFD_SEND (abfd, _bfd_coff_swap_lineno_out, (abfd, i, o))
|
||||
|
||||
#define bfd_coff_swap_aux_out(abfd, i, t,c,o) \
|
||||
BFD_SEND (abfd, _bfd_coff_swap_aux_out, (abfd, i,t,c, o))
|
||||
|
||||
#define bfd_coff_swap_sym_out(abfd, i,o) \
|
||||
BFD_SEND (abfd, _bfd_coff_swap_sym_out, (abfd, i, o))
|
||||
|
||||
#define bfd_coff_swap_scnhdr_out(abfd, i,o) \
|
||||
BFD_SEND (abfd, _bfd_coff_swap_scnhdr_out, (abfd, i, o))
|
||||
|
||||
#define bfd_coff_swap_filehdr_out(abfd, i,o) \
|
||||
BFD_SEND (abfd, _bfd_coff_swap_filehdr_out, (abfd, i, o))
|
||||
|
||||
#define bfd_coff_swap_aouthdr_out(abfd, i,o) \
|
||||
BFD_SEND (abfd, _bfd_coff_swap_aouthdr_out, (abfd, i, o))
|
||||
|
||||
*-
|
||||
|
||||
*/
|
||||
|
718
bfd/coffcode.h
718
bfd/coffcode.h
File diff suppressed because it is too large
Load Diff
@ -111,6 +111,12 @@ sony) bfd_target=news ;;
|
||||
intel) bfd_target=${target_cpu}-coff ;;
|
||||
cbm) bfd_target=${target_cpu}-elf ;;
|
||||
|
||||
ibm) my_host=rs6000
|
||||
case "${target_cpu}" in
|
||||
rs6000) bfd_target=rs6000 ;;
|
||||
esac
|
||||
;;
|
||||
|
||||
amd)
|
||||
case "${target_os}" in
|
||||
ebmon) bfd_target=a29k-coff ;;
|
||||
|
@ -34,20 +34,19 @@ the list.
|
||||
* section prototypes::
|
||||
@end menu
|
||||
|
||||
@node Section Input, Section Output,,Sections
|
||||
@comment node-name, next, previous, up
|
||||
@node Section Input, Section Output, Sections, Sections
|
||||
@subsection Section Input
|
||||
When a BFD is opened for reading, the section structures are created
|
||||
and attatched to the BFD.
|
||||
and attached to the BFD.
|
||||
|
||||
Each section has a name which describes the section in the outside
|
||||
world - for example, @code{a.out} would contain at least three
|
||||
sections, called @code{.text}, @code{.data} and @code{.bss}.
|
||||
|
||||
Sometimes a BFD will contain more than the 'natural' number of
|
||||
sections. A back end may attatch other sections containing constructor
|
||||
sections. A back end may attach other sections containing constructor
|
||||
data, or an application may add a section (using bfd_make_section) to
|
||||
the sections attatched to an already open BFD. For example, the linker
|
||||
the sections attached to an already open BFD. For example, the linker
|
||||
creates a supernumary section @code{COMMON} for each input file's BFD
|
||||
to hold information about common storage.
|
||||
|
||||
@ -60,17 +59,17 @@ file doesn't contain raw data in sections, but data and relocation
|
||||
expressions intermixed, so the data area has to be parsed to get out
|
||||
the data and relocations.
|
||||
|
||||
@node Section Output,typedef asection,Section Input,Sections
|
||||
@node Section Output, typedef asection, Section Input, Sections
|
||||
@subsection Section Output
|
||||
To write a new object style BFD, the various sections to be written
|
||||
have to be created. They are attatched to the BFD in the same way as
|
||||
have to be created. They are attached to the BFD in the same way as
|
||||
input sections, data is written to the sections using
|
||||
@code{bfd_set_section_contents}.
|
||||
|
||||
The linker uses the fields @code{output_section} and
|
||||
@code{output_offset} to create an output file.
|
||||
|
||||
The data to be written comes from input sections attatched to the
|
||||
The data to be written comes from input sections attached to the
|
||||
output sections. The output section structure can be considered a
|
||||
filter for the input section, the output section determines the vma of
|
||||
the output data and the name, but the input section determines the
|
||||
@ -97,13 +96,13 @@ subsections, "A" at offset 0x0 (ie at vma 0x100) and "B" at offset
|
||||
*/
|
||||
|
||||
|
||||
#include "sysdep.h"
|
||||
#include "bfd.h"
|
||||
#include "sysdep.h"
|
||||
#include "libbfd.h"
|
||||
|
||||
|
||||
/*doc*
|
||||
@node typedef asection,section prototypes,Section Output,Sections
|
||||
@node typedef asection, section prototypes, Section Output, Sections
|
||||
@subsection typedef asection
|
||||
*/
|
||||
|
||||
@ -171,7 +170,7 @@ The section contains constructor information. This section type is
|
||||
used by the linker to create lists of constructors and destructors
|
||||
used by @code{g++}. When a back end sees a symbol which should be used
|
||||
in a constructor list, it creates a new section for the type of name
|
||||
(eg @code{__CTOR_LIST__}), attatches the symbol to it and builds a
|
||||
(eg @code{__CTOR_LIST__}), attaches the symbol to it and builds a
|
||||
relocation. To build the lists of constructors, all the linker has to
|
||||
to is catenate all the sections called @code{__CTOR_LIST__} and
|
||||
relocte the data contained within - exactly the operations it would
|
||||
@ -297,7 +296,7 @@ $} asection ;
|
||||
*/
|
||||
|
||||
/*doc*
|
||||
@node section prototypes,Section,typedef section,Sections
|
||||
@node section prototypes, , typedef asection, Sections
|
||||
@subsection section prototypes
|
||||
|
||||
*/
|
||||
@ -322,10 +321,10 @@ DEFUN(bfd_get_section_by_name,(abfd, name),
|
||||
|
||||
|
||||
/*proto* bfd_make_section
|
||||
This function creates a new empty section called @var{name} and attatches it
|
||||
This function creates a new empty section called @var{name} and attaches it
|
||||
to the end of the chain of sections for the BFD supplied. An attempt to
|
||||
create a section with a name which is already in use, returns the old
|
||||
section by that name instead.
|
||||
create a section with a name which is already in use, returns NULL without
|
||||
changing the section chain.
|
||||
|
||||
Possible errors are:
|
||||
@table @code
|
||||
@ -355,7 +354,7 @@ DEFUN(bfd_make_section,(abfd, name),
|
||||
}
|
||||
|
||||
while (sect) {
|
||||
if (!strcmp(sect->name, name)) return sect;
|
||||
if (!strcmp(sect->name, name)) return NULL;
|
||||
prev = §->next;
|
||||
sect = sect->next;
|
||||
}
|
||||
@ -418,7 +417,7 @@ DEFUN(bfd_set_section_flags,(abfd, section, flags),
|
||||
|
||||
|
||||
/*proto* bfd_map_over_sections
|
||||
Calls the provided function @var{func} for each section attatched to
|
||||
Calls the provided function @var{func} for each section attached to
|
||||
the BFD @var{abfd}, passing @var{obj} as an argument. The function
|
||||
will be called as if by
|
||||
|
||||
|
@ -341,6 +341,7 @@ extern bfd_target i386coff_vec;
|
||||
extern bfd_target i386aout_vec;
|
||||
extern bfd_target a29kcoff_big_vec;
|
||||
extern bfd_target trad_core_vec;
|
||||
extern bfd_target rs6000coff_vec;
|
||||
|
||||
#ifdef SELECT_VECS
|
||||
|
||||
@ -387,6 +388,7 @@ extern bfd_target DEFAULT_VECTOR;
|
||||
#define I386COFF_VEC i386coff_vec
|
||||
#define I386AOUT_VEC i386aout_vec
|
||||
#define A29KCOFF_BIG_VEC a29kcoff_big_vec
|
||||
#define RS6000COFF_VEC rs6000coff_vec
|
||||
#endif
|
||||
|
||||
bfd_target *target_vector[] = {
|
||||
@ -473,6 +475,10 @@ bfd_target *target_vector[] = {
|
||||
&trad_core_vec,
|
||||
#endif
|
||||
|
||||
#ifdef RS6000COFF_VEC
|
||||
&RS6000COFF_VEC,
|
||||
#endif
|
||||
|
||||
NULL, /* end of list marker */
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user