Insert the incidentals and things I forgot to ci last time, same log message:
Mon Sep 30 15:13:46 1991 Steve Chamberlain (steve at cygnus.com) * cpu-a29k.c, cpu-i386.c, cpu-m68k.c, cpu-mips.c, cpu-vax.c, cpu-h8300.c, cpu-i960.c, cpu-m88k.c, cpu-sparc.c: added. These files will eventually contain processor specific bits for bfd, like strange relocation information and dis/assembly. So far only the H8 has been even partially done. This work also ties in with the change in handling architectures. * amdcoff.c: (a29k_reloc) fix error message. * aout-f1.h: (choose_reloc_size) now calls bfd_get_arch to discover the architecture of the bfd. (sunos4_callback) calls the function bfd_set_arch_mach rather than stuffing stuff directly into the bfd. (sunos4_write_object_contents), changed names of accessor functions. * aoutx.h: (set_arch_mach) now calls bfd_default_set_arch_mach to setup the environment. * archive.c: (bfd_slurp_coff_armap) coff archives always have the headers in big endian format, regardless of the endianess of the host or target. * archures.c: totally changed. Now an architecture is represented with a pointer to an info structure rather than an enumerated type and a long. The old info is available as two elements in the structure. Future enhancements to architecure support will involve pointers to methods being placed into the info structure. * bfd.c: changed the definition of the bfd structure for the new architecture stuff. * bout.c: (b_out_set_arch_mach) changed to use the new architecture mechanism. * coffcode.h: (coff_set_arch_mach, coff_set_flags) changed to use the new architecture mechanism. * configure.in: added h8 stuff. * ieee.c: too many changes to note. Now ieee files written with bfd gas and ld can be read by gld and ieee only linkers and simulators. * libbfd.c, libbfd.h: changed prototype of bfd_write. * newsos3.c: (newos3_callback) now calls bfd_set_arch_mach rather than fixing the structure directly. * oasys.c: (oasys_object_p) now calls bfd_default_set_arch_mach rather than fixing the structure directly. * opncls.c: (new_bfd) makes sure that bfd_init has been called before opening a bfd. * srec.c: (srec_set_arch_mach) now calls bfd_default_set_arch_mach rather than fixing the structure directly. * targets.c: (target_vector) now by defining SELECT_VECS (perhaps in the t/hmake file) a user can select which backends they want linked with bfd without changing the source. * init.c: new, looks after initializing modules. * howto.c: for future use, will allow an application to work out what cookie to use as a handle on a relcoatio howto.
This commit is contained in:
parent
7fe11a82b4
commit
63ffe5ef86
|
@ -59,6 +59,17 @@ icoff.c
|
||||||
ieee.c
|
ieee.c
|
||||||
libaout.h
|
libaout.h
|
||||||
libbfd-in.h
|
libbfd-in.h
|
||||||
|
cpu-a29k.c
|
||||||
|
cpu-i386.c
|
||||||
|
cpu-m68k.c
|
||||||
|
cpu-mips.c
|
||||||
|
cpu-vax.c
|
||||||
|
cpu-h8300.c
|
||||||
|
cpu-i960.c
|
||||||
|
cpu-m88k.c
|
||||||
|
init.c
|
||||||
|
howto.c
|
||||||
|
cpu-sparc.c
|
||||||
libbfd.c
|
libbfd.c
|
||||||
libbfd.h
|
libbfd.h
|
||||||
libcoff-in.h
|
libcoff-in.h
|
||||||
|
@ -102,6 +113,77 @@ echo Done in `pwd`.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# $Log$
|
# $Log$
|
||||||
|
# Revision 1.21 1991/10/01 03:55:34 steve
|
||||||
|
# Insert the incidentals and things I forgot to ci last time, same log message:
|
||||||
|
#
|
||||||
|
# Mon Sep 30 15:13:46 1991 Steve Chamberlain (steve at cygnus.com)
|
||||||
|
#
|
||||||
|
# * cpu-a29k.c, cpu-i386.c, cpu-m68k.c, cpu-mips.c, cpu-vax.c,
|
||||||
|
# cpu-h8300.c, cpu-i960.c, cpu-m88k.c, cpu-sparc.c: added. These
|
||||||
|
# files will eventually contain processor specific bits for bfd,
|
||||||
|
# like strange relocation information and dis/assembly. So far only
|
||||||
|
# the H8 has been even partially done. This work also ties in with
|
||||||
|
# the change in handling architectures.
|
||||||
|
#
|
||||||
|
# * amdcoff.c: (a29k_reloc) fix error message.
|
||||||
|
#
|
||||||
|
# * aout-f1.h: (choose_reloc_size) now calls bfd_get_arch to
|
||||||
|
# discover the architecture of the bfd. (sunos4_callback) calls the
|
||||||
|
# function bfd_set_arch_mach rather than stuffing stuff directly
|
||||||
|
# into the bfd. (sunos4_write_object_contents), changed names of
|
||||||
|
# accessor functions.
|
||||||
|
#
|
||||||
|
# * aoutx.h: (set_arch_mach) now calls bfd_default_set_arch_mach to
|
||||||
|
# setup the environment.
|
||||||
|
#
|
||||||
|
# * archive.c: (bfd_slurp_coff_armap) coff archives always have the
|
||||||
|
# headers in big endian format, regardless of the endianess of the
|
||||||
|
# host or target.
|
||||||
|
#
|
||||||
|
# * archures.c: totally changed. Now an architecture is represented
|
||||||
|
# with a pointer to an info structure rather than an enumerated type
|
||||||
|
# and a long. The old info is available as two elements in the
|
||||||
|
# structure. Future enhancements to architecure support will
|
||||||
|
# involve pointers to methods being placed into the info structure.
|
||||||
|
#
|
||||||
|
# * bfd.c: changed the definition of the bfd structure for the new
|
||||||
|
# architecture stuff.
|
||||||
|
#
|
||||||
|
# * bout.c: (b_out_set_arch_mach) changed to use the new
|
||||||
|
# architecture mechanism.
|
||||||
|
#
|
||||||
|
# * coffcode.h: (coff_set_arch_mach, coff_set_flags) changed to use
|
||||||
|
# the new architecture mechanism.
|
||||||
|
#
|
||||||
|
# * configure.in: added h8 stuff.
|
||||||
|
#
|
||||||
|
# * ieee.c: too many changes to note. Now ieee files written with
|
||||||
|
# bfd gas and ld can be read by gld and ieee only linkers and
|
||||||
|
# simulators.
|
||||||
|
#
|
||||||
|
# * libbfd.c, libbfd.h: changed prototype of bfd_write.
|
||||||
|
#
|
||||||
|
# * newsos3.c: (newos3_callback) now calls bfd_set_arch_mach rather
|
||||||
|
# than fixing the structure directly.
|
||||||
|
#
|
||||||
|
# * oasys.c: (oasys_object_p) now calls bfd_default_set_arch_mach rather
|
||||||
|
# than fixing the structure directly.
|
||||||
|
#
|
||||||
|
# * opncls.c: (new_bfd) makes sure that bfd_init has been called
|
||||||
|
# before opening a bfd.
|
||||||
|
#
|
||||||
|
# * srec.c: (srec_set_arch_mach) now calls bfd_default_set_arch_mach
|
||||||
|
# rather than fixing the structure directly.
|
||||||
|
#
|
||||||
|
# * targets.c: (target_vector) now by defining SELECT_VECS (perhaps
|
||||||
|
# in the t/hmake file) a user can select which backends they want
|
||||||
|
# linked with bfd without changing the source.
|
||||||
|
#
|
||||||
|
# * init.c: new, looks after initializing modules.
|
||||||
|
#
|
||||||
|
# * howto.c: for future use, will allow an application to work out
|
||||||
|
# what cookie to use as a handle on a relcoatio howto.
|
||||||
|
#
|
||||||
# Revision 1.20 1991/09/04 03:59:15 rich
|
# Revision 1.20 1991/09/04 03:59:15 rich
|
||||||
# Added "recover"'ability.
|
# Added "recover"'ability.
|
||||||
#
|
#
|
||||||
|
|
|
@ -41,12 +41,16 @@ CFLAGS = -g $(HDEFINES) $(TDEFINES) $(CSEARCH) $(CSWITCHES) # -DINTEL960VERSION
|
||||||
|
|
||||||
|
|
||||||
BFD_LIBS = libbfd.o opncls.o bfd.o archive.o targets.o cache.o \
|
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
|
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_BACKENDS = oasys.o ieee.o srec.o \
|
BFD_BACKENDS = oasys.o ieee.o srec.o \
|
||||||
aout64.o aout32.o demo64.o sunos.o newsos3.o bout.o \
|
aout64.o aout32.o demo64.o sunos.o newsos3.o bout.o \
|
||||||
icoff.o amdcoff.o m68kcoff.o i386coff.o m88k-bcs.o ecoff.o
|
icoff.o amdcoff.o m68kcoff.o i386coff.o m88k-bcs.o ecoff.o
|
||||||
|
|
||||||
|
|
||||||
OPTIONAL_BACKENDS = trad-core.o
|
OPTIONAL_BACKENDS = trad-core.o
|
||||||
|
|
||||||
BFD_H=$(INCDIR)/bfd.h
|
BFD_H=$(INCDIR)/bfd.h
|
||||||
|
@ -56,15 +60,18 @@ SYSDEP_H=$(INCDIR)/sysdep.h
|
||||||
CFILES = libbfd.c opncls.c bfd.c archive.c targets.c cache.c archures.c \
|
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 \
|
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 \
|
||||||
format.c section.c core.c syms.c reloc.c \
|
format.c section.c core.c syms.c reloc.c init.c \
|
||||||
m88k-bcs.c ecoff.c trad-core.c newsos3.c bout.c
|
m88k-bcs.c ecoff.c trad-core.c newsos3.c bout.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
|
||||||
|
|
||||||
|
|
||||||
STAGESTUFF = $(TARGETLIB) $(OFILES)
|
STAGESTUFF = $(TARGETLIB) $(OFILES)
|
||||||
|
|
||||||
all: $(TARGETLIB)
|
all: $(TARGETLIB)
|
||||||
|
|
||||||
# XDEPFILES comes from the host config; TDEPFILES from the target config.
|
# XDEPFILES comes from the host config; TDEPFILES from the target config.
|
||||||
OFILES = $(BFD_LIBS) $(BFD_BACKENDS) $(XDEPFILES) $(TDEPFILES)
|
OFILES = $(BFD_LIBS) $(BFD_BACKENDS) $(BFD_MACHINES) $(XDEPFILES) $(TDEPFILES)
|
||||||
|
|
||||||
$(TARGETLIB): $(OFILES)
|
$(TARGETLIB): $(OFILES)
|
||||||
rm -f $(TARGETLIB)
|
rm -f $(TARGETLIB)
|
||||||
|
@ -202,6 +209,9 @@ headers:
|
||||||
cp $(docdir)/bfd.h $(BFD_H)
|
cp $(docdir)/bfd.h $(BFD_H)
|
||||||
cp $(docdir)/libbfd.h $(srcdir)/libbfd.h
|
cp $(docdir)/libbfd.h $(srcdir)/libbfd.h
|
||||||
cp $(docdir)/libcoff.h $(srcdir)/libcoff.h
|
cp $(docdir)/libcoff.h $(srcdir)/libcoff.h
|
||||||
|
rm -f $(docdir)/bfd-in.h
|
||||||
|
rm -f $(docdir)/libbfd-in.h
|
||||||
|
rm -f $(docdir)/libcoff-in.h
|
||||||
|
|
||||||
bfd.info:
|
bfd.info:
|
||||||
( cd $(docdir); $(MAKE) bfd.info)
|
( cd $(docdir); $(MAKE) bfd.info)
|
||||||
|
|
|
@ -0,0 +1,346 @@
|
||||||
|
/* A -*- C -*- header file for the bfd library
|
||||||
|
Copyright 1990, 1991 Free Software Foundation, Inc.
|
||||||
|
Contributed by Cygnus Support.
|
||||||
|
|
||||||
|
This file is part of BFD, the Binary File Descriptor library.
|
||||||
|
|
||||||
|
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 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
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 this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
|
|
||||||
|
/* bfd.h -- The only header file required by users of the bfd library
|
||||||
|
|
||||||
|
This file is generated from various .c files, if you change it, your
|
||||||
|
bits may be lost.
|
||||||
|
|
||||||
|
All the prototypes and definitions following the comment "THE FOLLOWING
|
||||||
|
IS EXTRACTED FROM THE SOURCE" are extracted from the source files for
|
||||||
|
BFD. If you change it, someone oneday will extract it from the source
|
||||||
|
again, and your changes will be lost. To save yourself from this bind,
|
||||||
|
change the definitions in the source in the bfd directory. Type "make
|
||||||
|
docs" and then "make headers" in that directory, and magically this file
|
||||||
|
will change to reflect your changes.
|
||||||
|
|
||||||
|
If you don't have the tools to perform the extraction, then you are
|
||||||
|
safe from someone on your system trampling over your header files.
|
||||||
|
You should still maintain the equivalence between the source and this
|
||||||
|
file though; every change you make to the .c file should be reflected
|
||||||
|
here. */
|
||||||
|
|
||||||
|
#ifndef __BFD_H_SEEN__
|
||||||
|
#define __BFD_H_SEEN__
|
||||||
|
|
||||||
|
#include "ansidecl.h"
|
||||||
|
#include "obstack.h"
|
||||||
|
|
||||||
|
/* Make it easier to declare prototypes (puts conditional here) */
|
||||||
|
#ifndef PROTO
|
||||||
|
# if __STDC__
|
||||||
|
# define PROTO(type, name, arglist) type name arglist
|
||||||
|
# else
|
||||||
|
# define PROTO(type, name, arglist) type name ()
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BFD_VERSION "1.15"
|
||||||
|
|
||||||
|
/* forward declaration */
|
||||||
|
typedef struct _bfd bfd;
|
||||||
|
|
||||||
|
/* General rules: functions which are boolean return true on success
|
||||||
|
and false on failure (unless they're a predicate). -- bfd.doc */
|
||||||
|
/* I'm sure this is going to break something and someone is going to
|
||||||
|
force me to change it. */
|
||||||
|
typedef enum boolean {false, true} boolean;
|
||||||
|
|
||||||
|
/* Try to avoid breaking stuff */
|
||||||
|
typedef long int file_ptr;
|
||||||
|
|
||||||
|
/* Support for different sizes of target format ints and addresses */
|
||||||
|
|
||||||
|
#ifdef HOST_64_BIT
|
||||||
|
typedef HOST_64_BIT rawdata_offset;
|
||||||
|
typedef HOST_64_BIT bfd_vma;
|
||||||
|
typedef HOST_64_BIT bfd_word;
|
||||||
|
typedef HOST_64_BIT bfd_offset;
|
||||||
|
typedef HOST_64_BIT bfd_size_type;
|
||||||
|
typedef HOST_64_BIT symvalue;
|
||||||
|
typedef HOST_64_BIT bfd_64_type;
|
||||||
|
#define fprintf_vma(s,x) \
|
||||||
|
fprintf(s,"%08x%08x", uint64_typeHIGH(x), uint64_typeLOW(x))
|
||||||
|
#define printf_vma(x) \
|
||||||
|
printf( "%08x%08x", uint64_typeHIGH(x), uint64_typeLOW(x))
|
||||||
|
#else
|
||||||
|
typedef struct {int a,b;} bfd_64_type;
|
||||||
|
typedef unsigned long rawdata_offset;
|
||||||
|
typedef unsigned long bfd_vma;
|
||||||
|
typedef unsigned long bfd_offset;
|
||||||
|
typedef unsigned long bfd_word;
|
||||||
|
typedef unsigned long bfd_size;
|
||||||
|
typedef unsigned long symvalue;
|
||||||
|
typedef unsigned long bfd_size_type;
|
||||||
|
#define printf_vma(x) printf( "%08lx", x)
|
||||||
|
#define fprintf_vma(s,x) fprintf(s, "%08lx", x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef unsigned int flagword; /* 32 bits of flags */
|
||||||
|
|
||||||
|
/** File formats */
|
||||||
|
|
||||||
|
typedef enum bfd_format {
|
||||||
|
bfd_unknown = 0, /* file format is unknown */
|
||||||
|
bfd_object, /* linker/assember/compiler output */
|
||||||
|
bfd_archive, /* object archive file */
|
||||||
|
bfd_core, /* core dump */
|
||||||
|
bfd_type_end} /* marks the end; don't use it! */
|
||||||
|
bfd_format;
|
||||||
|
|
||||||
|
/* Object file flag values */
|
||||||
|
#define NO_FLAGS 0
|
||||||
|
#define HAS_RELOC 001
|
||||||
|
#define EXEC_P 002
|
||||||
|
#define HAS_LINENO 004
|
||||||
|
#define HAS_DEBUG 010
|
||||||
|
#define HAS_SYMS 020
|
||||||
|
#define HAS_LOCALS 040
|
||||||
|
#define DYNAMIC 0100
|
||||||
|
#define WP_TEXT 0200
|
||||||
|
#define D_PAGED 0400
|
||||||
|
|
||||||
|
|
||||||
|
/* symbols and relocation */
|
||||||
|
|
||||||
|
typedef unsigned long symindex;
|
||||||
|
|
||||||
|
#define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
|
||||||
|
|
||||||
|
typedef enum bfd_symclass {
|
||||||
|
bfd_symclass_unknown = 0,
|
||||||
|
bfd_symclass_fcommon, /* fortran common symbols */
|
||||||
|
bfd_symclass_global, /* global symbol, what a surprise */
|
||||||
|
bfd_symclass_debugger, /* some debugger symbol */
|
||||||
|
bfd_symclass_undefined /* none known */
|
||||||
|
} symclass;
|
||||||
|
|
||||||
|
|
||||||
|
typedef int symtype; /* Who knows, yet? */
|
||||||
|
|
||||||
|
|
||||||
|
/* general purpose part of a symbol;
|
||||||
|
target specific parts will be found in libcoff.h, liba.out.h etc */
|
||||||
|
|
||||||
|
|
||||||
|
#define bfd_get_section(x) ((x)->section)
|
||||||
|
#define bfd_get_output_section(x) ((x)->section->output_section)
|
||||||
|
#define bfd_set_section(x,y) ((x)->section) = (y)
|
||||||
|
#define bfd_asymbol_base(x) ((x)->section?((x)->section->vma):0)
|
||||||
|
#define bfd_asymbol_value(x) (bfd_asymbol_base(x) + x->value)
|
||||||
|
#define bfd_asymbol_name(x) ((x)->name)
|
||||||
|
|
||||||
|
/* This is a type pun with struct ranlib on purpose! */
|
||||||
|
typedef struct carsym {
|
||||||
|
char *name;
|
||||||
|
file_ptr file_offset; /* look here to find the file */
|
||||||
|
} carsym; /* to make these you call a carsymogen */
|
||||||
|
|
||||||
|
|
||||||
|
/* Used in generating armaps. Perhaps just a forward definition would do? */
|
||||||
|
struct orl { /* output ranlib */
|
||||||
|
char **name; /* symbol name */
|
||||||
|
file_ptr pos; /* bfd* or file position */
|
||||||
|
int namidx; /* index into string table */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Linenumber stuff */
|
||||||
|
typedef struct lineno_cache_entry {
|
||||||
|
unsigned int line_number; /* Linenumber from start of function*/
|
||||||
|
union {
|
||||||
|
struct symbol_cache_entry *sym; /* Function name */
|
||||||
|
unsigned long offset; /* Offset into section */
|
||||||
|
} u;
|
||||||
|
} alent;
|
||||||
|
|
||||||
|
/* object and core file sections */
|
||||||
|
|
||||||
|
|
||||||
|
#define align_power(addr, align) \
|
||||||
|
( ((addr) + ((1<<(align))-1)) & (-1 << (align)))
|
||||||
|
|
||||||
|
typedef struct sec *sec_ptr;
|
||||||
|
|
||||||
|
#define bfd_section_name(bfd, ptr) ((ptr)->name)
|
||||||
|
#define bfd_section_size(bfd, ptr) ((ptr)->size)
|
||||||
|
#define bfd_section_vma(bfd, ptr) ((ptr)->vma)
|
||||||
|
#define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power)
|
||||||
|
#define bfd_get_section_flags(bfd, ptr) ((ptr)->flags)
|
||||||
|
#define bfd_get_section_userdata(bfd, ptr) ((ptr)->userdata)
|
||||||
|
|
||||||
|
#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (val)), true)
|
||||||
|
#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),true)
|
||||||
|
#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),true)
|
||||||
|
|
||||||
|
typedef struct stat stat_type;
|
||||||
|
|
||||||
|
/** Error handling */
|
||||||
|
|
||||||
|
typedef enum bfd_error {
|
||||||
|
no_error = 0, system_call_error, invalid_target,
|
||||||
|
wrong_format, invalid_operation, no_memory,
|
||||||
|
no_symbols, no_relocation_info,
|
||||||
|
no_more_archived_files, malformed_archive,
|
||||||
|
symbol_not_found, file_not_recognized,
|
||||||
|
file_ambiguously_recognized, no_contents,
|
||||||
|
bfd_error_nonrepresentable_section,
|
||||||
|
invalid_error_code} bfd_ec;
|
||||||
|
|
||||||
|
extern bfd_ec bfd_error;
|
||||||
|
|
||||||
|
typedef struct bfd_error_vector {
|
||||||
|
PROTO(void,(* nonrepresentable_section ),(CONST bfd *CONST abfd,
|
||||||
|
CONST char *CONST name));
|
||||||
|
} bfd_error_vector_type;
|
||||||
|
|
||||||
|
PROTO (char *, bfd_errmsg, ());
|
||||||
|
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;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* The code that implements targets can initialize a jump table with this
|
||||||
|
macro. It must name all its routines the same way (a prefix plus
|
||||||
|
the standard routine suffix), or it must #define the routines that
|
||||||
|
are not so named, before calling JUMP_TABLE in the initializer. */
|
||||||
|
|
||||||
|
/* Semi-portable string concatenation in cpp */
|
||||||
|
#ifndef CAT
|
||||||
|
#ifdef __STDC__
|
||||||
|
#define CAT(a,b) a##b
|
||||||
|
#else
|
||||||
|
#define CAT(a,b) a/**/b
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define JUMP_TABLE(NAME)\
|
||||||
|
CAT(NAME,_core_file_failing_command),\
|
||||||
|
CAT(NAME,_core_file_failing_signal),\
|
||||||
|
CAT(NAME,_core_file_matches_executable_p),\
|
||||||
|
CAT(NAME,_slurp_armap),\
|
||||||
|
CAT(NAME,_slurp_extended_name_table),\
|
||||||
|
CAT(NAME,_truncate_arname),\
|
||||||
|
CAT(NAME,_write_armap),\
|
||||||
|
CAT(NAME,_close_and_cleanup), \
|
||||||
|
CAT(NAME,_set_section_contents),\
|
||||||
|
CAT(NAME,_get_section_contents),\
|
||||||
|
CAT(NAME,_new_section_hook),\
|
||||||
|
CAT(NAME,_get_symtab_upper_bound),\
|
||||||
|
CAT(NAME,_get_symtab),\
|
||||||
|
CAT(NAME,_get_reloc_upper_bound),\
|
||||||
|
CAT(NAME,_canonicalize_reloc),\
|
||||||
|
CAT(NAME,_make_empty_symbol),\
|
||||||
|
CAT(NAME,_print_symbol),\
|
||||||
|
CAT(NAME,_get_lineno),\
|
||||||
|
CAT(NAME,_set_arch_mach),\
|
||||||
|
CAT(NAME,_openr_next_archived_file),\
|
||||||
|
CAT(NAME,_find_nearest_line),\
|
||||||
|
CAT(NAME,_generic_stat_arch_elt),\
|
||||||
|
CAT(NAME,_sizeof_headers),\
|
||||||
|
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,
|
||||||
|
|
||||||
|
/* User program access to BFD facilities */
|
||||||
|
|
||||||
|
extern CONST short _bfd_host_big_endian;
|
||||||
|
#define HOST_BYTE_ORDER_BIG_P (*(char *)&_bfd_host_big_endian)
|
||||||
|
|
||||||
|
/* The bfd itself */
|
||||||
|
|
||||||
|
/* Cast from const char * to char * so that caller can assign to
|
||||||
|
a char * without a warning. */
|
||||||
|
#define bfd_get_filename(abfd) ((char *) (abfd)->filename)
|
||||||
|
#define bfd_get_format(abfd) ((abfd)->format)
|
||||||
|
#define bfd_get_target(abfd) ((abfd)->xvec->name)
|
||||||
|
#define bfd_get_file_flags(abfd) ((abfd)->flags)
|
||||||
|
#define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags)
|
||||||
|
#define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags)
|
||||||
|
#define bfd_my_archive(abfd) ((abfd)->my_archive);
|
||||||
|
#define bfd_has_map(abfd) ((abfd)->has_armap)
|
||||||
|
#define bfd_header_twiddle_required(abfd) \
|
||||||
|
((((abfd)->xvec->header_byteorder_big_p) \
|
||||||
|
!= (boolean)HOST_BYTE_ORDER_BIG_P) ? true:false)
|
||||||
|
|
||||||
|
#define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types)
|
||||||
|
#define bfd_usrdata(abfd) ((abfd)->usrdata)
|
||||||
|
|
||||||
|
#define bfd_get_start_address(abfd) ((abfd)->start_address)
|
||||||
|
#define bfd_get_symcount(abfd) ((abfd)->symcount)
|
||||||
|
#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols)
|
||||||
|
#define bfd_count_sections(abfd) ((abfd)->section_count)
|
||||||
|
#define bfd_get_architecture(abfd) ((abfd)->obj_arch)
|
||||||
|
#define bfd_get_machine(abfd) ((abfd)->obj_machine)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define BYTE_SIZE 1
|
||||||
|
#define SHORT_SIZE 2
|
||||||
|
#define LONG_SIZE 4
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*THE FOLLOWING IS EXTRACTED FROM THE SOURCE */
|
||||||
|
|
||||||
|
|
||||||
|
/*:init.c*/
|
||||||
|
|
||||||
|
/*:opncls.c*/
|
||||||
|
|
||||||
|
|
||||||
|
/*:libbfd.c*/
|
||||||
|
|
||||||
|
/*:section.c*/
|
||||||
|
|
||||||
|
|
||||||
|
/*:archures.c*/
|
||||||
|
|
||||||
|
/*:howto.c*/
|
||||||
|
/*:reloc.c*/
|
||||||
|
|
||||||
|
/*:syms.c*/
|
||||||
|
|
||||||
|
/*:bfd.c*/
|
||||||
|
|
||||||
|
/*:archive.c*/
|
||||||
|
|
||||||
|
/*:core.c*/
|
||||||
|
|
||||||
|
/*:targets.c*/
|
||||||
|
|
||||||
|
/*:format.c*/
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,7 @@ asection *input_section;
|
||||||
value -= reloc_entry->address;
|
value -= reloc_entry->address;
|
||||||
if (value > 0x3ffff) {
|
if (value > 0x3ffff) {
|
||||||
fprintf(stderr,"Relocation problem : ");
|
fprintf(stderr,"Relocation problem : ");
|
||||||
fprintf(stderr,"Jmp/call too far; to %d from %s\n",
|
fprintf(stderr,"Jmp/call too far; to %s from %s\n",
|
||||||
symbol_in->name,abfd->filename);
|
symbol_in->name,abfd->filename);
|
||||||
return(bfd_reloc_outofrange);
|
return(bfd_reloc_outofrange);
|
||||||
}
|
}
|
||||||
|
|
|
@ -323,7 +323,7 @@ for host in ${hosts} ; do
|
||||||
host_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'`
|
host_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'`
|
||||||
host_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'`
|
host_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'`
|
||||||
host=${host_cpu}-${host_vendor}-${host_os}
|
host=${host_cpu}-${host_vendor}-${host_os}
|
||||||
host_makefile_frag=config/h-${host}
|
host_makefile_frag=config/hmake-${host}
|
||||||
|
|
||||||
#### configure.in per-host parts come in here.
|
#### configure.in per-host parts come in here.
|
||||||
|
|
||||||
|
@ -335,6 +335,7 @@ else
|
||||||
mips)
|
mips)
|
||||||
case "${host_vendor}" in
|
case "${host_vendor}" in
|
||||||
dec) bfd_host=dec3100 ;;
|
dec) bfd_host=dec3100 ;;
|
||||||
|
sgi) bfd_host=irix3 ;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
m88k)
|
m88k)
|
||||||
|
@ -376,8 +377,15 @@ else
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
|
||||||
rtpc) bfd_host=rtbsd ;;
|
rtpc) bfd_host=rtbsd
|
||||||
tahoe | vax) bfd_host=${host_cpu} ;;
|
;;
|
||||||
|
|
||||||
|
a29k) bfd_host=ultra3
|
||||||
|
;;
|
||||||
|
|
||||||
|
tahoe | vax)
|
||||||
|
bfd_host=${host_cpu}
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -397,7 +405,7 @@ host_makefile_frag=config/h-${bfd_host}
|
||||||
target_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'`
|
target_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'`
|
||||||
target_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'`
|
target_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'`
|
||||||
target=${target_cpu}-${target_vendor}-${target_os}
|
target=${target_cpu}-${target_vendor}-${target_os}
|
||||||
target_makefile_frag=config/t-${target}
|
target_makefile_frag=config/tmake-${target}
|
||||||
|
|
||||||
#### configure.in per-target parts come in here.
|
#### configure.in per-target parts come in here.
|
||||||
|
|
||||||
|
@ -432,9 +440,30 @@ hp)
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
none)
|
sgi)
|
||||||
|
case "${target_cpu}" in
|
||||||
|
mips)
|
||||||
|
bfd_target=irix3 ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
|
||||||
|
hitachi)
|
||||||
|
case "${target_cpu}" in
|
||||||
|
h8300) bfd_target=h8300-ieee ;;
|
||||||
|
*) echo "bad hitachi cpu" ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
none|nyu)
|
||||||
case "${target_cpu}" in
|
case "${target_cpu}" in
|
||||||
i386) bfd_target=i386-coff ;;
|
i386) bfd_target=i386-coff ;;
|
||||||
|
a29k) case "${target_os}" in
|
||||||
|
aout) bfd_target=a29k-aout ;;
|
||||||
|
coff) bfd_target=a29k-coff ;;
|
||||||
|
sym1) bfd_target=a29k-coff ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
@ -711,19 +740,102 @@ exit 0
|
||||||
|
|
||||||
#
|
#
|
||||||
# $Log$
|
# $Log$
|
||||||
# Revision 1.25 1991/09/03 20:48:23 steve
|
# Revision 1.28 1991/10/01 03:55:37 steve
|
||||||
# *** empty log message ***
|
# Insert the incidentals and things I forgot to ci last time, same log message:
|
||||||
#
|
#
|
||||||
# Revision 1.24 1991/08/23 20:55:21 gnu
|
# Mon Sep 30 15:13:46 1991 Steve Chamberlain (steve at cygnus.com)
|
||||||
# * configure.in: Tix typo.
|
|
||||||
# * ecoff.c: If compiling for DEC3100, use trad_unix core files,
|
|
||||||
# else dummy out the core file support.
|
|
||||||
# * trad-core.c (trad_unix_core_file_p): If HOST_DATA_START_ADDR is
|
|
||||||
# specified, use it to locate the data section.
|
|
||||||
# * coffcode.h (coff_write_symbols): Declare buffer as bfd_bytes
|
|
||||||
# rather than as chars (lint).
|
|
||||||
#
|
#
|
||||||
# Revision 1.23 1991/08/23 04:48:43 rich
|
# * cpu-a29k.c, cpu-i386.c, cpu-m68k.c, cpu-mips.c, cpu-vax.c,
|
||||||
|
# cpu-h8300.c, cpu-i960.c, cpu-m88k.c, cpu-sparc.c: added. These
|
||||||
|
# files will eventually contain processor specific bits for bfd,
|
||||||
|
# like strange relocation information and dis/assembly. So far only
|
||||||
|
# the H8 has been even partially done. This work also ties in with
|
||||||
|
# the change in handling architectures.
|
||||||
|
#
|
||||||
|
# * amdcoff.c: (a29k_reloc) fix error message.
|
||||||
|
#
|
||||||
|
# * aout-f1.h: (choose_reloc_size) now calls bfd_get_arch to
|
||||||
|
# discover the architecture of the bfd. (sunos4_callback) calls the
|
||||||
|
# function bfd_set_arch_mach rather than stuffing stuff directly
|
||||||
|
# into the bfd. (sunos4_write_object_contents), changed names of
|
||||||
|
# accessor functions.
|
||||||
|
#
|
||||||
|
# * aoutx.h: (set_arch_mach) now calls bfd_default_set_arch_mach to
|
||||||
|
# setup the environment.
|
||||||
|
#
|
||||||
|
# * archive.c: (bfd_slurp_coff_armap) coff archives always have the
|
||||||
|
# headers in big endian format, regardless of the endianess of the
|
||||||
|
# host or target.
|
||||||
|
#
|
||||||
|
# * archures.c: totally changed. Now an architecture is represented
|
||||||
|
# with a pointer to an info structure rather than an enumerated type
|
||||||
|
# and a long. The old info is available as two elements in the
|
||||||
|
# structure. Future enhancements to architecure support will
|
||||||
|
# involve pointers to methods being placed into the info structure.
|
||||||
|
#
|
||||||
|
# * bfd.c: changed the definition of the bfd structure for the new
|
||||||
|
# architecture stuff.
|
||||||
|
#
|
||||||
|
# * bout.c: (b_out_set_arch_mach) changed to use the new
|
||||||
|
# architecture mechanism.
|
||||||
|
#
|
||||||
|
# * coffcode.h: (coff_set_arch_mach, coff_set_flags) changed to use
|
||||||
|
# the new architecture mechanism.
|
||||||
|
#
|
||||||
|
# * configure.in: added h8 stuff.
|
||||||
|
#
|
||||||
|
# * ieee.c: too many changes to note. Now ieee files written with
|
||||||
|
# bfd gas and ld can be read by gld and ieee only linkers and
|
||||||
|
# simulators.
|
||||||
|
#
|
||||||
|
# * libbfd.c, libbfd.h: changed prototype of bfd_write.
|
||||||
|
#
|
||||||
|
# * newsos3.c: (newos3_callback) now calls bfd_set_arch_mach rather
|
||||||
|
# than fixing the structure directly.
|
||||||
|
#
|
||||||
|
# * oasys.c: (oasys_object_p) now calls bfd_default_set_arch_mach rather
|
||||||
|
# than fixing the structure directly.
|
||||||
|
#
|
||||||
|
# * opncls.c: (new_bfd) makes sure that bfd_init has been called
|
||||||
|
# before opening a bfd.
|
||||||
|
#
|
||||||
|
# * srec.c: (srec_set_arch_mach) now calls bfd_default_set_arch_mach
|
||||||
|
# rather than fixing the structure directly.
|
||||||
|
#
|
||||||
|
# * targets.c: (target_vector) now by defining SELECT_VECS (perhaps
|
||||||
|
# in the t/hmake file) a user can select which backends they want
|
||||||
|
# linked with bfd without changing the source.
|
||||||
|
#
|
||||||
|
# * init.c: new, looks after initializing modules.
|
||||||
|
#
|
||||||
|
# * howto.c: for future use, will allow an application to work out
|
||||||
|
# what cookie to use as a handle on a relcoatio howto.
|
||||||
|
#
|
||||||
|
# Revision 1.27 1991/09/17 00:36:44 rich
|
||||||
|
# Updated from configure.in.
|
||||||
|
#
|
||||||
|
# Revision 1.26 1991/09/13 02:19:42 gnu
|
||||||
|
# Propagate
|
||||||
|
#
|
||||||
|
# Revision 1.37 1991/09/12 00:33:18 rich
|
||||||
|
# Add gdbm.
|
||||||
|
#
|
||||||
|
# Revision 1.36 1991/08/31 03:54:36 rich
|
||||||
|
# Welcome emacs to the mess.
|
||||||
|
#
|
||||||
|
# Revision 1.35 1991/08/26 04:29:31 rich
|
||||||
|
# Welcome cvs to the big time.
|
||||||
|
#
|
||||||
|
# Revision 1.34 1991/08/25 23:40:23 rich
|
||||||
|
# rcs enters the soup.
|
||||||
|
#
|
||||||
|
# Revision 1.33 1991/08/25 21:48:38 rich
|
||||||
|
# Adding diff to the fray.
|
||||||
|
#
|
||||||
|
# Revision 1.32 1991/08/25 20:18:20 rich
|
||||||
|
# Adding grep to the fray.
|
||||||
|
#
|
||||||
|
# Revision 1.31 1991/08/23 04:50:57 rich
|
||||||
# Minor config polish.
|
# Minor config polish.
|
||||||
#
|
#
|
||||||
# Revision 1.22 1991/08/23 03:31:43 rich
|
# Revision 1.22 1991/08/23 03:31:43 rich
|
||||||
|
|
101
bfd/libbfd.h
101
bfd/libbfd.h
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
/* libbfd.h -- Declarations used by bfd library *implementation*.
|
/* libbfd.h -- Declarations used by bfd library *implementation*.
|
||||||
(This include file is not for users of the library.)
|
(This include file is not for users of the library.)
|
||||||
Copyright (C) 1990-1991 Free Software Foundation, Inc.
|
Copyright (C) 1990-1991 Free Software Foundation, Inc.
|
||||||
|
@ -72,7 +73,7 @@ PROTO(PTR, bfd_alloc_finish,(bfd *abfd));
|
||||||
|
|
||||||
|
|
||||||
PROTO (bfd_size_type, bfd_read, (PTR ptr, bfd_size_type size, bfd_size_type nitems, bfd *abfd));
|
PROTO (bfd_size_type, bfd_read, (PTR ptr, bfd_size_type size, bfd_size_type nitems, bfd *abfd));
|
||||||
PROTO (bfd_size_type, bfd_write, (PTR ptr, bfd_size_type size, bfd_size_type nitems, bfd *abfd));
|
PROTO (bfd_size_type, bfd_write, (CONST PTR ptr, bfd_size_type size, bfd_size_type nitems, bfd *abfd));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -179,22 +180,32 @@ extern bfd *bfd_last_cache;
|
||||||
|
|
||||||
/* THE FOLLOWING IS EXTRACTED FROM THE SOURCE*/
|
/* THE FOLLOWING IS EXTRACTED FROM THE SOURCE*/
|
||||||
|
|
||||||
/* FROM libbfd.c*/
|
/*:init.c*/
|
||||||
/* ------------------------------START FROM libbfd.c
|
/* bfd_check_init
|
||||||
|
|
||||||
*i bfd_log2
|
This routine is called before any other bfd function using initialized
|
||||||
|
data is used to ensure that the structures have been initialized.
|
||||||
|
Soon this function will go away, and the bfd library will assume that
|
||||||
|
bfd_init has been called.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void EXFUN(bfd_check_init,(void));
|
||||||
|
|
||||||
|
/*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*:libbfd.c*/
|
||||||
|
/* *i bfd_log2
|
||||||
Return the log base 2 of the value supplied, rounded up. eg an arg
|
Return the log base 2 of the value supplied, rounded up. eg an arg
|
||||||
of 1025 would return 11.
|
of 1025 would return 11.
|
||||||
*/
|
*/
|
||||||
PROTO(bfd_vma, bfd_log2,(bfd_vma x));
|
PROTO(bfd_vma, bfd_log2,(bfd_vma x));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
*/
|
||||||
|
|
||||||
--------------------------------END FROM libbfd.c*/
|
/*:cache.c*/
|
||||||
|
/* BFD_CACHE_MAX_OPEN
|
||||||
/* FROM cache.c*/
|
|
||||||
/* ------------------------------START FROM cache.c
|
|
||||||
BFD_CACHE_MAX_OPEN
|
|
||||||
The maxiumum number of files which the cache will keep open at one
|
The maxiumum number of files which the cache will keep open at one
|
||||||
time.
|
time.
|
||||||
*/
|
*/
|
||||||
|
@ -258,8 +269,76 @@ one first, to avoid running out of file descriptors.
|
||||||
PROTO(FILE *, bfd_cache_lookup_worker, (bfd *));
|
PROTO(FILE *, bfd_cache_lookup_worker, (bfd *));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
*/
|
||||||
|
|
||||||
--------------------------------END FROM cache.c*/
|
|
||||||
|
|
||||||
/* FROM reloc.c*/
|
/*:reloc.c*/
|
||||||
|
|
||||||
|
/*:cpu-h8300.c*/
|
||||||
|
|
||||||
|
/*:cpu-i960.c*/
|
||||||
|
|
||||||
|
/*:cpu-empty.c*/
|
||||||
|
|
||||||
|
/*:howto.c*/
|
||||||
|
|
||||||
|
/*:archures.c*/
|
||||||
|
/* bfd_default_arch_struct
|
||||||
|
|
||||||
|
What bfds are seeded with
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern bfd_arch_info_struct_type bfd_default_arch_struct;
|
||||||
|
|
||||||
|
/*
|
||||||
|
bfd_default_set_arch_mach
|
||||||
|
|
||||||
|
Set the architecture and machine type in a bfd. This finds the correct
|
||||||
|
pointer to structure and inserts it into the arch_info pointer.
|
||||||
|
*/
|
||||||
|
|
||||||
|
boolean EXFUN(bfd_default_set_arch_mach,(bfd *abfd,
|
||||||
|
enum bfd_architecture arch,
|
||||||
|
unsigned long mach));
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
This routine initializes the architecture dispatch table by calling
|
||||||
|
all installed architecture packages and getting them to poke around.
|
||||||
|
*/
|
||||||
|
|
||||||
|
PROTO(void, bfd_arch_init,(void));
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
bfd_arch_linkin
|
||||||
|
|
||||||
|
Link the provided arch info structure into the list
|
||||||
|
*/
|
||||||
|
|
||||||
|
void EXFUN(bfd_arch_linkin,(bfd_arch_info_struct_type *));
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
bfd_default_compatible
|
||||||
|
|
||||||
|
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));
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
bfd_default_scan
|
||||||
|
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 *));
|
||||||
|
|
||||||
|
/*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue