From 63ffe5ef86e4833dca5d777022df97677f171498 Mon Sep 17 00:00:00 2001 From: Steve Chamberlain Date: Tue, 1 Oct 1991 03:55:40 +0000 Subject: [PATCH] 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. --- bfd/.Sanitize | 84 +++++++++++- bfd/Makefile.in | 18 ++- bfd/bfd-in.h | 346 ++++++++++++++++++++++++++++++++++++++++++++++++ bfd/coff-a29k.c | 2 +- bfd/configure | 144 +++++++++++++++++--- bfd/libbfd.h | 101 ++++++++++++-- 6 files changed, 662 insertions(+), 33 deletions(-) create mode 100644 bfd/bfd-in.h diff --git a/bfd/.Sanitize b/bfd/.Sanitize index c848c12f6c..58c808b057 100644 --- a/bfd/.Sanitize +++ b/bfd/.Sanitize @@ -59,6 +59,17 @@ icoff.c ieee.c libaout.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.h libcoff-in.h @@ -102,7 +113,78 @@ echo Done in `pwd`. # # # $Log$ -# Revision 1.20 1991/09/04 03:59:15 rich +# 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 # Added "recover"'ability. # # Revision 1.19 1991/09/03 22:21:30 rich diff --git a/bfd/Makefile.in b/bfd/Makefile.in index 136de67e57..4d25568b52 100644 --- a/bfd/Makefile.in +++ b/bfd/Makefile.in @@ -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 \ - 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 \ 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 + OPTIONAL_BACKENDS = trad-core.o 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 \ i386coff.c aout64.c aout32.c sunos.c demo64.c icoff.c srec.c \ oasys.c ieee.c m68kcoff.c amdcoff.c \ - format.c section.c core.c syms.c reloc.c \ - m88k-bcs.c ecoff.c trad-core.c newsos3.c bout.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 \ + 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) all: $(TARGETLIB) # 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) rm -f $(TARGETLIB) @@ -202,6 +209,9 @@ headers: cp $(docdir)/bfd.h $(BFD_H) cp $(docdir)/libbfd.h $(srcdir)/libbfd.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: ( cd $(docdir); $(MAKE) bfd.info) diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h new file mode 100644 index 0000000000..d674618e0b --- /dev/null +++ b/bfd/bfd-in.h @@ -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 + + + + + diff --git a/bfd/coff-a29k.c b/bfd/coff-a29k.c index 09c011f4db..169bdc814b 100644 --- a/bfd/coff-a29k.c +++ b/bfd/coff-a29k.c @@ -104,7 +104,7 @@ asection *input_section; value -= reloc_entry->address; if (value > 0x3ffff) { 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); return(bfd_reloc_outofrange); } diff --git a/bfd/configure b/bfd/configure index 175548bfa7..2922578d2b 100755 --- a/bfd/configure +++ b/bfd/configure @@ -323,7 +323,7 @@ for host in ${hosts} ; do host_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'` host_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'` 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. @@ -335,6 +335,7 @@ else mips) case "${host_vendor}" in dec) bfd_host=dec3100 ;; + sgi) bfd_host=irix3 ;; esac ;; m88k) @@ -376,8 +377,15 @@ else esac ;; - rtpc) bfd_host=rtbsd ;; - tahoe | vax) bfd_host=${host_cpu} ;; + rtpc) bfd_host=rtbsd + ;; + + a29k) bfd_host=ultra3 + ;; + + tahoe | vax) + bfd_host=${host_cpu} + ;; esac fi @@ -397,7 +405,7 @@ host_makefile_frag=config/h-${bfd_host} target_vendor=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\2/'` target_os=`echo $result | sed 's/^\(.*\)-\(.*\)-\(.*\)$/\3/'` 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. @@ -432,9 +440,30 @@ hp) ;; 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 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 ;; *) @@ -711,19 +740,102 @@ exit 0 # # $Log$ -# Revision 1.25 1991/09/03 20:48:23 steve -# *** empty log message *** +# Revision 1.28 1991/10/01 03:55:37 steve +# Insert the incidentals and things I forgot to ci last time, same log message: # -# Revision 1.24 1991/08/23 20:55:21 gnu -# * 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). +# Mon Sep 30 15:13:46 1991 Steve Chamberlain (steve at cygnus.com) # -# 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. # # Revision 1.22 1991/08/23 03:31:43 rich diff --git a/bfd/libbfd.h b/bfd/libbfd.h index f7b29121b9..0c3ad59306 100644 --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -1,3 +1,4 @@ + /* libbfd.h -- Declarations used by bfd library *implementation*. (This include file is not for users of the library.) 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_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*/ -/* FROM libbfd.c*/ -/* ------------------------------START FROM libbfd.c +/*:init.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 of 1025 would return 11. */ PROTO(bfd_vma, bfd_log2,(bfd_vma x)); /* +*/ - --------------------------------END FROM libbfd.c*/ - -/* FROM cache.c*/ -/* ------------------------------START FROM cache.c - BFD_CACHE_MAX_OPEN +/*:cache.c*/ +/* BFD_CACHE_MAX_OPEN The maxiumum number of files which the cache will keep open at one time. */ @@ -258,8 +269,76 @@ one first, to avoid running out of file descriptors. 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 *)); + +/* +*/ +