* targets.c (bfd_target): Add _bfd_free_cached_info field.

* bfd.c (bfd_free_cached_info): Define.
	* bfd-in.h (JUMP_TABLE): Add _bfd_free_cached_info.
	* bfd-in2.h: Rebuilt.
	* All backends: Initialize bfd_free_cached_info entry point to
	bfd_true.
This commit is contained in:
Ian Lance Taylor 1994-04-01 17:55:47 +00:00
parent 7ed5e9704b
commit 9deaaaf1b3
27 changed files with 330 additions and 171 deletions

View File

@ -1,3 +1,20 @@
Fri Apr 1 12:40:58 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
* targets.c (bfd_target): Add _bfd_free_cached_info field.
* bfd.c (bfd_free_cached_info): Define.
* bfd-in.h (JUMP_TABLE): Add _bfd_free_cached_info.
* bfd-in2.h: Rebuilt.
* All backends: Initialize bfd_free_cached_info entry point to
bfd_true.
* elf32-hppa.c (elf_hppa_reloc_type_lookup): Correct type of
first, unused, argument.
(hppa_elf_is_local_label): Declare instead of
som_bfd_is_local_label.
* coff-a29k.c (a29k_reloc): Add reloc_entry->address to value of
absolute R_IREL reloc.
Thu Mar 31 11:52:15 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
Added some support for Irix 4 shared libraries.

View File

@ -309,6 +309,7 @@ aix386_core_file_matches_executable_p (core_bfd, exec_bfd)
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define aix386_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, asection *))) bfd_false)
#define aix386_bfd_free_cached_info bfd_true
/* If somebody calls any byte-swapping routines, shoot them. */
void

View File

@ -32,7 +32,7 @@ extern bfd_target a_out_adobe_vec; /* Forward decl */
PROTO (static bfd_target *, aout_adobe_callback, (bfd *));
PROTO (boolean, aout_32_slurp_symbol_table, (bfd *abfd));
PROTO (void , aout_32_write_syms, ());
PROTO (boolean , aout_32_write_syms, ());
PROTO (static void, aout_adobe_write_section, (bfd *abfd, sec_ptr sect));
/* Swaps the information in an executable header taken from a raw byte
@ -44,10 +44,10 @@ PROTO(void, aout_adobe_swap_exec_header_in,
struct internal_exec *execp));
void
DEFUN(aout_adobe_swap_exec_header_in,(abfd, raw_bytes, execp),
bfd *abfd AND
struct external_exec *raw_bytes AND
struct internal_exec *execp)
aout_adobe_swap_exec_header_in (abfd, raw_bytes, execp)
bfd *abfd;
struct external_exec *raw_bytes;
struct internal_exec *execp;
{
struct external_exec *bytes = (struct external_exec *)raw_bytes;
@ -70,10 +70,10 @@ PROTO(void, aout_adobe_swap_exec_header_out,
struct internal_exec *execp,
struct external_exec *raw_bytes));
void
DEFUN(aout_adobe_swap_exec_header_out,(abfd, execp, raw_bytes),
bfd *abfd AND
struct internal_exec *execp AND
struct external_exec *raw_bytes)
aout_adobe_swap_exec_header_out (abfd, execp, raw_bytes)
bfd *abfd;
struct internal_exec *execp;
struct external_exec *raw_bytes;
{
struct external_exec *bytes = (struct external_exec *)raw_bytes;
@ -99,7 +99,7 @@ aout_adobe_object_p (abfd)
if (bfd_read ((PTR) &exec_bytes, 1, EXEC_BYTES_SIZE, abfd)
!= EXEC_BYTES_SIZE) {
bfd_error = wrong_format;
bfd_set_error (bfd_error_wrong_format);
return 0;
}
@ -119,7 +119,7 @@ aout_adobe_object_p (abfd)
; /* Just continue anyway, if specifically set to this format */
else
{
bfd_error = wrong_format;
bfd_set_error (bfd_error_wrong_format);
return 0;
}
}
@ -156,7 +156,7 @@ aout_adobe_callback (abfd)
for (;;) {
if (bfd_read ((PTR) ext, 1, sizeof (*ext), abfd) != sizeof (*ext)) {
bfd_error = wrong_format;
bfd_set_error (bfd_error_wrong_format);
return 0;
}
switch (ext->e_type[0]) {
@ -187,11 +187,11 @@ aout_adobe_callback (abfd)
/* First one is called ".text" or whatever; subsequent ones are
".text1", ".text2", ... */
bfd_error = no_error;
bfd_set_error (bfd_error_no_error);
sect = bfd_make_section (abfd, section_name);
trynum = 0;
while (!sect) {
if (bfd_error != no_error)
if (bfd_get_error () != bfd_error_no_error)
return 0; /* Some other error -- slide into the sunset */
sprintf (try_again, "%s%d", section_name, ++trynum);
sect = bfd_make_section (abfd, try_again);
@ -201,7 +201,7 @@ aout_adobe_callback (abfd)
if (sect->name == try_again) {
newname = (char *) bfd_zalloc(abfd, strlen (sect->name));
if (newname == NULL) {
bfd_error = no_memory;
bfd_set_error (bfd_error_no_memory);
return 0;
}
strcpy (newname, sect->name);
@ -255,7 +255,7 @@ aout_adobe_mkobject (abfd)
rawptr = (struct bout_data_struct *) bfd_zalloc (abfd, sizeof (struct bout_data_struct));
if (rawptr == NULL) {
bfd_error = no_memory;
bfd_set_error (bfd_error_no_memory);
return false;
}
@ -340,7 +340,8 @@ aout_adobe_write_object_contents (abfd)
{
bfd_seek (abfd, (file_ptr)(N_SYMOFF(*exec_hdr(abfd))), SEEK_SET);
aout_32_write_syms (abfd);
if (! aout_32_write_syms (abfd))
return false;
bfd_seek (abfd, (file_ptr)(N_TRELOFF(*exec_hdr(abfd))), SEEK_SET);
@ -439,9 +440,9 @@ aout_adobe_set_arch_mach (abfd, arch, machine)
}
static int
DEFUN(aout_adobe_sizeof_headers,(ignore_abfd, ignore),
bfd *ignore_abfd AND
boolean ignore)
aout_adobe_sizeof_headers (ignore_abfd, ignore)
bfd *ignore_abfd;
boolean ignore;
{
return sizeof(struct internal_exec);
}
@ -476,11 +477,14 @@ DEFUN(aout_adobe_sizeof_headers,(ignore_abfd, ignore),
#define aout_32_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents
#define aout_32_bfd_relax_section bfd_generic_relax_section
#define aout_32_bfd_seclet_link bfd_generic_seclet_link
#define aout_32_bfd_reloc_type_lookup \
((CONST struct reloc_howto_struct *(*) PARAMS ((bfd *, bfd_reloc_code_real_type))) bfd_nullvoidptr)
#define aout_32_bfd_make_debug_symbol \
((asymbol *(*) PARAMS ((bfd *, void *, unsigned long))) bfd_nullvoidptr)
#define aout_32_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
#define aout_32_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define aout_32_bfd_final_link _bfd_generic_final_link
#define aout_32_bfd_free_cached_info bfd_true
bfd_target a_out_adobe_vec =
{
@ -490,7 +494,7 @@ bfd_target a_out_adobe_vec =
true, /* hdr byte order is big */
(HAS_RELOC | EXEC_P | /* object flags */
HAS_LINENO | HAS_DEBUG |
HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT ),
HAS_SYMS | HAS_LOCALS | WP_TEXT ),
/* section flags */
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_DATA | SEC_RELOC),
'_', /* symbol leading char */
@ -498,8 +502,12 @@ bfd_target a_out_adobe_vec =
16, /* ar_max_namelen */
2, /* minumum alignment power */
_do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* data */
_do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* hdrs */
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
{_bfd_dummy_target, aout_adobe_object_p, /* bfd_check_format */
bfd_generic_archive_p, _bfd_dummy_target},
{bfd_false, aout_adobe_mkobject, /* bfd_set_format */

View File

@ -387,6 +387,23 @@ MY_bfd_final_link (abfd, info)
#define MY_bfd_link_add_symbols NAME(aout,link_add_symbols)
#endif
#ifndef MY_bfd_copy_private_section_data
#define MY_bfd_copy_private_section_data \
((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_true)
#endif
#ifndef MY_bfd_copy_private_bfd_data
#define MY_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
#endif
#ifndef MY_bfd_is_local_label
#define MY_bfd_is_local_label bfd_generic_is_local_label
#endif
#ifndef MY_bfd_free_cached_info
#define MY_bfd_free_cached_info bfd_true
#endif
/* Aout symbols normally have leading underscores */
#ifndef MY_symbol_leading_char
#define MY_symbol_leading_char '_'

View File

@ -47,8 +47,8 @@ here. */
#include "ansidecl.h"
#include "obstack.h"
#define BFD_VERSION "2.2"
/* These two lines get substitutions done by commands in Makefile.in. */
#define BFD_VERSION "@VERSION@"
#define BFD_ARCH_SIZE @WORDSIZE@
#if BFD_ARCH_SIZE >= 64
@ -100,9 +100,9 @@ typedef enum bfd_boolean {bfd_false, bfd_true} boolean;
typedef long int file_ptr;
/* Support for different sizes of target format ints and addresses. If the
host implements 64-bit values, it defines HOST_64_BIT to be the appropriate
host implements 64-bit values, it defines BFD_HOST_64_BIT to be the appropriate
type. Otherwise, this code will fall back on gcc's "long long" type if gcc
is being used. HOST_64_BIT must be defined in such a way as to be a valid
is being used. BFD_HOST_64_BIT must be defined in such a way as to be a valid
type name by itself or with "unsigned" prefixed. It should be a signed
type by itself.
@ -111,10 +111,10 @@ typedef long int file_ptr;
#ifdef BFD64
#if defined (__GNUC__) && !defined (HOST_64_BIT)
#define HOST_64_BIT long long
typedef HOST_64_BIT int64_type;
typedef unsigned HOST_64_BIT uint64_type;
#if defined (__GNUC__) && !defined (BFD_HOST_64_BIT)
#define BFD_HOST_64_BIT long long
typedef BFD_HOST_64_BIT int64_type;
typedef unsigned BFD_HOST_64_BIT uint64_type;
#endif
#if !defined (uint64_type) && defined (__GNUC__)
@ -126,10 +126,10 @@ typedef unsigned HOST_64_BIT uint64_type;
#define uint64_typeHIGH(x) ((unsigned long)(((x) >> 32) & 0xffffffff))
#endif
typedef unsigned HOST_64_BIT bfd_vma;
typedef HOST_64_BIT bfd_signed_vma;
typedef unsigned HOST_64_BIT bfd_size_type;
typedef unsigned HOST_64_BIT symvalue;
typedef unsigned BFD_HOST_64_BIT bfd_vma;
typedef BFD_HOST_64_BIT bfd_signed_vma;
typedef unsigned BFD_HOST_64_BIT bfd_size_type;
typedef unsigned BFD_HOST_64_BIT symvalue;
#ifndef fprintf_vma
#define fprintf_vma(s,x) \
fprintf(s,"%08lx%08lx", uint64_typeHIGH(x), uint64_typeLOW(x))
@ -431,6 +431,8 @@ CAT(NAME,_close_and_cleanup),\
CAT(NAME,_set_section_contents),\
CAT(NAME,_get_section_contents),\
CAT(NAME,_new_section_hook),\
CAT(NAME,_bfd_copy_private_section_data),\
CAT(NAME,_bfd_copy_private_bfd_data),\
CAT(NAME,_get_symtab_upper_bound),\
CAT(NAME,_get_symtab),\
CAT(NAME,_get_reloc_upper_bound),\
@ -438,6 +440,7 @@ CAT(NAME,_canonicalize_reloc),\
CAT(NAME,_make_empty_symbol),\
CAT(NAME,_print_symbol),\
CAT(NAME,_get_symbol_info),\
CAT(NAME,_bfd_is_local_label),\
CAT(NAME,_get_lineno),\
CAT(NAME,_set_arch_mach),\
CAT(NAME,_openr_next_archived_file),\
@ -453,7 +456,8 @@ CAT(NAME,_bfd_reloc_type_lookup),\
CAT(NAME,_bfd_make_debug_symbol),\
CAT(NAME,_bfd_link_hash_table_create),\
CAT(NAME,_bfd_link_add_symbols),\
CAT(NAME,_bfd_final_link)
CAT(NAME,_bfd_final_link),\
CAT(NAME,_bfd_free_cached_info)
#define COFF_SWAP_TABLE (PTR) &bfd_coff_std_swap_table

View File

@ -456,7 +456,8 @@ CAT(NAME,_bfd_reloc_type_lookup),\
CAT(NAME,_bfd_make_debug_symbol),\
CAT(NAME,_bfd_link_hash_table_create),\
CAT(NAME,_bfd_link_add_symbols),\
CAT(NAME,_bfd_final_link)
CAT(NAME,_bfd_final_link),\
CAT(NAME,_bfd_free_cached_info)
#define COFF_SWAP_TABLE (PTR) &bfd_coff_std_swap_table
@ -1929,6 +1930,9 @@ bfd_copy_private_bfd_data PARAMS ((bfd *ibfd, bfd *obfd));
#define bfd_final_link(abfd, info) \
BFD_SEND (abfd, _bfd_final_link, (abfd, info))
#define bfd_free_cached_info(abfd) \
BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
symindex
bfd_get_next_mapent PARAMS ((bfd *abfd, symindex previous, carsym **sym));
@ -2110,6 +2114,9 @@ typedef struct bfd_target
section of the BFD. */
boolean (*_bfd_final_link) PARAMS ((bfd *, struct bfd_link_info *));
/* Ask the BFD to free all cached information. */
boolean (*_bfd_free_cached_info) PARAMS ((bfd *));
PTR backend_data;
} bfd_target;
bfd_target *

View File

@ -806,5 +806,8 @@ DESCRIPTION
.#define bfd_final_link(abfd, info) \
. BFD_SEND (abfd, _bfd_final_link, (abfd, info))
.
.#define bfd_free_cached_info(abfd) \
. BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
.
*/

View File

@ -1379,6 +1379,7 @@ b_out_get_relocated_section_contents (in_abfd, link_info, link_order, data,
#define aout_32_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
#define aout_32_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define aout_32_bfd_final_link _bfd_generic_final_link
#define aout_32_bfd_free_cached_info bfd_true
bfd_target b_out_vec_big_host =
{

View File

@ -339,6 +339,7 @@ cisco_core_file_matches_executable_p (core_bfd, exec_bfd)
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define cisco_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, asymbol *))) bfd_false)
#define cisco_bfd_free_cached_info bfd_true
bfd_target cisco_core_vec =
{

View File

@ -2526,3 +2526,4 @@ static CONST bfd_coff_backend_data bfd_coff_std_swap_table =
#ifndef coff_bfd_is_local_label
#define coff_bfd_is_local_label bfd_generic_is_local_label
#endif
#define coff_bfd_free_cached_info bfd_true

View File

@ -71,6 +71,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#ifndef bfd_elf32_bfd_is_local_label
#define bfd_elf32_bfd_is_local_label bfd_generic_is_local_label
#endif
#ifndef bfd_elf32_bfd_free_cached_info
#define bfd_elf32_bfd_free_cached_info bfd_true
#endif
#ifndef elf_info_to_howto_rel
#define elf_info_to_howto_rel 0

View File

@ -68,10 +68,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define bfd_elf64_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
#endif
#ifndef bfd_elf64_bfd_is_local_label
#define bfd_elf64_bfd_is_local_label bfd_generic_is_local_label
#endif
#ifndef bfd_elf64_bfd_free_cached_info
#define bfd_elf64_bfd_free_cached_info bfd_true
#endif
#ifndef elf_info_to_howto_rel
#define elf_info_to_howto_rel 0

View File

@ -291,6 +291,7 @@ hppabsd_core_core_file_matches_executable_p (core_bfd, exec_bfd)
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define hppabsd_core_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, asymbol *))) bfd_false)
#define hppabsd_core_bfd_free_cached_info bfd_true
/* If somebody calls any byte-swapping routines, shoot them. */
static void

View File

@ -273,6 +273,7 @@ hpux_core_core_file_matches_executable_p (core_bfd, exec_bfd)
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define hpux_core_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, asymbol *))) bfd_false)
#define hpux_core_bfd_free_cached_info bfd_true
/* If somebody calls any byte-swapping routines, shoot them. */
void

View File

@ -31,33 +31,33 @@ static bfd_target *os9k_callback PARAMS ((bfd *));
/* Swaps the information in an executable header taken from a raw byte
stream memory image, into the internal exec_header structure. */
void
DEFUN(os9k_swap_exec_header_in,(abfd, raw_bytes, execp),
bfd *abfd AND
mh_com *raw_bytes AND
struct internal_exec *execp)
os9k_swap_exec_header_in (abfd, raw_bytes, execp)
bfd *abfd;
mh_com *raw_bytes;
struct internal_exec *execp;
{
mh_com *bytes = (mh_com *)raw_bytes;
mh_com *bytes = (mh_com *) raw_bytes;
unsigned int dload, dmemsize, dmemstart;
/* Now fill in fields in the execp, from the bytes in the raw data. */
execp->a_info = bfd_h_get_16 (abfd, bytes->m_sync);
execp->a_syms = 0;
execp->a_entry = bfd_h_get_32 (abfd, bytes->m_exec);
execp->a_info = bfd_h_get_16 (abfd, bytes->m_sync);
execp->a_syms = 0;
execp->a_entry = bfd_h_get_32 (abfd, bytes->m_exec);
execp->a_talign = 2;
execp->a_dalign = 2;
execp->a_balign = 2;
dload = bfd_h_get_32 (abfd, bytes->m_idata);
dload = bfd_h_get_32 (abfd, bytes->m_idata);
execp->a_data = dload + 8;
bfd_seek(abfd, (file_ptr)dload, SEEK_SET);
bfd_read(&dmemstart, sizeof(dmemstart), 1, abfd);
bfd_read(&dmemsize, sizeof(dmemsize), 1, abfd);
bfd_seek (abfd, (file_ptr) dload, SEEK_SET);
bfd_read (&dmemstart, sizeof (dmemstart), 1, abfd);
bfd_read (&dmemsize, sizeof (dmemsize), 1, abfd);
execp->a_tload = 0;
execp->a_dload = bfd_h_get_32 (abfd, (unsigned char *)&dmemstart);
execp->a_tload = 0;
execp->a_dload = bfd_h_get_32 (abfd, (unsigned char *) &dmemstart);
execp->a_text = dload - execp->a_tload;
execp->a_data = bfd_h_get_32 (abfd, (unsigned char *)&dmemsize);
execp->a_data = bfd_h_get_32 (abfd, (unsigned char *) &dmemsize);
execp->a_bss = bfd_h_get_32 (abfd, bytes->m_data) - execp->a_data;
execp->a_trsize = 0;
@ -68,35 +68,36 @@ DEFUN(os9k_swap_exec_header_in,(abfd, raw_bytes, execp),
/* Swaps the information in an internal exec header structure into the
supplied buffer ready for writing to disk. */
PROTO(void, os9k_swap_exec_header_out,
(bfd *abfd,
struct internal_exec *execp,
struct mh_com *raw_bytes));
PROTO (void, os9k_swap_exec_header_out,
(bfd * abfd,
struct internal_exec * execp,
struct mh_com * raw_bytes));
void
DEFUN(os9k_swap_exec_header_out,(abfd, execp, raw_bytes),
bfd *abfd AND
struct internal_exec *execp AND
mh_com *raw_bytes)
os9k_swap_exec_header_out (abfd, execp, raw_bytes)
bfd *abfd;
struct internal_exec *execp;
mh_com *raw_bytes;
{
mh_com *bytes = (mh_com *)raw_bytes;
mh_com *bytes = (mh_com *) raw_bytes;
/* Now fill in fields in the raw data, from the fields in the exec struct. */
bfd_h_put_32 (abfd, execp->a_info , bytes->e_info);
bfd_h_put_32 (abfd, execp->a_text , bytes->e_text);
bfd_h_put_32 (abfd, execp->a_data , bytes->e_data);
bfd_h_put_32 (abfd, execp->a_bss , bytes->e_bss);
bfd_h_put_32 (abfd, execp->a_syms , bytes->e_syms);
bfd_h_put_32 (abfd, execp->a_entry , bytes->e_entry);
bfd_h_put_32 (abfd, execp->a_info, bytes->e_info);
bfd_h_put_32 (abfd, execp->a_text, bytes->e_text);
bfd_h_put_32 (abfd, execp->a_data, bytes->e_data);
bfd_h_put_32 (abfd, execp->a_bss, bytes->e_bss);
bfd_h_put_32 (abfd, execp->a_syms, bytes->e_syms);
bfd_h_put_32 (abfd, execp->a_entry, bytes->e_entry);
bfd_h_put_32 (abfd, execp->a_trsize, bytes->e_trsize);
bfd_h_put_32 (abfd, execp->a_drsize, bytes->e_drsize);
bfd_h_put_32 (abfd, execp->a_tload , bytes->e_tload);
bfd_h_put_32 (abfd, execp->a_dload , bytes->e_dload);
bfd_h_put_32 (abfd, execp->a_tload, bytes->e_tload);
bfd_h_put_32 (abfd, execp->a_dload, bytes->e_dload);
bytes->e_talign[0] = execp->a_talign;
bytes->e_dalign[0] = execp->a_dalign;
bytes->e_balign[0] = execp->a_balign;
bytes->e_relaxable[0] = execp->a_relaxable;
}
#endif 0
#endif /* 0 */
static bfd_target *
os9k_object_p (abfd)
@ -105,17 +106,19 @@ os9k_object_p (abfd)
struct internal_exec anexec;
mh_com exec_bytes;
if (bfd_read ((PTR) &exec_bytes, MHCOM_BYTES_SIZE, 1, abfd)
!= MHCOM_BYTES_SIZE) {
bfd_set_error (bfd_error_wrong_format);
return 0;
}
if (bfd_read ((PTR) & exec_bytes, MHCOM_BYTES_SIZE, 1, abfd)
!= MHCOM_BYTES_SIZE)
{
bfd_set_error (bfd_error_wrong_format);
return 0;
}
anexec.a_info = bfd_h_get_16 (abfd, exec_bytes.m_sync);
if (N_BADMAG (anexec)) {
bfd_set_error (bfd_error_wrong_format);
return 0;
}
if (N_BADMAG (anexec))
{
bfd_set_error (bfd_error_wrong_format);
return 0;
}
os9k_swap_exec_header_in (abfd, &exec_bytes, &anexec);
return aout_32_some_aout_object_p (abfd, &anexec, os9k_callback);
@ -133,7 +136,7 @@ os9k_callback (abfd)
unsigned long bss_start;
/* Architecture and machine type */
bfd_set_arch_mach(abfd, bfd_arch_i386, 0);
bfd_set_arch_mach (abfd, bfd_arch_i386, 0);
/* The positions of the string table and symbol table. */
obj_str_filepos (abfd) = 0;
@ -142,7 +145,7 @@ os9k_callback (abfd)
/* The alignments of the sections */
obj_textsec (abfd)->alignment_power = execp->a_talign;
obj_datasec (abfd)->alignment_power = execp->a_dalign;
obj_bsssec (abfd)->alignment_power = execp->a_balign;
obj_bsssec (abfd)->alignment_power = execp->a_balign;
/* The starting addresses of the sections. */
obj_textsec (abfd)->vma = execp->a_tload;
@ -151,7 +154,7 @@ os9k_callback (abfd)
/* And reload the sizes, since the aout module zaps them */
obj_textsec (abfd)->_raw_size = execp->a_text;
bss_start = execp->a_dload + execp->a_data; /* BSS = end of data section */
bss_start = execp->a_dload + execp->a_data; /* BSS = end of data section */
obj_bsssec (abfd)->vma = align_power (bss_start, execp->a_balign);
/* The file positions of the sections */
@ -163,17 +166,18 @@ os9k_callback (abfd)
obj_datasec (abfd)->rel_filepos = N_DROFF(*execp);
*/
adata(abfd).page_size = 1; /* Not applicable. */
adata(abfd).segment_size = 1; /* Not applicable. */
adata(abfd).exec_bytes_size = MHCOM_BYTES_SIZE;
adata (abfd).page_size = 1; /* Not applicable. */
adata (abfd).segment_size = 1;/* Not applicable. */
adata (abfd).exec_bytes_size = MHCOM_BYTES_SIZE;
return abfd->xvec;
}
#if 0
struct bout_data_struct {
struct aoutdata a;
struct internal_exec e;
struct bout_data_struct
{
struct aoutdata a;
struct internal_exec e;
};
static boolean
@ -183,7 +187,8 @@ os9k_mkobject (abfd)
struct bout_data_struct *rawptr;
rawptr = (struct bout_data_struct *) bfd_zalloc (abfd, sizeof (struct bout_data_struct));
if (rawptr == NULL) {
if (rawptr == NULL)
{
bfd_set_error (bfd_error_no_memory);
return false;
}
@ -192,9 +197,9 @@ os9k_mkobject (abfd)
exec_hdr (abfd) = &rawptr->e;
/* For simplicity's sake we just make all the sections right here. */
obj_textsec (abfd) = (asection *)NULL;
obj_datasec (abfd) = (asection *)NULL;
obj_bsssec (abfd) = (asection *)NULL;
obj_textsec (abfd) = (asection *) NULL;
obj_datasec (abfd) = (asection *) NULL;
obj_bsssec (abfd) = (asection *) NULL;
bfd_make_section (abfd, ".text");
bfd_make_section (abfd, ".data");
@ -217,9 +222,9 @@ os9k_write_object_contents (abfd)
exec_hdr (abfd)->a_syms = bfd_get_symcount (abfd) * sizeof (struct nlist);
exec_hdr (abfd)->a_entry = bfd_get_start_address (abfd);
exec_hdr (abfd)->a_trsize = ((obj_textsec (abfd)->reloc_count) *
sizeof (struct relocation_info));
sizeof (struct relocation_info));
exec_hdr (abfd)->a_drsize = ((obj_datasec (abfd)->reloc_count) *
sizeof (struct relocation_info));
sizeof (struct relocation_info));
exec_hdr (abfd)->a_talign = obj_textsec (abfd)->alignment_power;
exec_hdr (abfd)->a_dalign = obj_datasec (abfd)->alignment_power;
@ -231,22 +236,24 @@ os9k_write_object_contents (abfd)
bout_swap_exec_header_out (abfd, exec_hdr (abfd), &swapped_hdr);
bfd_seek (abfd, (file_ptr) 0, SEEK_SET);
bfd_write ((PTR) &swapped_hdr, 1, EXEC_BYTES_SIZE, abfd);
bfd_write ((PTR) & swapped_hdr, 1, EXEC_BYTES_SIZE, abfd);
/* Now write out reloc info, followed by syms and strings */
if (bfd_get_symcount (abfd) != 0)
if (bfd_get_symcount (abfd) != 0)
{
bfd_seek (abfd, (file_ptr)(N_SYMOFF(*exec_hdr(abfd))), SEEK_SET);
bfd_seek (abfd, (file_ptr) (N_SYMOFF (*exec_hdr (abfd))), SEEK_SET);
if (! aout_32_write_syms (abfd))
if (!aout_32_write_syms (abfd))
return false;
bfd_seek (abfd, (file_ptr)(N_TROFF(*exec_hdr(abfd))), SEEK_SET);
bfd_seek (abfd, (file_ptr) (N_TROFF (*exec_hdr (abfd))), SEEK_SET);
if (!b_out_squirt_out_relocs (abfd, obj_textsec (abfd))) return false;
bfd_seek (abfd, (file_ptr)(N_DROFF(*exec_hdr(abfd))), SEEK_SET);
if (!b_out_squirt_out_relocs (abfd, obj_textsec (abfd)))
return false;
bfd_seek (abfd, (file_ptr) (N_DROFF (*exec_hdr (abfd))), SEEK_SET);
if (!b_out_squirt_out_relocs (abfd, obj_datasec (abfd))) return false;
if (!b_out_squirt_out_relocs (abfd, obj_datasec (abfd)))
return false;
}
return true;
}
@ -257,37 +264,40 @@ os9k_set_section_contents (abfd, section, location, offset, count)
sec_ptr section;
unsigned char *location;
file_ptr offset;
int count;
int count;
{
if (abfd->output_has_begun == false) { /* set by bfd.c handler */
if ((obj_textsec (abfd) == NULL) || (obj_datasec (abfd) == NULL) /*||
(obj_textsec (abfd)->_cooked_size == 0) || (obj_datasec (abfd)->_cooked_size == 0)*/) {
bfd_set_error (bfd_error_invalid_operation);
return false;
if (abfd->output_has_begun == false)
{ /* set by bfd.c handler */
if ((obj_textsec (abfd) == NULL) || (obj_datasec (abfd) == NULL) /*||
(obj_textsec (abfd)->_cooked_size == 0) || (obj_datasec (abfd)->_cooked_size == 0)*/ )
{
bfd_set_error (bfd_error_invalid_operation);
return false;
}
obj_textsec (abfd)->filepos = sizeof (struct internal_exec);
obj_datasec (abfd)->filepos = obj_textsec (abfd)->filepos
+ obj_textsec (abfd)->_raw_size;
}
obj_textsec (abfd)->filepos = sizeof(struct internal_exec);
obj_datasec(abfd)->filepos = obj_textsec(abfd)->filepos
+ obj_textsec (abfd)->_raw_size;
}
/* regardless, once we know what we're doing, we might as well get going */
bfd_seek (abfd, section->filepos + offset, SEEK_SET);
if (count != 0) {
return (bfd_write ((PTR)location, 1, count, abfd) == count) ?true:false;
}
if (count != 0)
{
return (bfd_write ((PTR) location, 1, count, abfd) == count) ? true : false;
}
return true;
}
#endif 0
#endif /* 0 */
static int
DEFUN(os9k_sizeof_headers,(ignore_abfd, ignore),
bfd *ignore_abfd AND
boolean ignore)
static int
os9k_sizeof_headers (ignore_abfd, ignore)
bfd *ignore_abfd;
boolean ignore;
{
return sizeof(struct internal_exec);
return sizeof (struct internal_exec);
}
@ -328,34 +338,34 @@ DEFUN(os9k_sizeof_headers,(ignore_abfd, ignore),
#define aout_32_bfd_reloc_type_lookup \
((CONST struct reloc_howto_struct *(*) PARAMS \
((bfd *, bfd_reloc_code_real_type))) bfd_nullvoidptr)
#define aout_32_bfd_free_cached_info bfd_true
bfd_target i386os9k_vec =
{
"i386os9k", /* name */
"i386os9k", /* name */
bfd_target_os9k_flavour,
false, /* data byte order is little */
false, /* hdr byte order is big */
false, /* data byte order is little */
false, /* hdr byte order is big */
(HAS_RELOC | EXEC_P | WP_TEXT), /* object flags */
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD ), /* section flags */
0, /* symbol leading char */
' ', /* ar_pad_char */
16, /* ar_max_namelen */
2, /* minumum alignment power */
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD), /* section flags */
0, /* symbol leading char */
' ', /* ar_pad_char */
16, /* ar_max_namelen */
2, /* minumum alignment power */
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
{_bfd_dummy_target, os9k_object_p, /* bfd_check_format */
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
{_bfd_dummy_target, os9k_object_p, /* bfd_check_format */
bfd_generic_archive_p, _bfd_dummy_target},
{bfd_false, bfd_false, /* bfd_set_format */
{bfd_false, bfd_false, /* bfd_set_format */
_bfd_generic_mkarchive, bfd_false},
{bfd_false, bfd_false, /* bfd_write_contents */
{bfd_false, bfd_false, /* bfd_write_contents */
_bfd_write_archive_contents, bfd_false},
JUMP_TABLE(aout_32),
JUMP_TABLE (aout_32),
(PTR) 0,
};

View File

@ -3325,6 +3325,7 @@ ieee_bfd_debug_info_accumulate (abfd, section)
#define ieee_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
#define ieee_bfd_is_local_label bfd_generic_is_local_label
#define ieee_bfd_free_cached_info bfd_true
/*SUPPRESS 460 */
bfd_target ieee_vec =

View File

@ -246,6 +246,7 @@ irix_core_make_empty_symbol (abfd)
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define irix_core_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, asymbol *))) bfd_false)
#define irix_core_bfd_free_cached_info bfd_true
/* If somebody calls any byte-swapping routines, shoot them. */
void

View File

@ -276,18 +276,12 @@ extern struct bfd_link_hash_table *ecoff_bfd_link_hash_table_create
extern boolean ecoff_bfd_link_add_symbols
PARAMS ((bfd *, struct bfd_link_info *));
extern boolean ecoff_bfd_final_link PARAMS ((bfd *, struct bfd_link_info *));
#ifndef ecoff_bfd_copy_private_section_data
#define ecoff_bfd_copy_private_section_data \
((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_true)
#endif
#ifndef ecoff_bfd_copy_private_bfd_data
#define ecoff_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
#endif
#ifndef ecoff_bfd_is_local_label
#define ecoff_bfd_is_local_label bfd_generic_is_local_label
#endif
#define ecoff_bfd_free_cached_info bfd_true
/* Hook functions for the generic COFF section reading code. */
extern PTR ecoff_mkobject_hook PARAMS ((bfd *, PTR filehdr, PTR aouthdr));

View File

@ -17,6 +17,82 @@ 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. */
#define nlm_core_file_p \
((bfd_target *(*) PARAMS ((bfd *))) bfd_nullvoidptr)
/* The JUMP_TABLE macro is used in the target structure to get names
for all the functions. We use JUMP_TABLE(nlm) to get a prefix of
nlm for all the functions. Here we redefine those names. Many of
the functions are the same for any NLM target. The others are
defined in terms of the nlmNAME macro. */
#define nlm_core_file_failing_command \
_bfd_dummy_core_file_failing_command
#define nlm_core_file_failing_signal \
_bfd_dummy_core_file_failing_signal
#define nlm_core_file_matches_executable_p \
_bfd_dummy_core_file_matches_executable_p
#define nlm_slurp_armap bfd_slurp_coff_armap
#define nlm_slurp_extended_name_table \
_bfd_slurp_extended_name_table
#define nlm_truncate_arname bfd_dont_truncate_arname
#define nlm_write_armap coff_write_armap
#define nlm_close_and_cleanup bfd_generic_close_and_cleanup
#define nlm_set_section_contents \
nlmNAME(set_section_contents)
#define nlm_get_section_contents \
bfd_generic_get_section_contents
#define nlm_new_section_hook _bfd_dummy_new_section_hook
#define nlm_get_symtab_upper_bound \
nlmNAME(get_symtab_upper_bound)
#define nlm_get_symtab nlmNAME(get_symtab)
#define nlm_get_reloc_upper_bound \
nlmNAME(get_reloc_upper_bound)
#define nlm_canonicalize_reloc nlmNAME(canonicalize_reloc)
#define nlm_make_empty_symbol nlmNAME(make_empty_symbol)
#define nlm_print_symbol nlmNAME(print_symbol)
#define nlm_get_symbol_info nlmNAME(get_symbol_info)
#define nlm_get_lineno ((alent * (*) PARAMS ((bfd *, asymbol *))) \
bfd_false)
/* We use the generic function nlm_set_arch_mach. */
#define nlm_openr_next_archived_file \
bfd_generic_openr_next_archived_file
#define nlm_find_nearest_line \
((boolean (*) PARAMS ((bfd *, asection *, \
asymbol **, bfd_vma, \
CONST char **, \
CONST char **, \
unsigned int *))) \
bfd_false)
#define nlm_generic_stat_arch_elt \
bfd_generic_stat_arch_elt
#define nlm_sizeof_headers ((int (*) PARAMS ((bfd *, boolean))) bfd_0u)
#define nlm_bfd_debug_info_start \
bfd_void
#define nlm_bfd_debug_info_end bfd_void
#define nlm_bfd_debug_info_accumulate \
((void (*) PARAMS ((bfd*, struct sec *))) \
bfd_void)
#define nlm_bfd_get_relocated_section_contents \
bfd_generic_get_relocated_section_contents
#define nlm_bfd_relax_section bfd_generic_relax_section
#define nlm_bfd_reloc_type_lookup \
bfd_default_reloc_type_lookup
#define nlm_bfd_make_debug_symbol \
((asymbol *(*) PARAMS ((bfd *, void *, \
unsigned long))) \
bfd_nullvoidptr)
#define nlm_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
#define nlm_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define nlm_bfd_final_link _bfd_generic_final_link
#define nlm_bfd_copy_private_section_data \
((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_true)
#define nlm_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
#define nlm_bfd_is_local_label bfd_generic_is_local_label
#define nlm_bfd_free_cached_info bfd_true
/* This structure contains everything that BFD knows about a target.
It includes things like its byte order, name, what routines to call
to do various operations, etc. Every BFD points to a target structure
@ -42,8 +118,8 @@ bfd_target TARGET_BIG_SYM =
true,
/* object_flags: mask of all file flags */
(HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS |
DYNAMIC | WP_TEXT),
(HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
| WP_TEXT),
/* section_flags: mask of all section flags */
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY |
@ -69,20 +145,20 @@ bfd_target TARGET_BIG_SYM =
3,
/* Routines to byte-swap various sized integers from the data sections */
_do_getb64, _do_getb_signed_64, _do_putb64,
_do_getb32, _do_getb_signed_32, _do_putb32,
_do_getb16, _do_getb_signed_16, _do_putb16,
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
bfd_getb16, bfd_getb_signed_16, bfd_putb16,
/* Routines to byte-swap various sized integers from the file headers */
_do_getb64, _do_getb_signed_64, _do_putb64,
_do_getb32, _do_getb_signed_32, _do_putb32,
_do_getb16, _do_getb_signed_16, _do_putb16,
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
bfd_getb16, bfd_getb_signed_16, bfd_putb16,
/* bfd_check_format: check the format of a file being read */
{ _bfd_dummy_target, /* unknown format */
nlmNAME(object_p), /* assembler/linker output (object file) */
bfd_generic_archive_p, /* an archive */
nlmNAME(core_file_p) /* a core file */
nlm_core_file_p /* a core file */
},
/* bfd_set_format: set the format of a file being written */
@ -101,10 +177,10 @@ bfd_target TARGET_BIG_SYM =
/* Initialize a jump table with the standard macro. All names start with
"nlm" */
JUMP_TABLE(JUMP_TABLE_PREFIX),
JUMP_TABLE(nlm),
/* backend_data: */
(PTR) NULL,
(PTR) TARGET_BACKEND_DATA
};
#endif
@ -124,8 +200,8 @@ bfd_target TARGET_LITTLE_SYM =
false, /* Nope -- this one's little endian */
/* object_flags: mask of all file flags */
(HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS |
DYNAMIC | WP_TEXT),
(HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
| WP_TEXT),
/* section_flags: mask of all section flags */
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY |
@ -151,20 +227,20 @@ bfd_target TARGET_LITTLE_SYM =
3,
/* Routines to byte-swap various sized integers from the data sections */
_do_getl64, _do_getl_signed_64, _do_putl64,
_do_getl32, _do_getl_signed_32, _do_putl32,
_do_getl16, _do_getl_signed_16, _do_putl16,
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16,
/* Routines to byte-swap various sized integers from the file headers */
_do_getl64, _do_getl_signed_64, _do_putl64,
_do_getl32, _do_getl_signed_32, _do_putl32,
_do_getl16, _do_getl_signed_16, _do_putl16,
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16,
/* bfd_check_format: check the format of a file being read */
{ _bfd_dummy_target, /* unknown format */
nlmNAME(object_p), /* assembler/linker output (object file) */
bfd_generic_archive_p, /* an archive */
nlmNAME(core_file_p) /* a core file */
nlm_core_file_p /* a core file */
},
/* bfd_set_format: set the format of a file being written */
@ -183,9 +259,9 @@ bfd_target TARGET_LITTLE_SYM =
/* Initialize a jump table with the standard macro. All names start with
"nlm" */
JUMP_TABLE(JUMP_TABLE_PREFIX),
JUMP_TABLE(nlm),
/* backend_data: */
(PTR) NULL,
(PTR) TARGET_BACKEND_DATA
};
#endif

View File

@ -1442,6 +1442,7 @@ oasys_sizeof_headers (abfd, exec)
#define oasys_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
#define oasys_bfd_is_local_label bfd_generic_is_local_label
#define oasys_bfd_free_cached_info bfd_true
/*SUPPRESS 460 */
bfd_target oasys_vec =

View File

@ -258,6 +258,7 @@ osf_core_core_file_matches_executable_p (core_bfd, exec_bfd)
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define osf_core_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, asymbol *))) bfd_false)
#define osf_core_bfd_free_cached_info bfd_true
/* If somebody calls any byte-swapping routines, shoot them. */
static void

View File

@ -255,6 +255,7 @@ ptrace_unix_core_file_matches_executable_p (core_bfd, exec_bfd)
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define ptrace_unix_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define ptrace_unix_bfd_free_cached_info bfd_true
/* If somebody calls any byte-swapping routines, shoot them. */
void

View File

@ -5464,6 +5464,7 @@ som_write_armap (abfd)
#define som_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
#define som_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define som_bfd_final_link _bfd_generic_final_link
#define som_bfd_free_cached_info bfd_true
/* Core file support is in the hpux-core backend. */
#define som_core_file_failing_command _bfd_dummy_core_file_failing_command

View File

@ -957,6 +957,7 @@ srec_print_symbol (ignore_abfd, afile, symbol, how)
#define srec_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
#define srec_bfd_is_local_label bfd_generic_is_local_label
#define srec_bfd_free_cached_info bfd_true
bfd_target srec_vec =
{

View File

@ -345,6 +345,9 @@ Symbols and relocations.
. section of the BFD. *}
. boolean (*_bfd_final_link) PARAMS ((bfd *, struct bfd_link_info *));
.
. {* Ask the BFD to free all cached information. *}
. boolean (*_bfd_free_cached_info) PARAMS ((bfd *));
.
Data for use by back-end routines, which isn't generic enough to belong
in this structure.

View File

@ -1028,6 +1028,7 @@ tekhex_print_symbol (ignore_abfd, filep, symbol, how)
#define tekhex_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
#define tekhex_bfd_is_local_label bfd_generic_is_local_label
#define tekhex_bfd_free_cached_info bfd_true
bfd_target tekhex_vec =
{

View File

@ -345,6 +345,7 @@ trad_unix_core_file_matches_executable_p (core_bfd, exec_bfd)
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define trad_unix_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, asection *))) bfd_false)
#define trad_unix_bfd_free_cached_info bfd_true
/* If somebody calls any byte-swapping routines, shoot them. */
void