diff options
author | Steve Chamberlain <steve@cygnus> | 1991-10-01 03:55:40 +0000 |
---|---|---|
committer | Steve Chamberlain <steve@cygnus> | 1991-10-01 03:55:40 +0000 |
commit | 63ffe5ef86e4833dca5d777022df97677f171498 (patch) | |
tree | 81603023dcd1bc1eab2fc7fc5481710847383a33 /bfd/bfd-in.h | |
parent | 7fe11a82b43a278ca46950f2e7d1176eff53132a (diff) | |
download | gdb-63ffe5ef86e4833dca5d777022df97677f171498.zip gdb-63ffe5ef86e4833dca5d777022df97677f171498.tar.gz gdb-63ffe5ef86e4833dca5d777022df97677f171498.tar.bz2 |
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.
Diffstat (limited to 'bfd/bfd-in.h')
-rw-r--r-- | bfd/bfd-in.h | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h new file mode 100644 index 0000000..d674618 --- /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 + + + + + |