Wed Mar 30 16:25:41 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)

Changes to let BFD return an error indication from
	get_symtab_upper_bound, bfd_canonicalize_symtab,
	bfd_get_reloc_upper_bound, and bfd_canonicalize_reloc.  They now
	return long instead of unsigned int, and use -1 to indicate an
	error.  Along the way, rename get_symtab_upper_bound to
	bfd_get_symtab_upper_bound.
	* bfd.c (bfd_get_reloc_upper_bound): Return long, and -1 on
	errors.
	(bfd_canonicalize_reloc): Likewise.
	* syms.c (bfd_get_symtab_upper_bound): Renamed from
	get_symtab_upper_bound.
	* targets.c (bfd_target): Renamed _get_symtab_upper_bound to
	_bfd_get_symtab_upper_bound, and changed it and
	_bfd_canonicalize_symtab and _get_reloc_upper_bound and
	_bfd_canonicalize_reloc to all return long.
	* aoutx.h (NAME(aout,get_symtab)): Return long, and -1 on errors.
	(NAME(aout,canonicalize_reloc)): Likewise.
	(NAME(aout,get_reloc_upper_bound)): Likewise.
	(NAME(aout,get_symtab_upper_bound)): Likewise.
	* bout.c (b_out_canonicalize_reloc): Likewise.
	(b_out_get_reloc_upper_bound): Likewise.
	* coffcode.h (coff_canonicalize_reloc): Likewise.
	* coffgen.c (coff_get_symtab_upper_bound): Likewise.
	(coff_get_symtab): Likewise.
	(coff_get_reloc_upper_bound): Likewise.
	* ecoff.c (ecoff_get_symtab_upper_bound): Likewise.
	(ecoff_get_symtab): Likewise.
	(ecoff_canonicalize_reloc): Likewise.
	* elfcode.h (elf_get_symtab_upper_bound): Likewise.
	(elf_get_reloc_upper_bound): Likewise.
	(elf_canonicalize_reloc): Likewise.
	(elf_get_symtab): Likewise.
	* hp300hpux.c (MY(get_symtab)): Likewise.
	(MY(get_symtab_upper_bound)): Likewise.
	(MY(canonicalize_reloc)): Likewise.
	* i386lynx.c (NAME(lynx,canonicalize_reloc)): Likewise.
	* ieee.c (ieee_slurp_external_symbols): Change return type to
	boolean.  Check for errors from get_symbol.
	(ieee_slurp_symbol_table): Change return type to boolean.  Check
	for errors from ieee_slurp_external_symbols.
	(ieee_get_symtab_upper_bound): Return long, and -1 on errors.
	(ieee_get_symtab): Likewise.
	(ieee_get_reloc_upper_bound): Likewise.
	(ieee_canonicalize_reloc): Likewise.
	* mipsbsd.c (MY(canonicalize_reloc)): Likewise.
	* nlmcode.h (nlm_get_symtab_upper_bound): Likewise.
	(nlm_get_symtab): Likewise.
	(nlm_get_reloc_upper_bound): Likewise.
	(nlm_canonicalize_reloc): Likewise.
	* oasys.c (oasys_get_symtab_upper_bound): Likewise.
	(oasys_get_symtab): Likewise.
	(oasys_get_reloc_upper_bound): Likewise.
	(oasys_canonicalize_reloc): Likewise.
	* som.c (som_get_symtab_upper_bound): Likewise.
	(som_get_symtab): Likewise.
	(som_get_reloc_upper_bound): Likewise.
	(som_canonicalize_reloc): Likewise.
	* srec.c (srec_get_symtab_upper_bound): Likewise.
	(srec_get_symtab): Likewise.
	(srec_get_reloc_upper_bound): Define as bfd_0l.
	(srec_canonicalize_reloc): Likewise.
	* tekhex.c (tekhex_get_symtab): Return long, and -1 on errors.
	(tekhex_get_symtab_upper_bound): Likewise.
	(tekhex_get_reloc_upper_bound): Define as bfd_0l.
	(tekhex_canonicalize_reloc): Likewise.
	* libaout.h (NAME(aout,get_symtab_upper_bound)): Change
	declaration to return long.
	(NAME(aout,get_symtab)): Likewise.
	(NAME(aout,canonicalize_reloc)): Likewise.
	(NAME(aout,get_reloc_upper_bound)): Likewise.
	* libcoff-in.h (coff_get_symtab_upper_bound): Likewise.
	(coff_get_symtab): Likewise.
	(coff_get_reloc_upper_bound): Likewise.
	* libecoff.h (ecoff_get_symtab_upper_bound): Likewise.
	(ecoff_get_symtab): Likewise.
	(ecoff_canonicalize_reloc): Likewise.
	* libelf.h (bfd_elf32_get_symtab_upper_bound): Likewise.
	(bfd_elf32_get_symtab): Likewise.
	(bfd_elf32_get_reloc_upper_bound): Likewise.
	(bfd_elf32_canonicalize_reloc): Likewise.
	(bfd_elf64_get_symtab_upper_bound): Likewise.
	(bfd_elf64_get_symtab): Likewise.
	(bfd_elf64_get_reloc_upper_bound): Likewise.
	(bfd_elf64_canonicalize_reloc): Likewise.
	* libnlm.h (nlmNAME(get_symtab_upper_bound)): Likewise.
	(nlmNAME(get_symtab)): Likewise.
	(nlmNAME(get_reloc_upper_bound)): Likewise.
	(nlmNAME(canonicalize_reloc)): Likewise.
	* archive.c (compute_and_write_armap): Use error_return and
	no_memory_return labels rather than freeing information in various
	places.  Change storage, symcount and src_count to long.  Check
	errors from bfd_get_symtab_upper_bound and
	bfd_canonicalize_symtab.
	* bout.c (b_out_relax_section): Change reloc_size to long.  Check
	for errors from bfd_get_reloc_upper_bound and
	bfd_canonicalize_reloc.
	(b_out_get_relocated_section_contents): Likewise.
	* coff-alpha.c (alpha_ecoff_get_relocated_section_contents):
	Likewise.
	* elf32-mips.c: Likewise.
	* elf32-hppa.c (hppa_elf_stub_finish): Likewise.
	(hppa_look_for_stubs_in_section): Check for errors from
	bfd_get_symtab_upper_bound, bfd_canonicalize_symtab, and
	bfd_canonicalize_reloc.
	* ecofflink.c (bfd_ecoff_debug_accumulate_other): Check for errors
	from bfd_get_symtab_upper_bound and bfd_canonicalize_symtab.
	* linker.c (generic_link_read_symbols): Likewise.
	(_bfd_generic_final_link): Check for errors from
	bfd_get_reloc_upper_bound and bfd_canonicalize_reloc.
	* reloc.c (bfd_generic_get_relocated_section_contents): Likewise.
	* reloc16.c (bfd_coff_reloc16_relax_section): Likewise.
	(bfd_coff_reloc16_get_relocated_section_contents): Likewise.
	* libbfd.c (bfd_0l): New function.
	* libbfd-in.h (bfd_0l): Declare.
	* aix386-core.c: Change get_symtab_upper_bound, get_symtab,
	get_reloc_upper_bound, and canonicalize_reloc to use bfd_0l rather
	than bfd_0u.
	* cisco-core.c, hppabsd-core.c, hpux-core.c: Likewise.
	* irix-core.c, osf-core.c, ptrace-core.c, trad-core.c: Likewise.
	* bfd-in2.h: Rebuilt.
	* libbfd.h: Rebuilt.
	* libcoff.h: Rebuilt.

	* nlm32-sparc.c (nlm_sparc_read_reloc): Remove unused variables
	temp and name.
This commit is contained in:
Ian Lance Taylor 1994-03-30 22:15:07 +00:00
parent 70f42bae0b
commit 326e32d7ce
43 changed files with 1299 additions and 959 deletions

View File

@ -1,3 +1,131 @@
Wed Mar 30 16:25:41 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
Changes to let BFD return an error indication from
get_symtab_upper_bound, bfd_canonicalize_symtab,
bfd_get_reloc_upper_bound, and bfd_canonicalize_reloc. They now
return long instead of unsigned int, and use -1 to indicate an
error. Along the way, rename get_symtab_upper_bound to
bfd_get_symtab_upper_bound.
* bfd.c (bfd_get_reloc_upper_bound): Return long, and -1 on
errors.
(bfd_canonicalize_reloc): Likewise.
* syms.c (bfd_get_symtab_upper_bound): Renamed from
get_symtab_upper_bound.
* targets.c (bfd_target): Renamed _get_symtab_upper_bound to
_bfd_get_symtab_upper_bound, and changed it and
_bfd_canonicalize_symtab and _get_reloc_upper_bound and
_bfd_canonicalize_reloc to all return long.
* aoutx.h (NAME(aout,get_symtab)): Return long, and -1 on errors.
(NAME(aout,canonicalize_reloc)): Likewise.
(NAME(aout,get_reloc_upper_bound)): Likewise.
(NAME(aout,get_symtab_upper_bound)): Likewise.
* bout.c (b_out_canonicalize_reloc): Likewise.
(b_out_get_reloc_upper_bound): Likewise.
* coffcode.h (coff_canonicalize_reloc): Likewise.
* coffgen.c (coff_get_symtab_upper_bound): Likewise.
(coff_get_symtab): Likewise.
(coff_get_reloc_upper_bound): Likewise.
* ecoff.c (ecoff_get_symtab_upper_bound): Likewise.
(ecoff_get_symtab): Likewise.
(ecoff_canonicalize_reloc): Likewise.
* elfcode.h (elf_get_symtab_upper_bound): Likewise.
(elf_get_reloc_upper_bound): Likewise.
(elf_canonicalize_reloc): Likewise.
(elf_get_symtab): Likewise.
* hp300hpux.c (MY(get_symtab)): Likewise.
(MY(get_symtab_upper_bound)): Likewise.
(MY(canonicalize_reloc)): Likewise.
* i386lynx.c (NAME(lynx,canonicalize_reloc)): Likewise.
* ieee.c (ieee_slurp_external_symbols): Change return type to
boolean. Check for errors from get_symbol.
(ieee_slurp_symbol_table): Change return type to boolean. Check
for errors from ieee_slurp_external_symbols.
(ieee_get_symtab_upper_bound): Return long, and -1 on errors.
(ieee_get_symtab): Likewise.
(ieee_get_reloc_upper_bound): Likewise.
(ieee_canonicalize_reloc): Likewise.
* mipsbsd.c (MY(canonicalize_reloc)): Likewise.
* nlmcode.h (nlm_get_symtab_upper_bound): Likewise.
(nlm_get_symtab): Likewise.
(nlm_get_reloc_upper_bound): Likewise.
(nlm_canonicalize_reloc): Likewise.
* oasys.c (oasys_get_symtab_upper_bound): Likewise.
(oasys_get_symtab): Likewise.
(oasys_get_reloc_upper_bound): Likewise.
(oasys_canonicalize_reloc): Likewise.
* som.c (som_get_symtab_upper_bound): Likewise.
(som_get_symtab): Likewise.
(som_get_reloc_upper_bound): Likewise.
(som_canonicalize_reloc): Likewise.
* srec.c (srec_get_symtab_upper_bound): Likewise.
(srec_get_symtab): Likewise.
(srec_get_reloc_upper_bound): Define as bfd_0l.
(srec_canonicalize_reloc): Likewise.
* tekhex.c (tekhex_get_symtab): Return long, and -1 on errors.
(tekhex_get_symtab_upper_bound): Likewise.
(tekhex_get_reloc_upper_bound): Define as bfd_0l.
(tekhex_canonicalize_reloc): Likewise.
* libaout.h (NAME(aout,get_symtab_upper_bound)): Change
declaration to return long.
(NAME(aout,get_symtab)): Likewise.
(NAME(aout,canonicalize_reloc)): Likewise.
(NAME(aout,get_reloc_upper_bound)): Likewise.
* libcoff-in.h (coff_get_symtab_upper_bound): Likewise.
(coff_get_symtab): Likewise.
(coff_get_reloc_upper_bound): Likewise.
* libecoff.h (ecoff_get_symtab_upper_bound): Likewise.
(ecoff_get_symtab): Likewise.
(ecoff_canonicalize_reloc): Likewise.
* libelf.h (bfd_elf32_get_symtab_upper_bound): Likewise.
(bfd_elf32_get_symtab): Likewise.
(bfd_elf32_get_reloc_upper_bound): Likewise.
(bfd_elf32_canonicalize_reloc): Likewise.
(bfd_elf64_get_symtab_upper_bound): Likewise.
(bfd_elf64_get_symtab): Likewise.
(bfd_elf64_get_reloc_upper_bound): Likewise.
(bfd_elf64_canonicalize_reloc): Likewise.
* libnlm.h (nlmNAME(get_symtab_upper_bound)): Likewise.
(nlmNAME(get_symtab)): Likewise.
(nlmNAME(get_reloc_upper_bound)): Likewise.
(nlmNAME(canonicalize_reloc)): Likewise.
* archive.c (compute_and_write_armap): Use error_return and
no_memory_return labels rather than freeing information in various
places. Change storage, symcount and src_count to long. Check
errors from bfd_get_symtab_upper_bound and
bfd_canonicalize_symtab.
* bout.c (b_out_relax_section): Change reloc_size to long. Check
for errors from bfd_get_reloc_upper_bound and
bfd_canonicalize_reloc.
(b_out_get_relocated_section_contents): Likewise.
* coff-alpha.c (alpha_ecoff_get_relocated_section_contents):
Likewise.
* elf32-mips.c: Likewise.
* elf32-hppa.c (hppa_elf_stub_finish): Likewise.
(hppa_look_for_stubs_in_section): Check for errors from
bfd_get_symtab_upper_bound, bfd_canonicalize_symtab, and
bfd_canonicalize_reloc.
* ecofflink.c (bfd_ecoff_debug_accumulate_other): Check for errors
from bfd_get_symtab_upper_bound and bfd_canonicalize_symtab.
* linker.c (generic_link_read_symbols): Likewise.
(_bfd_generic_final_link): Check for errors from
bfd_get_reloc_upper_bound and bfd_canonicalize_reloc.
* reloc.c (bfd_generic_get_relocated_section_contents): Likewise.
* reloc16.c (bfd_coff_reloc16_relax_section): Likewise.
(bfd_coff_reloc16_get_relocated_section_contents): Likewise.
* libbfd.c (bfd_0l): New function.
* libbfd-in.h (bfd_0l): Declare.
* aix386-core.c: Change get_symtab_upper_bound, get_symtab,
get_reloc_upper_bound, and canonicalize_reloc to use bfd_0l rather
than bfd_0u.
* cisco-core.c, hppabsd-core.c, hpux-core.c: Likewise.
* irix-core.c, osf-core.c, ptrace-core.c, trad-core.c: Likewise.
* bfd-in2.h: Rebuilt.
* libbfd.h: Rebuilt.
* libcoff.h: Rebuilt.
* nlm32-sparc.c (nlm_sparc_read_reloc): Remove unused variables
temp and name.
Wed Mar 30 08:33:04 1994 Jim Kingdon (kingdon@lioth.cygnus.com) Wed Mar 30 08:33:04 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
* hosts/dpx2.h: Define POSIX_UTIME. * hosts/dpx2.h: Define POSIX_UTIME.

View File

@ -261,13 +261,13 @@ aix386_core_file_matches_executable_p (core_bfd, exec_bfd)
#define aix386_get_section_contents bfd_generic_get_section_contents #define aix386_get_section_contents bfd_generic_get_section_contents
#define aix386_new_section_hook (PROTO (boolean, (*), \ #define aix386_new_section_hook (PROTO (boolean, (*), \
(bfd *, sec_ptr))) bfd_true (bfd *, sec_ptr))) bfd_true
#define aix386_get_symtab_upper_bound bfd_0u #define aix386_get_symtab_upper_bound bfd_0l
#define aix386_get_symtab (PROTO (unsigned int, (*), \ #define aix386_get_symtab (PROTO (long, (*), \
(bfd *, struct symbol_cache_entry **))) bfd_0u (bfd *, struct symbol_cache_entry **))) bfd_0l
#define aix386_get_reloc_upper_bound (PROTO (unsigned int, (*), \ #define aix386_get_reloc_upper_bound (PROTO (long, (*), \
(bfd *, sec_ptr))) bfd_0u (bfd *, sec_ptr))) bfd_0l
#define aix386_canonicalize_reloc (PROTO (unsigned int, (*), \ #define aix386_canonicalize_reloc (PROTO (long, (*), \
(bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0u (bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0l
#define aix386_make_empty_symbol (PROTO ( \ #define aix386_make_empty_symbol (PROTO ( \
struct symbol_cache_entry *, (*), (bfd *))) bfd_false struct symbol_cache_entry *, (*), (bfd *))) bfd_false
#define aix386_print_symbol (PROTO (void, (*), \ #define aix386_print_symbol (PROTO (void, (*), \

View File

@ -1998,7 +1998,7 @@ NAME(aout,write_syms) (abfd)
} }
unsigned int long
NAME(aout,get_symtab) (abfd, location) NAME(aout,get_symtab) (abfd, location)
bfd *abfd; bfd *abfd;
asymbol **location; asymbol **location;
@ -2006,7 +2006,8 @@ NAME(aout,get_symtab) (abfd, location)
unsigned int counter = 0; unsigned int counter = 0;
aout_symbol_type *symbase; aout_symbol_type *symbase;
if (!NAME(aout,slurp_symbol_table)(abfd)) return 0; if (!NAME(aout,slurp_symbol_table)(abfd))
return -1;
for (symbase = obj_aout_symbols(abfd); counter++ < bfd_get_symcount (abfd);) for (symbase = obj_aout_symbols(abfd); counter++ < bfd_get_symcount (abfd);)
*(location++) = (asymbol *)( symbase++); *(location++) = (asymbol *)( symbase++);
@ -2504,7 +2505,7 @@ NAME(aout,squirt_out_relocs) (abfd, section)
} }
/* This is stupid. This function should be a boolean predicate */ /* This is stupid. This function should be a boolean predicate */
unsigned int long
NAME(aout,canonicalize_reloc) (abfd, section, relptr, symbols) NAME(aout,canonicalize_reloc) (abfd, section, relptr, symbols)
bfd *abfd; bfd *abfd;
sec_ptr section; sec_ptr section;
@ -2515,7 +2516,7 @@ NAME(aout,canonicalize_reloc) (abfd, section, relptr, symbols)
unsigned int count; unsigned int count;
if (!(tblptr || NAME(aout,slurp_reloc_table)(abfd, section, symbols))) if (!(tblptr || NAME(aout,slurp_reloc_table)(abfd, section, symbols)))
return 0; return -1;
if (section->flags & SEC_CONSTRUCTOR) { if (section->flags & SEC_CONSTRUCTOR) {
arelent_chain *chain = section->constructor_chain; arelent_chain *chain = section->constructor_chain;
@ -2538,7 +2539,7 @@ NAME(aout,canonicalize_reloc) (abfd, section, relptr, symbols)
return section->reloc_count; return section->reloc_count;
} }
unsigned int long
NAME(aout,get_reloc_upper_bound) (abfd, asect) NAME(aout,get_reloc_upper_bound) (abfd, asect)
bfd *abfd; bfd *abfd;
sec_ptr asect; sec_ptr asect;
@ -2547,7 +2548,7 @@ NAME(aout,get_reloc_upper_bound) (abfd, asect)
if (bfd_get_format (abfd) != bfd_object) { if (bfd_get_format (abfd) != bfd_object) {
bfd_set_error (bfd_error_invalid_operation); bfd_set_error (bfd_error_invalid_operation);
return 0; return -1;
} }
if (asect->flags & SEC_CONSTRUCTOR) { if (asect->flags & SEC_CONSTRUCTOR) {
return (sizeof (arelent *) * (asect->reloc_count+1)); return (sizeof (arelent *) * (asect->reloc_count+1));
@ -2561,7 +2562,7 @@ NAME(aout,get_reloc_upper_bound) (abfd, asect)
dynrel_count = ((*aout_backend_info (abfd)->read_dynamic_relocs) dynrel_count = ((*aout_backend_info (abfd)->read_dynamic_relocs)
(abfd, &dynrels)); (abfd, &dynrels));
if (dynrel_count == (bfd_size_type) -1) if (dynrel_count == (bfd_size_type) -1)
return 0; return -1;
} }
if (asect == obj_datasec (abfd)) if (asect == obj_datasec (abfd))
@ -2575,15 +2576,16 @@ NAME(aout,get_reloc_upper_bound) (abfd, asect)
+ dynrel_count + 1)); + dynrel_count + 1));
bfd_set_error (bfd_error_invalid_operation); bfd_set_error (bfd_error_invalid_operation);
return 0; return -1;
} }
unsigned int long
NAME(aout,get_symtab_upper_bound) (abfd) NAME(aout,get_symtab_upper_bound) (abfd)
bfd *abfd; bfd *abfd;
{ {
if (!NAME(aout,slurp_symbol_table)(abfd)) return 0; if (!NAME(aout,slurp_symbol_table)(abfd))
return -1;
return (bfd_get_symcount (abfd)+1) * (sizeof (aout_symbol_type *)); return (bfd_get_symcount (abfd)+1) * (sizeof (aout_symbol_type *));
} }

View File

@ -1596,15 +1596,15 @@ compute_and_write_armap (arch, elength)
bfd *arch; bfd *arch;
unsigned int elength; unsigned int elength;
{ {
char *first_name; char *first_name = NULL;
bfd *current; bfd *current;
file_ptr elt_no = 0; file_ptr elt_no = 0;
struct orl *map; struct orl *map = NULL;
int orl_max = 1024; /* fine initial default */ int orl_max = 1024; /* fine initial default */
int orl_count = 0; int orl_count = 0;
int stridx = 0; /* string index */ int stridx = 0; /* string index */
asymbol **syms = NULL; asymbol **syms = NULL;
unsigned int syms_max = 0; long syms_max = 0;
boolean ret; boolean ret;
/* Dunno if this is the best place for this info... */ /* Dunno if this is the best place for this info... */
@ -1614,20 +1614,13 @@ compute_and_write_armap (arch, elength)
map = (struct orl *) malloc (orl_max * sizeof (struct orl)); map = (struct orl *) malloc (orl_max * sizeof (struct orl));
if (map == NULL) if (map == NULL)
{ goto no_memory_return;
bfd_set_error (bfd_error_no_memory);
return false;
}
/* We put the symbol names on the arch obstack, and then discard /* We put the symbol names on the arch obstack, and then discard
them when done. */ them when done. */
first_name = bfd_alloc (arch, 1); first_name = bfd_alloc (arch, 1);
if (first_name == NULL) if (first_name == NULL)
{ goto no_memory_return;
free (map);
bfd_set_error (bfd_error_no_memory);
return false;
}
/* Drop all the files called __.SYMDEF, we're going to make our /* Drop all the files called __.SYMDEF, we're going to make our
own */ own */
@ -1643,11 +1636,14 @@ compute_and_write_armap (arch, elength)
if ((bfd_check_format (current, bfd_object) == true) if ((bfd_check_format (current, bfd_object) == true)
&& ((bfd_get_file_flags (current) & HAS_SYMS))) && ((bfd_get_file_flags (current) & HAS_SYMS)))
{ {
unsigned int storage; long storage;
unsigned int symcount; long symcount;
unsigned int src_count; long src_count;
storage = bfd_get_symtab_upper_bound (current);
if (storage < 0)
goto error_return;
storage = get_symtab_upper_bound (current);
if (storage != 0) if (storage != 0)
{ {
if (storage > syms_max) if (storage > syms_max)
@ -1655,16 +1651,13 @@ compute_and_write_armap (arch, elength)
if (syms_max > 0) if (syms_max > 0)
free (syms); free (syms);
syms_max = storage; syms_max = storage;
syms = (asymbol **) malloc (syms_max); syms = (asymbol **) malloc ((size_t) syms_max);
if (syms == NULL) if (syms == NULL)
{ goto no_memory_return;
free (map);
bfd_release (arch, first_name);
bfd_set_error (bfd_error_no_memory);
return false;
}
} }
symcount = bfd_canonicalize_symtab (current, syms); symcount = bfd_canonicalize_symtab (current, syms);
if (symcount < 0)
goto error_return;
/* Now map over all the symbols, picking out the ones we want */ /* Now map over all the symbols, picking out the ones we want */
for (src_count = 0; src_count < symcount; src_count++) for (src_count = 0; src_count < symcount; src_count++)
@ -1689,14 +1682,7 @@ compute_and_write_armap (arch, elength)
realloc ((PTR) map, realloc ((PTR) map,
orl_max * sizeof (struct orl))); orl_max * sizeof (struct orl)));
if (new_map == (struct orl *) NULL) if (new_map == (struct orl *) NULL)
{ goto no_memory_return;
free_and_quit:
free (syms);
free (map);
bfd_release (arch, first_name);
bfd_set_error (bfd_error_no_memory);
return false;
}
map = new_map; map = new_map;
} }
@ -1706,10 +1692,10 @@ compute_and_write_armap (arch, elength)
bfd_alloc (arch, bfd_alloc (arch,
sizeof (char *))); sizeof (char *)));
if (map[orl_count].name == NULL) if (map[orl_count].name == NULL)
goto free_and_quit; goto no_memory_return;
*(map[orl_count].name) = bfd_alloc (arch, namelen + 1); *(map[orl_count].name) = bfd_alloc (arch, namelen + 1);
if (*(map[orl_count].name) == NULL) if (*(map[orl_count].name) == NULL)
goto free_and_quit; goto no_memory_return;
strcpy (*(map[orl_count].name), syms[src_count]->name); strcpy (*(map[orl_count].name), syms[src_count]->name);
(map[orl_count]).pos = (file_ptr) current; (map[orl_count]).pos = (file_ptr) current;
(map[orl_count]).namidx = stridx; (map[orl_count]).namidx = stridx;
@ -1728,10 +1714,25 @@ compute_and_write_armap (arch, elength)
if (syms_max > 0) if (syms_max > 0)
free (syms); free (syms);
free (map); if (map != NULL)
bfd_release (arch, first_name); free (map);
if (first_name != NULL)
bfd_release (arch, first_name);
return ret; return ret;
no_memory_return:
bfd_set_error (bfd_error_no_memory);
error_return:
if (syms_max > 0)
free (syms);
if (map != NULL)
free (map);
if (first_name != NULL)
bfd_release (arch, first_name);
return false;
} }
boolean boolean

View File

@ -1640,8 +1640,8 @@ typedef struct symbol_cache_entry
PTR udata; PTR udata;
} asymbol; } asymbol;
#define get_symtab_upper_bound(abfd) \ #define bfd_get_symtab_upper_bound(abfd) \
BFD_SEND (abfd, _get_symtab_upper_bound, (abfd)) BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
boolean boolean
bfd_is_local_label PARAMS ((bfd *abfd, asymbol *sym)); bfd_is_local_label PARAMS ((bfd *abfd, asymbol *sym));
@ -1802,6 +1802,7 @@ struct _bfd
struct sgi_core_struct *sgi_core_data; struct sgi_core_struct *sgi_core_data;
struct lynx_core_struct *lynx_core_data; struct lynx_core_struct *lynx_core_data;
struct osf_core_struct *osf_core_data; struct osf_core_struct *osf_core_data;
struct cisco_core_struct *cisco_core_data;
PTR any; PTR any;
} tdata; } tdata;
@ -1845,10 +1846,10 @@ bfd_errmsg PARAMS ((bfd_error_type error_tag));
void void
bfd_perror PARAMS ((CONST char *message)); bfd_perror PARAMS ((CONST char *message));
unsigned int long
bfd_get_reloc_upper_bound PARAMS ((bfd *abfd, asection *sect)); bfd_get_reloc_upper_bound PARAMS ((bfd *abfd, asection *sect));
unsigned int long
bfd_canonicalize_reloc bfd_canonicalize_reloc
PARAMS ((bfd *abfd, PARAMS ((bfd *abfd,
asection *sec, asection *sec,
@ -1915,9 +1916,8 @@ bfd_copy_private_bfd_data PARAMS ((bfd *ibfd, bfd *obfd));
BFD_SEND (abfd, _bfd_get_relocated_section_contents, \ BFD_SEND (abfd, _bfd_get_relocated_section_contents, \
(abfd, link_info, link_order, data, relocateable, symbols)) (abfd, link_info, link_order, data, relocateable, symbols))
#define bfd_relax_section(abfd, section, link_info, symbols) \ #define bfd_relax_section(abfd, section, link_info, again) \
BFD_SEND (abfd, _bfd_relax_section, \ BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
(abfd, section, link_info, symbols))
#define bfd_link_hash_table_create(abfd) \ #define bfd_link_hash_table_create(abfd) \
BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd)) BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
@ -2040,12 +2040,12 @@ typedef struct bfd_target
boolean (*_bfd_copy_private_section_data) PARAMS ((bfd *, sec_ptr, boolean (*_bfd_copy_private_section_data) PARAMS ((bfd *, sec_ptr,
bfd *, sec_ptr)); bfd *, sec_ptr));
boolean (*_bfd_copy_private_bfd_data) PARAMS ((bfd *, bfd *)); boolean (*_bfd_copy_private_bfd_data) PARAMS ((bfd *, bfd *));
unsigned int (*_get_symtab_upper_bound) PARAMS ((bfd *)); long (*_bfd_get_symtab_upper_bound) PARAMS ((bfd *));
unsigned int (*_bfd_canonicalize_symtab) PARAMS ((bfd *, long (*_bfd_canonicalize_symtab) PARAMS ((bfd *,
struct symbol_cache_entry **)); struct symbol_cache_entry **));
unsigned int (*_get_reloc_upper_bound) PARAMS ((bfd *, sec_ptr)); long (*_get_reloc_upper_bound) PARAMS ((bfd *, sec_ptr));
unsigned int (*_bfd_canonicalize_reloc) PARAMS ((bfd *, sec_ptr, arelent **, long (*_bfd_canonicalize_reloc) PARAMS ((bfd *, sec_ptr, arelent **,
struct symbol_cache_entry **)); struct symbol_cache_entry **));
struct symbol_cache_entry * struct symbol_cache_entry *
(*_bfd_make_empty_symbol) PARAMS ((bfd *)); (*_bfd_make_empty_symbol) PARAMS ((bfd *));
void (*_bfd_print_symbol) PARAMS ((bfd *, PTR, void (*_bfd_print_symbol) PARAMS ((bfd *, PTR,
@ -2083,7 +2083,7 @@ typedef struct bfd_target
struct symbol_cache_entry **)); struct symbol_cache_entry **));
boolean (*_bfd_relax_section) PARAMS ((bfd *, struct sec *, boolean (*_bfd_relax_section) PARAMS ((bfd *, struct sec *,
struct bfd_link_info *, struct symbol_cache_entry **)); struct bfd_link_info *, boolean *again));
/* See documentation on reloc types. */ /* See documentation on reloc types. */
CONST struct reloc_howto_struct * CONST struct reloc_howto_struct *

View File

@ -168,6 +168,7 @@ CODE_FRAGMENT
. struct sgi_core_struct *sgi_core_data; . struct sgi_core_struct *sgi_core_data;
. struct lynx_core_struct *lynx_core_data; . struct lynx_core_struct *lynx_core_data;
. struct osf_core_struct *osf_core_data; . struct osf_core_struct *osf_core_data;
. struct cisco_core_struct *cisco_core_data;
. PTR any; . PTR any;
. } tdata; . } tdata;
. .
@ -366,24 +367,24 @@ FUNCTION
bfd_get_reloc_upper_bound bfd_get_reloc_upper_bound
SYNOPSIS SYNOPSIS
unsigned int bfd_get_reloc_upper_bound(bfd *abfd, asection *sect); long bfd_get_reloc_upper_bound(bfd *abfd, asection *sect);
DESCRIPTION DESCRIPTION
Return the number of bytes required to store the Return the number of bytes required to store the
relocation information associated with section @var{sect} relocation information associated with section @var{sect}
attached to bfd @var{abfd}. attached to bfd @var{abfd}. If an error occurs, return -1.
*/ */
unsigned int long
bfd_get_reloc_upper_bound (abfd, asect) bfd_get_reloc_upper_bound (abfd, asect)
bfd *abfd; bfd *abfd;
sec_ptr asect; sec_ptr asect;
{ {
if (abfd->format != bfd_object) { if (abfd->format != bfd_object) {
bfd_set_error (bfd_error_invalid_operation); bfd_set_error (bfd_error_invalid_operation);
return 0; return -1;
} }
return BFD_SEND (abfd, _get_reloc_upper_bound, (abfd, asect)); return BFD_SEND (abfd, _get_reloc_upper_bound, (abfd, asect));
@ -394,7 +395,7 @@ FUNCTION
bfd_canonicalize_reloc bfd_canonicalize_reloc
SYNOPSIS SYNOPSIS
unsigned int bfd_canonicalize_reloc long bfd_canonicalize_reloc
(bfd *abfd, (bfd *abfd,
asection *sec, asection *sec,
arelent **loc, arelent **loc,
@ -406,14 +407,15 @@ DESCRIPTION
information attached to @var{sec} into the internal canonical information attached to @var{sec} into the internal canonical
form. Place the table into memory at @var{loc}, which has form. Place the table into memory at @var{loc}, which has
been preallocated, usually by a call to been preallocated, usually by a call to
<<bfd_get_reloc_upper_bound>>. <<bfd_get_reloc_upper_bound>>. Returns the number of relocs, or
-1 on error.
The @var{syms} table is also needed for horrible internal magic The @var{syms} table is also needed for horrible internal magic
reasons. reasons.
*/ */
unsigned int long
bfd_canonicalize_reloc (abfd, asect, location, symbols) bfd_canonicalize_reloc (abfd, asect, location, symbols)
bfd *abfd; bfd *abfd;
sec_ptr asect; sec_ptr asect;
@ -422,7 +424,7 @@ bfd_canonicalize_reloc (abfd, asect, location, symbols)
{ {
if (abfd->format != bfd_object) { if (abfd->format != bfd_object) {
bfd_set_error (bfd_error_invalid_operation); bfd_set_error (bfd_error_invalid_operation);
return 0; return -1;
} }
return BFD_SEND (abfd, _bfd_canonicalize_reloc, return BFD_SEND (abfd, _bfd_canonicalize_reloc,
(abfd, asect, location, symbols)); (abfd, asect, location, symbols));
@ -737,6 +739,27 @@ bfd_scan_vma (string, end, base)
return value; return value;
} }
/*
FUNCTION
bfd_copy_private_bfd_data
SYNOPSIS
boolean bfd_copy_private_bfd_data(bfd *ibfd, bfd *obfd);
DESCRIPTION
Copy private BFD information from the BFD @var{ibfd} to the
the BFD @var{obfd}. Return <<true>> on success, <<false>> on error.
Possible error returns are:
o <<bfd_error_no_memory>> -
Not enough memory exists to create private data for @var{obfd}.
.#define bfd_copy_private_bfd_data(ibfd, obfd) \
. BFD_SEND (ibfd, _bfd_copy_private_bfd_data, \
. (ibfd, obfd))
*/
/* /*
FUNCTION FUNCTION
stuff stuff
@ -771,9 +794,8 @@ DESCRIPTION
. BFD_SEND (abfd, _bfd_get_relocated_section_contents, \ . BFD_SEND (abfd, _bfd_get_relocated_section_contents, \
. (abfd, link_info, link_order, data, relocateable, symbols)) . (abfd, link_info, link_order, data, relocateable, symbols))
. .
.#define bfd_relax_section(abfd, section, link_info, symbols) \ .#define bfd_relax_section(abfd, section, link_info, again) \
. BFD_SEND (abfd, _bfd_relax_section, \ . BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
. (abfd, section, link_info, symbols))
. .
.#define bfd_link_hash_table_create(abfd) \ .#define bfd_link_hash_table_create(abfd) \
. BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd)) . BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))

View File

@ -797,7 +797,7 @@ b_out_squirt_out_relocs (abfd, section)
} }
/* This is stupid. This function should be a boolean predicate */ /* This is stupid. This function should be a boolean predicate */
static unsigned int static long
b_out_canonicalize_reloc (abfd, section, relptr, symbols) b_out_canonicalize_reloc (abfd, section, relptr, symbols)
bfd *abfd; bfd *abfd;
sec_ptr section; sec_ptr section;
@ -807,9 +807,11 @@ b_out_canonicalize_reloc (abfd, section, relptr, symbols)
arelent *tblptr = section->relocation; arelent *tblptr = section->relocation;
unsigned int count = 0; unsigned int count = 0;
if (!(tblptr || b_out_slurp_reloc_table (abfd, section, symbols))) return 0; if (!(tblptr || b_out_slurp_reloc_table (abfd, section, symbols)))
return -1;
tblptr = section->relocation; tblptr = section->relocation;
if (!tblptr) return 0; if (!tblptr)
return -1;
for (; count++ < section->reloc_count;) for (; count++ < section->reloc_count;)
*relptr++ = tblptr++; *relptr++ = tblptr++;
@ -819,14 +821,14 @@ b_out_canonicalize_reloc (abfd, section, relptr, symbols)
return section->reloc_count; return section->reloc_count;
} }
static unsigned int static long
b_out_get_reloc_upper_bound (abfd, asect) b_out_get_reloc_upper_bound (abfd, asect)
bfd *abfd; bfd *abfd;
sec_ptr asect; sec_ptr asect;
{ {
if (bfd_get_format (abfd) != bfd_object) { if (bfd_get_format (abfd) != bfd_object) {
bfd_set_error (bfd_error_invalid_operation); bfd_set_error (bfd_error_invalid_operation);
return 0; return -1;
} }
if (asect == obj_datasec (abfd)) if (asect == obj_datasec (abfd))
@ -843,7 +845,7 @@ b_out_get_reloc_upper_bound (abfd, asect)
return 0; return 0;
bfd_set_error (bfd_error_invalid_operation); bfd_set_error (bfd_error_invalid_operation);
return 0; return -1;
} }
static boolean static boolean
@ -1099,8 +1101,11 @@ b_out_relax_section (abfd, i, link_info, again)
asection *input_section = i; asection *input_section = i;
int shrink = 0 ; int shrink = 0 ;
arelent **reloc_vector = NULL; arelent **reloc_vector = NULL;
bfd_size_type reloc_size = bfd_get_reloc_upper_bound(input_bfd, long reloc_size = bfd_get_reloc_upper_bound(input_bfd,
input_section); input_section);
if (reloc_size < 0)
return false;
/* We only run this relaxation once. It might work to run it /* We only run this relaxation once. It might work to run it
multiple times, but it hasn't been tested. */ multiple times, but it hasn't been tested. */
@ -1108,6 +1113,8 @@ b_out_relax_section (abfd, i, link_info, again)
if (reloc_size) if (reloc_size)
{ {
long reloc_count;
reloc_vector = (arelent **) malloc (reloc_size); reloc_vector = (arelent **) malloc (reloc_size);
if (reloc_vector == NULL && reloc_size != 0) if (reloc_vector == NULL && reloc_size != 0)
{ {
@ -1116,8 +1123,12 @@ b_out_relax_section (abfd, i, link_info, again)
} }
/* Get the relocs and think about them */ /* Get the relocs and think about them */
if (bfd_canonicalize_reloc(input_bfd, input_section, reloc_vector, reloc_count =
_bfd_generic_link_get_symbols (input_bfd))) bfd_canonicalize_reloc (input_bfd, input_section, reloc_vector,
_bfd_generic_link_get_symbols (input_bfd));
if (reloc_count < 0)
goto error_return;
if (reloc_count > 0)
{ {
arelent **parent; arelent **parent;
for (parent = reloc_vector; *parent; parent++) for (parent = reloc_vector; *parent; parent++)
@ -1165,9 +1176,13 @@ b_out_get_relocated_section_contents (in_abfd, link_info, link_order, data,
/* Get enough memory to hold the stuff */ /* Get enough memory to hold the stuff */
bfd *input_bfd = link_order->u.indirect.section->owner; bfd *input_bfd = link_order->u.indirect.section->owner;
asection *input_section = link_order->u.indirect.section; asection *input_section = link_order->u.indirect.section;
bfd_size_type reloc_size = bfd_get_reloc_upper_bound(input_bfd, long reloc_size = bfd_get_reloc_upper_bound(input_bfd,
input_section); input_section);
arelent **reloc_vector = NULL; arelent **reloc_vector = NULL;
long reloc_count;
if (reloc_size < 0)
goto error_return;
/* If producing relocateable output, don't bother to relax. */ /* If producing relocateable output, don't bother to relax. */
if (relocateable) if (relocateable)
@ -1192,10 +1207,13 @@ b_out_get_relocated_section_contents (in_abfd, link_info, link_order, data,
0, 0,
input_section->_raw_size)); input_section->_raw_size));
if (bfd_canonicalize_reloc(input_bfd, reloc_count = bfd_canonicalize_reloc (input_bfd,
input_section, input_section,
reloc_vector, reloc_vector,
symbols) ) symbols);
if (reloc_count < 0)
goto error_return;
if (reloc_count > 0)
{ {
arelent **parent = reloc_vector; arelent **parent = reloc_vector;
arelent *reloc ; arelent *reloc ;

View File

@ -112,8 +112,9 @@ cisco_core_file_p (abfd)
/* OK, we believe you. You're a core file. */ /* OK, we believe you. You're a core file. */
abfd->tdata.cisco_core_data = (struct cisco_core_struct *) abfd->tdata.cisco_core_data =
bfd_zmalloc (abfd, sizeof (struct cisco_core_struct)); ((struct cisco_core_struct *)
bfd_zmalloc (sizeof (struct cisco_core_struct)));
if (abfd->tdata.cisco_core_data == NULL) if (abfd->tdata.cisco_core_data == NULL)
{ {
bfd_set_error (bfd_error_no_memory); bfd_set_error (bfd_error_no_memory);
@ -245,7 +246,7 @@ cisco_core_file_p (abfd)
free (asect); free (asect);
asect = nextsect; asect = nextsect;
} }
free (abfd->tdata); free (abfd->tdata.cisco_core_data);
return NULL; return NULL;
} }
} }
@ -290,13 +291,13 @@ cisco_core_file_matches_executable_p (core_bfd, exec_bfd)
#define cisco_get_section_contents bfd_generic_get_section_contents #define cisco_get_section_contents bfd_generic_get_section_contents
#define cisco_new_section_hook (boolean (*) PARAMS \ #define cisco_new_section_hook (boolean (*) PARAMS \
((bfd *, sec_ptr))) bfd_true ((bfd *, sec_ptr))) bfd_true
#define cisco_get_symtab_upper_bound bfd_0u #define cisco_get_symtab_upper_bound bfd_0l
#define cisco_get_symtab (unsigned int (*) PARAMS \ #define cisco_get_symtab (long (*) PARAMS \
((bfd *, struct symbol_cache_entry **))) bfd_0u ((bfd *, struct symbol_cache_entry **))) bfd_0l
#define cisco_get_reloc_upper_bound (unsigned int (*) PARAMS \ #define cisco_get_reloc_upper_bound (long (*) PARAMS \
((bfd *, sec_ptr))) bfd_0u ((bfd *, sec_ptr))) bfd_0l
#define cisco_canonicalize_reloc (unsigned int (*) PARAMS \ #define cisco_canonicalize_reloc (long (*) PARAMS \
((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0u ((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0l
#define cisco_make_empty_symbol (struct symbol_cache_entry * \ #define cisco_make_empty_symbol (struct symbol_cache_entry * \
(*) PARAMS ((bfd *))) bfd_false (*) PARAMS ((bfd *))) bfd_false
#define cisco_print_symbol (void (*) PARAMS \ #define cisco_print_symbol (void (*) PARAMS \
@ -337,7 +338,7 @@ cisco_core_file_matches_executable_p (core_bfd, exec_bfd)
#define cisco_bfd_copy_private_bfd_data \ #define cisco_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false) ((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define cisco_bfd_is_local_label \ #define cisco_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, asection *))) bfd_false) ((boolean (*) PARAMS ((bfd *, asymbol *))) bfd_false)
bfd_target cisco_core_vec = bfd_target cisco_core_vec =
{ {

View File

@ -714,14 +714,17 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
{ {
bfd *input_bfd = link_order->u.indirect.section->owner; bfd *input_bfd = link_order->u.indirect.section->owner;
asection *input_section = link_order->u.indirect.section; asection *input_section = link_order->u.indirect.section;
size_t reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section); long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
arelent **reloc_vector = NULL; arelent **reloc_vector = NULL;
long reloc_count;
bfd *output_bfd = relocateable ? abfd : (bfd *) NULL; bfd *output_bfd = relocateable ? abfd : (bfd *) NULL;
bfd_vma gp; bfd_vma gp;
boolean gp_undefined; boolean gp_undefined;
bfd_vma stack[RELOC_STACKSIZE]; bfd_vma stack[RELOC_STACKSIZE];
int tos = 0; int tos = 0;
if (reloc_size < 0)
goto error_return;
reloc_vector = (arelent **) malloc (reloc_size); reloc_vector = (arelent **) malloc (reloc_size);
if (reloc_vector == NULL && reloc_size != 0) if (reloc_vector == NULL && reloc_size != 0)
{ {
@ -737,9 +740,11 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order,
input_section->_cooked_size = input_section->_raw_size; input_section->_cooked_size = input_section->_raw_size;
input_section->reloc_done = true; input_section->reloc_done = true;
if (bfd_canonicalize_reloc (input_bfd, input_section, reloc_vector, reloc_count = bfd_canonicalize_reloc (input_bfd, input_section,
symbols) reloc_vector, symbols);
== 0) if (reloc_count < 0)
goto error_return;
if (reloc_count == 0)
goto successful_return; goto successful_return;
/* Get the GP value for the output BFD. */ /* Get the GP value for the output BFD. */

View File

@ -2376,7 +2376,7 @@ coff_slurp_reloc_table (abfd, asect, symbols)
/* This is stupid. This function should be a boolean predicate. */ /* This is stupid. This function should be a boolean predicate. */
static unsigned int static long
coff_canonicalize_reloc (abfd, section, relptr, symbols) coff_canonicalize_reloc (abfd, section, relptr, symbols)
bfd * abfd; bfd * abfd;
sec_ptr section; sec_ptr section;
@ -2402,12 +2402,12 @@ coff_canonicalize_reloc (abfd, section, relptr, symbols)
} }
else else
{ {
coff_slurp_reloc_table (abfd, section, symbols); if (! coff_slurp_reloc_table (abfd, section, symbols))
return -1;
tblptr = section->relocation; tblptr = section->relocation;
if (!tblptr) if (!tblptr)
return 0; return -1;
for (; count++ < section->reloc_count;) for (; count++ < section->reloc_count;)
*relptr++ = tblptr++; *relptr++ = tblptr++;

View File

@ -274,12 +274,12 @@ coff_section_from_bfd_index (abfd, index)
/* Get the upper bound of a COFF symbol table. */ /* Get the upper bound of a COFF symbol table. */
unsigned int long
coff_get_symtab_upper_bound(abfd) coff_get_symtab_upper_bound(abfd)
bfd *abfd; bfd *abfd;
{ {
if (!bfd_coff_slurp_symbol_table(abfd)) if (!bfd_coff_slurp_symbol_table(abfd))
return 0; return -1;
return (bfd_get_symcount(abfd) + 1) * (sizeof(coff_symbol_type *)); return (bfd_get_symcount(abfd) + 1) * (sizeof(coff_symbol_type *));
} }
@ -287,7 +287,7 @@ bfd *abfd;
/* Canonicalize a COFF symbol table. */ /* Canonicalize a COFF symbol table. */
unsigned int long
coff_get_symtab (abfd, alocation) coff_get_symtab (abfd, alocation)
bfd *abfd; bfd *abfd;
asymbol **alocation; asymbol **alocation;
@ -296,7 +296,7 @@ coff_get_symtab (abfd, alocation)
coff_symbol_type *symbase; coff_symbol_type *symbase;
coff_symbol_type **location = (coff_symbol_type **) (alocation); coff_symbol_type **location = (coff_symbol_type **) (alocation);
if (!bfd_coff_slurp_symbol_table(abfd)) if (!bfd_coff_slurp_symbol_table(abfd))
return 0; return -1;
symbase = obj_symbols(abfd); symbase = obj_symbols(abfd);
while (counter < bfd_get_symcount(abfd)) while (counter < bfd_get_symcount(abfd))
@ -1337,14 +1337,14 @@ coff_get_normalized_symtab (abfd)
return (internal); return (internal);
} /* coff_get_normalized_symtab() */ } /* coff_get_normalized_symtab() */
unsigned int long
coff_get_reloc_upper_bound (abfd, asect) coff_get_reloc_upper_bound (abfd, asect)
bfd *abfd; bfd *abfd;
sec_ptr asect; sec_ptr asect;
{ {
if (bfd_get_format(abfd) != bfd_object) { if (bfd_get_format(abfd) != bfd_object) {
bfd_set_error (bfd_error_invalid_operation); bfd_set_error (bfd_error_invalid_operation);
return 0; return -1;
} }
return (asect->reloc_count + 1) * sizeof(arelent *); return (asect->reloc_count + 1) * sizeof(arelent *);
} }

View File

@ -1212,12 +1212,14 @@ ecoff_slurp_symbol_table (abfd)
/* Return the amount of space needed for the canonical symbols. */ /* Return the amount of space needed for the canonical symbols. */
unsigned int long
ecoff_get_symtab_upper_bound (abfd) ecoff_get_symtab_upper_bound (abfd)
bfd *abfd; bfd *abfd;
{ {
if (ecoff_slurp_symbolic_info (abfd) == false if (! ecoff_slurp_symbolic_info (abfd))
|| bfd_get_symcount (abfd) == 0) return -1;
if (bfd_get_symcount (abfd) == 0)
return 0; return 0;
return (bfd_get_symcount (abfd) + 1) * (sizeof (ecoff_symbol_type *)); return (bfd_get_symcount (abfd) + 1) * (sizeof (ecoff_symbol_type *));
@ -1225,7 +1227,7 @@ ecoff_get_symtab_upper_bound (abfd)
/* Get the canonical symbols. */ /* Get the canonical symbols. */
unsigned int long
ecoff_get_symtab (abfd, alocation) ecoff_get_symtab (abfd, alocation)
bfd *abfd; bfd *abfd;
asymbol **alocation; asymbol **alocation;
@ -1234,8 +1236,9 @@ ecoff_get_symtab (abfd, alocation)
ecoff_symbol_type *symbase; ecoff_symbol_type *symbase;
ecoff_symbol_type **location = (ecoff_symbol_type **) alocation; ecoff_symbol_type **location = (ecoff_symbol_type **) alocation;
if (ecoff_slurp_symbol_table (abfd) == false if (ecoff_slurp_symbol_table (abfd) == false)
|| bfd_get_symcount (abfd) == 0) return -1;
if (bfd_get_symcount (abfd) == 0)
return 0; return 0;
symbase = ecoff_data (abfd)->canonical_symbols; symbase = ecoff_data (abfd)->canonical_symbols;
@ -1901,7 +1904,7 @@ ecoff_slurp_reloc_table (abfd, section, symbols)
/* Get a canonical list of relocs. */ /* Get a canonical list of relocs. */
unsigned int long
ecoff_canonicalize_reloc (abfd, section, relptr, symbols) ecoff_canonicalize_reloc (abfd, section, relptr, symbols)
bfd *abfd; bfd *abfd;
asection *section; asection *section;
@ -1927,11 +1930,11 @@ ecoff_canonicalize_reloc (abfd, section, relptr, symbols)
arelent *tblptr; arelent *tblptr;
if (ecoff_slurp_reloc_table (abfd, section, symbols) == false) if (ecoff_slurp_reloc_table (abfd, section, symbols) == false)
return 0; return -1;
tblptr = section->relocation; tblptr = section->relocation;
if (tblptr == (arelent *) NULL) if (tblptr == (arelent *) NULL)
return 0; return -1;
for (count = 0; count < section->reloc_count; count++) for (count = 0; count < section->reloc_count; count++)
*relptr++ = tblptr++; *relptr++ = tblptr++;

View File

@ -966,6 +966,8 @@ bfd_ecoff_debug_accumulate_other (handle, output_bfd, output_debug,
asymbol **symbols; asymbol **symbols;
asymbol **sym_ptr; asymbol **sym_ptr;
asymbol **sym_end; asymbol **sym_end;
long symsize;
long symcount;
PTR external_fdr; PTR external_fdr;
memset ((PTR) &fdr, 0, sizeof fdr); memset ((PTR) &fdr, 0, sizeof fdr);
@ -988,14 +990,19 @@ bfd_ecoff_debug_accumulate_other (handle, output_bfd, output_debug,
fdr.isymBase = output_symhdr->isymMax; fdr.isymBase = output_symhdr->isymMax;
/* Get the local symbols from the input BFD. */ /* Get the local symbols from the input BFD. */
symbols = (asymbol **) bfd_alloc (output_bfd, symsize = bfd_get_symtab_upper_bound (input_bfd);
get_symtab_upper_bound (input_bfd)); if (symsize < 0)
return false;
symbols = (asymbol **) bfd_alloc (output_bfd, symsize);
if (symbols == (asymbol **) NULL) if (symbols == (asymbol **) NULL)
{ {
bfd_set_error (bfd_error_no_memory); bfd_set_error (bfd_error_no_memory);
return false; return false;
} }
sym_end = symbols + bfd_canonicalize_symtab (input_bfd, symbols); symcount = bfd_canonicalize_symtab (input_bfd, symbols);
if (symcount < 0)
return false;
sym_end = symbols + symcount;
/* Handle the local symbols. Any external symbols are handled /* Handle the local symbols. Any external symbols are handled
separately. */ separately. */

View File

@ -1930,8 +1930,9 @@ hppa_elf_stub_finish (output_bfd)
bfd *stub_bfd = stub_list->this_bfd; bfd *stub_bfd = stub_list->this_bfd;
asection *stub_sec = bfd_get_section_by_name (stub_bfd, asection *stub_sec = bfd_get_section_by_name (stub_bfd,
".hppa_linker_stubs"); ".hppa_linker_stubs");
bfd_size_type reloc_size; long reloc_size;
arelent **reloc_vector; arelent **reloc_vector;
long reloc_count;
/* Some sanity checking. */ /* Some sanity checking. */
BFD_ASSERT (stub_sec == stub_list->stub_sec); BFD_ASSERT (stub_sec == stub_list->stub_sec);
@ -1944,6 +1945,11 @@ hppa_elf_stub_finish (output_bfd)
/* Make space to hold the relocations for the stub section. */ /* Make space to hold the relocations for the stub section. */
reloc_size = bfd_get_reloc_upper_bound (stub_bfd, stub_sec); reloc_size = bfd_get_reloc_upper_bound (stub_bfd, stub_sec);
if (reloc_size < 0)
{
/* FIXME: Should return an error. */
abort ();
}
reloc_vector = (arelent **) malloc (reloc_size); reloc_vector = (arelent **) malloc (reloc_size);
if (reloc_vector == NULL && reloc_size != 0) if (reloc_vector == NULL && reloc_size != 0)
{ {
@ -1953,8 +1959,15 @@ hppa_elf_stub_finish (output_bfd)
} }
/* If we have relocations, do them. */ /* If we have relocations, do them. */
if (bfd_canonicalize_reloc (stub_bfd, stub_sec, reloc_vector, reloc_count = bfd_canonicalize_reloc (stub_bfd, stub_sec,
output_bfd->outsymbols)) reloc_vector,
output_bfd->outsymbols);
if (reloc_count < 0)
{
/* FIXME: Should return an error. */
abort ();
}
if (reloc_count > 0)
{ {
arelent **parent; arelent **parent;
for (parent = reloc_vector; *parent != NULL; parent++) for (parent = reloc_vector; *parent != NULL; parent++)
@ -2742,21 +2755,28 @@ hppa_look_for_stubs_in_section (stub_bfd, abfd, output_bfd, asec,
location. */ location. */
if (bfd_get_outsymbols (abfd) == NULL) if (bfd_get_outsymbols (abfd) == NULL)
{ {
size_t symsize; long symsize;
long symcount;
symsize = get_symtab_upper_bound (abfd); symsize = bfd_get_symtab_upper_bound (abfd);
if (symsize < 0)
goto error_return;
abfd->outsymbols = (asymbol **) bfd_alloc (abfd, symsize); abfd->outsymbols = (asymbol **) bfd_alloc (abfd, symsize);
if (!abfd->outsymbols) if (!abfd->outsymbols && symsize != 0)
{ {
bfd_set_error (bfd_error_no_memory); bfd_set_error (bfd_error_no_memory);
goto error_return; goto error_return;
} }
abfd->symcount = bfd_canonicalize_symtab (abfd, abfd->outsymbols); symcount = bfd_canonicalize_symtab (abfd, abfd->outsymbols);
if (symcount < 0)
goto error_return;
abfd->symcount = symcount;
} }
/* Now get the relocations. */ /* Now get the relocations. */
bfd_canonicalize_reloc (abfd, asec, reloc_vector, if (bfd_canonicalize_reloc (abfd, asec, reloc_vector,
bfd_get_outsymbols (abfd)); bfd_get_outsymbols (abfd)) < 0)
goto error_return;
/* Examine each relocation entry in this section. */ /* Examine each relocation entry in this section. */
for (i = 0; i < asec->reloc_count; i++) for (i = 0; i < asec->reloc_count; i++)

View File

@ -1469,14 +1469,16 @@ mips_elf_final_link (abfd, info)
{ {
asection *input_section; asection *input_section;
bfd *input_bfd; bfd *input_bfd;
bfd_size_type relsize; long relsize;
arelent **relocs; arelent **relocs;
bfd_size_type reloc_count; long reloc_count;
input_section = p->u.indirect.section; input_section = p->u.indirect.section;
input_bfd = input_section->owner; input_bfd = input_section->owner;
relsize = bfd_get_reloc_upper_bound (input_bfd, relsize = bfd_get_reloc_upper_bound (input_bfd,
input_section); input_section);
if (relsize < 0)
return false;
relocs = (arelent **) malloc (relsize); relocs = (arelent **) malloc (relsize);
if (!relocs && relsize != 0) if (!relocs && relsize != 0)
{ {
@ -1487,6 +1489,8 @@ mips_elf_final_link (abfd, info)
bfd_canonicalize_reloc (input_bfd, input_section, bfd_canonicalize_reloc (input_bfd, input_section,
relocs, relocs,
bfd_get_outsymbols (input_bfd)); bfd_get_outsymbols (input_bfd));
if (reloc_count < 0)
return false;
BFD_ASSERT (reloc_count == input_section->reloc_count); BFD_ASSERT (reloc_count == input_section->reloc_count);
o->reloc_count += reloc_count; o->reloc_count += reloc_count;
free (relocs); free (relocs);

View File

@ -2740,14 +2740,14 @@ error_return:
the vector allocated based on this size. However, the ELF symbol table the vector allocated based on this size. However, the ELF symbol table
always has a dummy entry as symbol #0, so it ends up even. */ always has a dummy entry as symbol #0, so it ends up even. */
unsigned int long
elf_get_symtab_upper_bound (abfd) elf_get_symtab_upper_bound (abfd)
bfd *abfd; bfd *abfd;
{ {
unsigned int symcount; long symcount;
unsigned int symtab_size = 0; long symtab_size;
Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr; Elf_Internal_Shdr *hdr = &elf_tdata (abfd)->symtab_hdr;
symcount = hdr->sh_size / sizeof (Elf_External_Sym); symcount = hdr->sh_size / sizeof (Elf_External_Sym);
symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *)); symtab_size = (symcount - 1 + 1) * (sizeof (asymbol *));
@ -2760,7 +2760,7 @@ elf_get_symtab_upper_bound (abfd)
attached to bfd <<abfd>> attached to bfd <<abfd>>
*/ */
unsigned int long
elf_get_reloc_upper_bound (abfd, asect) elf_get_reloc_upper_bound (abfd, asect)
bfd *abfd; bfd *abfd;
sec_ptr asect; sec_ptr asect;
@ -3038,7 +3038,7 @@ elf_slurp_reloc_table (abfd, asect, symbols)
return true; return true;
} }
unsigned int long
elf_canonicalize_reloc (abfd, section, relptr, symbols) elf_canonicalize_reloc (abfd, section, relptr, symbols)
bfd *abfd; bfd *abfd;
sec_ptr section; sec_ptr section;
@ -3051,13 +3051,19 @@ elf_canonicalize_reloc (abfd, section, relptr, symbols)
/* snarfed from coffcode.h */ /* snarfed from coffcode.h */
if (use_rela_p) if (use_rela_p)
elf_slurp_reloca_table (abfd, section, symbols); {
if (! elf_slurp_reloca_table (abfd, section, symbols))
return -1;
}
else else
elf_slurp_reloc_table (abfd, section, symbols); {
if (! elf_slurp_reloc_table (abfd, section, symbols))
return -1;
}
tblptr = section->relocation; tblptr = section->relocation;
if (!tblptr) if (!tblptr)
return 0; return -1;
for (; count++ < section->reloc_count;) for (; count++ < section->reloc_count;)
*relptr++ = tblptr++; *relptr++ = tblptr++;
@ -3066,16 +3072,15 @@ elf_canonicalize_reloc (abfd, section, relptr, symbols)
return section->reloc_count; return section->reloc_count;
} }
unsigned int long
elf_get_symtab (abfd, alocation) elf_get_symtab (abfd, alocation)
bfd *abfd; bfd *abfd;
asymbol **alocation; asymbol **alocation;
{ {
if (!elf_slurp_symbol_table (abfd, alocation)) if (!elf_slurp_symbol_table (abfd, alocation))
return 0; return -1;
else
return bfd_get_symcount (abfd); return bfd_get_symcount (abfd);
} }
asymbol * asymbol *

View File

@ -786,14 +786,14 @@ doit:
/* call aout_32 versions if the input file was generated by gcc */ /* call aout_32 versions if the input file was generated by gcc */
/************************************************************************/ /************************************************************************/
unsigned int aout_32_get_symtab PARAMS ((bfd * abfd, asymbol ** location)); long aout_32_get_symtab PARAMS ((bfd * abfd, asymbol ** location));
unsigned int aout_32_get_symtab_upper_bound PARAMS ((bfd * abfd)); long aout_32_get_symtab_upper_bound PARAMS ((bfd * abfd));
unsigned int aout_32_canonicalize_reloc PARAMS ((bfd * abfd, sec_ptr section, long aout_32_canonicalize_reloc PARAMS ((bfd * abfd, sec_ptr section,
arelent ** relptr, arelent ** relptr,
asymbol ** symbols)); asymbol ** symbols));
unsigned int long
MY (get_symtab) (abfd, location) MY (get_symtab) (abfd, location)
bfd *abfd; bfd *abfd;
asymbol **location; asymbol **location;
@ -805,7 +805,7 @@ MY (get_symtab) (abfd, location)
return aout_32_get_symtab (abfd, location); return aout_32_get_symtab (abfd, location);
if (!MY (slurp_symbol_table) (abfd)) if (!MY (slurp_symbol_table) (abfd))
return 0; return -1;
for (symbase = obj_aout_symbols (abfd); counter++ < bfd_get_symcount (abfd);) for (symbase = obj_aout_symbols (abfd); counter++ < bfd_get_symcount (abfd);)
*(location++) = (asymbol *) (symbase++); *(location++) = (asymbol *) (symbase++);
@ -813,14 +813,14 @@ MY (get_symtab) (abfd, location)
return bfd_get_symcount (abfd); return bfd_get_symcount (abfd);
} }
unsigned int long
MY (get_symtab_upper_bound) (abfd) MY (get_symtab_upper_bound) (abfd)
bfd *abfd; bfd *abfd;
{ {
if (obj_aout_subformat (abfd) == gnu_encap_format) if (obj_aout_subformat (abfd) == gnu_encap_format)
return aout_32_get_symtab_upper_bound (abfd); return aout_32_get_symtab_upper_bound (abfd);
if (!MY (slurp_symbol_table) (abfd)) if (!MY (slurp_symbol_table) (abfd))
return 0; return -1;
return (bfd_get_symcount (abfd) + 1) * (sizeof (aout_symbol_type *)); return (bfd_get_symcount (abfd) + 1) * (sizeof (aout_symbol_type *));
} }
@ -828,7 +828,7 @@ MY (get_symtab_upper_bound) (abfd)
unsigned int long
MY (canonicalize_reloc) (abfd, section, relptr, symbols) MY (canonicalize_reloc) (abfd, section, relptr, symbols)
bfd *abfd; bfd *abfd;
sec_ptr section; sec_ptr section;
@ -841,7 +841,7 @@ MY (canonicalize_reloc) (abfd, section, relptr, symbols)
return aout_32_canonicalize_reloc (abfd, section, relptr, symbols); return aout_32_canonicalize_reloc (abfd, section, relptr, symbols);
if (!(tblptr || MY (slurp_reloc_table) (abfd, section, symbols))) if (!(tblptr || MY (slurp_reloc_table) (abfd, section, symbols)))
return 0; return -1;
if (section->flags & SEC_CONSTRUCTOR) if (section->flags & SEC_CONSTRUCTOR)
{ {
@ -856,7 +856,7 @@ MY (canonicalize_reloc) (abfd, section, relptr, symbols)
{ {
tblptr = section->relocation; tblptr = section->relocation;
if (!tblptr) if (!tblptr)
return 0; return -1;
for (count = 0; count++ < section->reloc_count;) for (count = 0; count++ < section->reloc_count;)
{ {

View File

@ -130,7 +130,7 @@ hppabsd_core_core_file_p (abfd)
val = bfd_read ((void *) &u, 1, sizeof u, abfd); val = bfd_read ((void *) &u, 1, sizeof u, abfd);
if (val != sizeof u) if (val != sizeof u)
{ {
bfd_error = wrong_format; bfd_set_error (bfd_error_wrong_format);
return NULL; return NULL;
} }
@ -145,19 +145,19 @@ hppabsd_core_core_file_p (abfd)
struct stat statbuf; struct stat statbuf;
if (stream == NULL || fstat (fileno (stream), &statbuf) < 0) if (stream == NULL || fstat (fileno (stream), &statbuf) < 0)
{ {
bfd_error = system_call_error; bfd_set_error (bfd_error_system_call);
return NULL; return NULL;
} }
if (NBPG * (UPAGES + u.u_dsize + u.u_ssize) > statbuf.st_size) if (NBPG * (UPAGES + u.u_dsize + u.u_ssize) > statbuf.st_size)
{ {
bfd_error = file_truncated; bfd_set_error (bfd_error_file_truncated);
return NULL; return NULL;
} }
if (clicksz * (UPAGES + u.u_dsize + u.u_ssize) < statbuf.st_size) if (clicksz * (UPAGES + u.u_dsize + u.u_ssize) < statbuf.st_size)
{ {
/* The file is too big. Maybe it's not a core file /* The file is too big. Maybe it's not a core file
or we otherwise have bad values for u_dsize and u_ssize). */ or we otherwise have bad values for u_dsize and u_ssize). */
bfd_error = wrong_format; bfd_set_error (bfd_error_wrong_format);
return NULL; return NULL;
} }
} }
@ -168,7 +168,7 @@ hppabsd_core_core_file_p (abfd)
bfd_zalloc (abfd, sizeof (struct hppabsd_core_struct)); bfd_zalloc (abfd, sizeof (struct hppabsd_core_struct));
if (!coredata) if (!coredata)
{ {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
return NULL; return NULL;
} }
@ -245,13 +245,13 @@ hppabsd_core_core_file_matches_executable_p (core_bfd, exec_bfd)
bfd_generic_get_section_contents bfd_generic_get_section_contents
#define hppabsd_core_new_section_hook (boolean (*) PARAMS \ #define hppabsd_core_new_section_hook (boolean (*) PARAMS \
((bfd *, sec_ptr))) bfd_true ((bfd *, sec_ptr))) bfd_true
#define hppabsd_core_get_symtab_upper_bound bfd_0u #define hppabsd_core_get_symtab_upper_bound bfd_0l
#define hppabsd_core_get_symtab (unsigned int (*) PARAMS \ #define hppabsd_core_get_symtab (long (*) PARAMS \
((bfd *, struct symbol_cache_entry **))) bfd_0u ((bfd *, struct symbol_cache_entry **))) bfd_0l
#define hppabsd_core_get_reloc_upper_bound (unsigned int (*) PARAMS \ #define hppabsd_core_get_reloc_upper_bound (long (*) PARAMS \
((bfd *, sec_ptr))) bfd_0u ((bfd *, sec_ptr))) bfd_0l
#define hppabsd_core_canonicalize_reloc (unsigned int (*) PARAMS \ #define hppabsd_core_canonicalize_reloc (long (*) PARAMS \
((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0u ((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0l
#define hppabsd_core_print_symbol (void (*) PARAMS \ #define hppabsd_core_print_symbol (void (*) PARAMS \
((bfd *, PTR, struct symbol_cache_entry *, \ ((bfd *, PTR, struct symbol_cache_entry *, \
bfd_print_symbol_type))) bfd_false bfd_print_symbol_type))) bfd_false
@ -285,6 +285,12 @@ hppabsd_core_core_file_matches_executable_p (core_bfd, exec_bfd)
((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false) ((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false)
#define hppabsd_core_bfd_final_link \ #define hppabsd_core_bfd_final_link \
((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false) ((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false)
#define hppabsd_core_bfd_copy_private_section_data \
((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_false)
#define hppabsd_core_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define hppabsd_core_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, asymbol *))) bfd_false)
/* If somebody calls any byte-swapping routines, shoot them. */ /* If somebody calls any byte-swapping routines, shoot them. */
static void static void

View File

@ -105,7 +105,8 @@ hpux_core_make_empty_symbol (abfd)
bfd *abfd; bfd *abfd;
{ {
asymbol *new = (asymbol *) bfd_zalloc (abfd, sizeof (asymbol)); asymbol *new = (asymbol *) bfd_zalloc (abfd, sizeof (asymbol));
new->the_bfd = abfd; if (new)
new->the_bfd = abfd;
return new; return new;
} }
@ -222,17 +223,17 @@ hpux_core_core_file_matches_executable_p (core_bfd, exec_bfd)
#define hpux_core_close_and_cleanup bfd_generic_close_and_cleanup #define hpux_core_close_and_cleanup bfd_generic_close_and_cleanup
#define hpux_core_set_section_contents (boolean (*) PARAMS \ #define hpux_core_set_section_contents (boolean (*) PARAMS \
((bfd *abfd, asection *section, PTR data, file_ptr offset, \ ((bfd *abfd, asection *section, PTR data, file_ptr offset, \
bfd_size_type count))) bfd_false bfd_size_type count))) bfd_generic_set_section_contents
#define hpux_core_get_section_contents bfd_generic_get_section_contents #define hpux_core_get_section_contents bfd_generic_get_section_contents
#define hpux_core_new_section_hook (boolean (*) PARAMS \ #define hpux_core_new_section_hook (boolean (*) PARAMS \
((bfd *, sec_ptr))) bfd_true ((bfd *, sec_ptr))) bfd_true
#define hpux_core_get_symtab_upper_bound bfd_0u #define hpux_core_get_symtab_upper_bound bfd_0l
#define hpux_core_get_symtab (unsigned int (*) PARAMS \ #define hpux_core_get_symtab (long (*) PARAMS \
((bfd *, struct symbol_cache_entry **))) bfd_0u ((bfd *, struct symbol_cache_entry **))) bfd_0l
#define hpux_core_get_reloc_upper_bound (unsigned int (*) PARAMS \ #define hpux_core_get_reloc_upper_bound (long (*) PARAMS \
((bfd *, sec_ptr))) bfd_0u ((bfd *, sec_ptr))) bfd_0l
#define hpux_core_canonicalize_reloc (unsigned int (*) PARAMS \ #define hpux_core_canonicalize_reloc (long (*) PARAMS \
((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0u ((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0l
#define hpux_core_print_symbol (void (*) PARAMS \ #define hpux_core_print_symbol (void (*) PARAMS \
((bfd *, PTR, struct symbol_cache_entry *, \ ((bfd *, PTR, struct symbol_cache_entry *, \
bfd_print_symbol_type))) bfd_false bfd_print_symbol_type))) bfd_false
@ -266,6 +267,12 @@ hpux_core_core_file_matches_executable_p (core_bfd, exec_bfd)
((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false) ((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false)
#define hpux_core_bfd_final_link \ #define hpux_core_bfd_final_link \
((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false) ((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false)
#define hpux_core_bfd_copy_private_section_data \
((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_false)
#define hpux_core_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define hpux_core_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, asymbol *))) bfd_false)
/* If somebody calls any byte-swapping routines, shoot them. */ /* If somebody calls any byte-swapping routines, shoot them. */
void void
@ -273,9 +280,10 @@ swap_abort()
{ {
abort(); /* This way doesn't require any declaration for ANSI to fuck up */ abort(); /* This way doesn't require any declaration for ANSI to fuck up */
} }
#define NO_GET ((bfd_vma (*) PARAMS (( bfd_byte *))) swap_abort ) #define NO_GET ((bfd_vma (*) PARAMS (( const bfd_byte *))) swap_abort )
#define NO_PUT ((void (*) PARAMS ((bfd_vma, bfd_byte *))) swap_abort ) #define NO_PUT ((void (*) PARAMS ((bfd_vma, bfd_byte *))) swap_abort )
#define NO_SIGNED_GET ((bfd_signed_vma (*) PARAMS ((bfd_byte *))) swap_abort ) #define NO_SIGNED_GET \
((bfd_signed_vma (*) PARAMS ((const bfd_byte *))) swap_abort )
bfd_target hpux_core_vec = bfd_target hpux_core_vec =
{ {

View File

@ -515,8 +515,8 @@ NAME (lynx, squirt_out_relocs) (abfd, section)
} }
/* This is stupid. This function should be a boolean predicate */ /* This is stupid. This function should be a boolean predicate */
unsigned int long
NAME (lynx, canonicalize_reloc) (abfd, section, relptr, symbols) NAME(lynx,canonicalize_reloc) (abfd, section, relptr, symbols)
bfd *abfd; bfd *abfd;
sec_ptr section; sec_ptr section;
arelent **relptr; arelent **relptr;
@ -526,7 +526,7 @@ NAME (lynx, canonicalize_reloc) (abfd, section, relptr, symbols)
unsigned int count; unsigned int count;
if (!(tblptr || NAME (lynx, slurp_reloc_table) (abfd, section, symbols))) if (!(tblptr || NAME (lynx, slurp_reloc_table) (abfd, section, symbols)))
return 0; return -1;
if (section->flags & SEC_CONSTRUCTOR) if (section->flags & SEC_CONSTRUCTOR)
{ {
@ -541,7 +541,7 @@ NAME (lynx, canonicalize_reloc) (abfd, section, relptr, symbols)
{ {
tblptr = section->relocation; tblptr = section->relocation;
if (!tblptr) if (!tblptr)
return 0; return -1;
for (count = 0; count++ < section->reloc_count;) for (count = 0; count++ < section->reloc_count;)
{ {

View File

@ -586,7 +586,7 @@ get_symbol (abfd,
return last_symbol; return last_symbol;
} }
static void static boolean
ieee_slurp_external_symbols (abfd) ieee_slurp_external_symbols (abfd)
bfd *abfd; bfd *abfd;
{ {
@ -613,7 +613,8 @@ ieee_slurp_external_symbols (abfd)
symbol = get_symbol (abfd, ieee, symbol, &symbol_count, symbol = get_symbol (abfd, ieee, symbol, &symbol_count,
&prev_symbols_ptr, &prev_symbols_ptr,
&ieee->external_symbol_max_index, 'D'); &ieee->external_symbol_max_index, 'D');
if (symbol == NULL)
return false;
symbol->symbol.the_bfd = abfd; symbol->symbol.the_bfd = abfd;
symbol->symbol.name = read_id (&(ieee->h)); symbol->symbol.name = read_id (&(ieee->h));
@ -626,7 +627,8 @@ ieee_slurp_external_symbols (abfd)
symbol = get_symbol (abfd, ieee, symbol, &symbol_count, symbol = get_symbol (abfd, ieee, symbol, &symbol_count,
&prev_symbols_ptr, &prev_symbols_ptr,
&ieee->external_symbol_max_index, 'D'); &ieee->external_symbol_max_index, 'D');
if (symbol == NULL)
return false;
BFD_ASSERT (symbol->index >= ieee->external_symbol_min_index); BFD_ASSERT (symbol->index >= ieee->external_symbol_min_index);
@ -710,7 +712,8 @@ ieee_slurp_external_symbols (abfd)
symbol = get_symbol (abfd, ieee, symbol, &symbol_count, symbol = get_symbol (abfd, ieee, symbol, &symbol_count,
&prev_reference_ptr, &prev_reference_ptr,
&ieee->external_reference_max_index, 'X'); &ieee->external_reference_max_index, 'X');
if (symbol == NULL)
return false;
symbol->symbol.the_bfd = abfd; symbol->symbol.the_bfd = abfd;
symbol->symbol.name = read_id (&(ieee->h)); symbol->symbol.name = read_id (&(ieee->h));
@ -760,24 +763,29 @@ ieee_slurp_external_symbols (abfd)
*prev_symbols_ptr = (ieee_symbol_type *) NULL; *prev_symbols_ptr = (ieee_symbol_type *) NULL;
*prev_reference_ptr = (ieee_symbol_type *) NULL; *prev_reference_ptr = (ieee_symbol_type *) NULL;
return true;
} }
static void static boolean
ieee_slurp_symbol_table (abfd) ieee_slurp_symbol_table (abfd)
bfd *abfd; bfd *abfd;
{ {
if (IEEE_DATA (abfd)->read_symbols == false) if (IEEE_DATA (abfd)->read_symbols == false)
{ {
ieee_slurp_external_symbols (abfd); if (! ieee_slurp_external_symbols (abfd))
return false;
IEEE_DATA (abfd)->read_symbols = true; IEEE_DATA (abfd)->read_symbols = true;
} }
return true;
} }
unsigned int long
ieee_get_symtab_upper_bound (abfd) ieee_get_symtab_upper_bound (abfd)
bfd *abfd; bfd *abfd;
{ {
ieee_slurp_symbol_table (abfd); if (! ieee_slurp_symbol_table (abfd))
return -1;
return (abfd->symcount != 0) ? return (abfd->symcount != 0) ?
(abfd->symcount + 1) * (sizeof (ieee_symbol_type *)) : 0; (abfd->symcount + 1) * (sizeof (ieee_symbol_type *)) : 0;
@ -790,7 +798,7 @@ symbol index order
extern bfd_target ieee_vec; extern bfd_target ieee_vec;
unsigned int long
ieee_get_symtab (abfd, location) ieee_get_symtab (abfd, location)
bfd *abfd; bfd *abfd;
asymbol **location; asymbol **location;
@ -805,7 +813,8 @@ ieee_get_symtab (abfd, location)
{ {
ieee_data_type *ieee = IEEE_DATA (abfd); ieee_data_type *ieee = IEEE_DATA (abfd);
dummy_bfd.xvec = &ieee_vec; dummy_bfd.xvec = &ieee_vec;
ieee_slurp_symbol_table (abfd); if (! ieee_slurp_symbol_table (abfd))
return -1;
if (ieee->symbol_table_full == false) if (ieee->symbol_table_full == false)
{ {
@ -1684,12 +1693,13 @@ ieee_new_section_hook (abfd, newsect)
return true; return true;
} }
unsigned int long
ieee_get_reloc_upper_bound (abfd, asect) ieee_get_reloc_upper_bound (abfd, asect)
bfd *abfd; bfd *abfd;
sec_ptr asect; sec_ptr asect;
{ {
ieee_slurp_section_data (abfd); if (! ieee_slurp_section_data (abfd))
return -1;
return (asect->reloc_count + 1) * sizeof (arelent *); return (asect->reloc_count + 1) * sizeof (arelent *);
} }
@ -1707,7 +1717,7 @@ ieee_get_section_contents (abfd, section, location, offset, count)
return true; return true;
} }
unsigned int long
ieee_canonicalize_reloc (abfd, section, relptr, symbols) ieee_canonicalize_reloc (abfd, section, relptr, symbols)
bfd *abfd; bfd *abfd;
sec_ptr section; sec_ptr section;
@ -3310,6 +3320,11 @@ ieee_bfd_debug_info_accumulate (abfd, section)
#define ieee_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define ieee_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
#define ieee_bfd_link_add_symbols _bfd_generic_link_add_symbols #define ieee_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define ieee_bfd_final_link _bfd_generic_final_link #define ieee_bfd_final_link _bfd_generic_final_link
#define ieee_bfd_copy_private_section_data \
((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_true)
#define ieee_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
#define ieee_bfd_is_local_label bfd_generic_is_local_label
/*SUPPRESS 460 */ /*SUPPRESS 460 */
bfd_target ieee_vec = bfd_target ieee_vec =

View File

@ -178,7 +178,8 @@ irix_core_make_empty_symbol (abfd)
bfd *abfd; bfd *abfd;
{ {
asymbol *new = (asymbol *) bfd_zalloc (abfd, sizeof (asymbol)); asymbol *new = (asymbol *) bfd_zalloc (abfd, sizeof (asymbol));
new->the_bfd = abfd; if (new)
new->the_bfd = abfd;
return new; return new;
} }
@ -194,17 +195,17 @@ irix_core_make_empty_symbol (abfd)
#define irix_core_close_and_cleanup bfd_generic_close_and_cleanup #define irix_core_close_and_cleanup bfd_generic_close_and_cleanup
#define irix_core_set_section_contents (boolean (*) PARAMS \ #define irix_core_set_section_contents (boolean (*) PARAMS \
((bfd *abfd, asection *section, PTR data, file_ptr offset, \ ((bfd *abfd, asection *section, PTR data, file_ptr offset, \
bfd_size_type count))) bfd_false bfd_size_type count))) bfd_generic_set_section_contents
#define irix_core_get_section_contents bfd_generic_get_section_contents #define irix_core_get_section_contents bfd_generic_get_section_contents
#define irix_core_new_section_hook (boolean (*) PARAMS \ #define irix_core_new_section_hook (boolean (*) PARAMS \
((bfd *, sec_ptr))) bfd_true ((bfd *, sec_ptr))) bfd_true
#define irix_core_get_symtab_upper_bound bfd_0u #define irix_core_get_symtab_upper_bound bfd_0l
#define irix_core_get_symtab (unsigned int (*) PARAMS \ #define irix_core_get_symtab (long (*) PARAMS \
((bfd *, struct symbol_cache_entry **))) bfd_0u ((bfd *, struct symbol_cache_entry **))) bfd_0l
#define irix_core_get_reloc_upper_bound (unsigned int (*) PARAMS \ #define irix_core_get_reloc_upper_bound (long (*) PARAMS \
((bfd *, sec_ptr))) bfd_0u ((bfd *, sec_ptr))) bfd_0l
#define irix_core_canonicalize_reloc (unsigned int (*) PARAMS \ #define irix_core_canonicalize_reloc (long (*) PARAMS \
((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0u ((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0l
#define irix_core_print_symbol (void (*) PARAMS \ #define irix_core_print_symbol (void (*) PARAMS \
((bfd *, PTR, struct symbol_cache_entry *, \ ((bfd *, PTR, struct symbol_cache_entry *, \
bfd_print_symbol_type))) bfd_false bfd_print_symbol_type))) bfd_false
@ -239,15 +240,23 @@ irix_core_make_empty_symbol (abfd)
#define irix_core_bfd_final_link \ #define irix_core_bfd_final_link \
((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false) ((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false)
#define irix_core_bfd_copy_private_section_data \
((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_false)
#define irix_core_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define irix_core_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, asymbol *))) bfd_false)
/* If somebody calls any byte-swapping routines, shoot them. */ /* If somebody calls any byte-swapping routines, shoot them. */
void void
swap_abort() swap_abort()
{ {
abort(); /* This way doesn't require any declaration for ANSI to fuck up */ abort(); /* This way doesn't require any declaration for ANSI to fuck up */
} }
#define NO_GET ((bfd_vma (*) PARAMS (( bfd_byte *))) swap_abort ) #define NO_GET ((bfd_vma (*) PARAMS (( const bfd_byte *))) swap_abort )
#define NO_PUT ((void (*) PARAMS ((bfd_vma, bfd_byte *))) swap_abort ) #define NO_PUT ((void (*) PARAMS ((bfd_vma, bfd_byte *))) swap_abort )
#define NO_SIGNED_GET ((bfd_signed_vma (*) PARAMS ((bfd_byte *))) swap_abort ) #define NO_SIGNED_GET \
((bfd_signed_vma (*) PARAMS ((const bfd_byte *))) swap_abort )
bfd_target irix_core_vec = bfd_target irix_core_vec =
{ {

View File

@ -44,9 +44,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define BYTES_IN_WORD 4 #define BYTES_IN_WORD 4
#endif /* ARCH_SIZE==32 */ #endif /* ARCH_SIZE==32 */
/* Declare at file level, since it isused in parameter lists, which /* Declare at file level, since used in parameter lists, which have
have weird scope. */ weird scope. */
struct external_exec; struct external_exec;
struct external_nlist;
/* Back-end information for various a.out targets. */ /* Back-end information for various a.out targets. */
struct aout_backend_data struct aout_backend_data
@ -76,6 +77,25 @@ struct aout_backend_data
to the size of the text section in the file for alignment purposes but to the size of the text section in the file for alignment purposes but
does *not* get counted in the length of the text section. */ does *not* get counted in the length of the text section. */
unsigned char exec_header_not_counted; unsigned char exec_header_not_counted;
/* A callback function to read in the dynamic symbols of an object
which is dynamically linked. This returns the number of symbols
read (or -1 on error) and sets *SYMS to a buffer holding an array
of external_nlist structures and *STRS and *STRSIZE to the
associated string table. (This interface works for SunOS, but
can be changed if some other interface is better for some other
shared library implementation). */
bfd_size_type (*read_dynamic_symbols) PARAMS ((bfd *,
struct external_nlist **syms,
char **strs,
bfd_size_type *strsize));
/* A callback function to read in the dynamic relocs of an object
which is dynamically linked. This returns the number of relocs
read (or -1 on error) and sets *RELOCS to a buffer holding an
array of external reloc structures (the type depends upon the
type of object file). */
bfd_size_type (*read_dynamic_relocs) PARAMS ((bfd *, PTR *relocs));
}; };
#define aout_backend_info(abfd) \ #define aout_backend_info(abfd) \
((CONST struct aout_backend_data *)((abfd)->xvec->backend_data)) ((CONST struct aout_backend_data *)((abfd)->xvec->backend_data))
@ -133,7 +153,7 @@ enum machine_type {
M_HPUX = (0x20c % 256)/* HP 200/300 HPUX binary */ M_HPUX = (0x20c % 256)/* HP 200/300 HPUX binary */
}; };
#define N_DYNAMIC(exec) ((exec).a_info & 0x8000000) #define N_DYNAMIC(exec) ((exec).a_info & 0x80000000)
#ifndef N_MAGIC #ifndef N_MAGIC
# define N_MAGIC(exec) ((exec).a_info & 0xffff) # define N_MAGIC(exec) ((exec).a_info & 0xffff)
@ -154,6 +174,12 @@ enum machine_type {
| (((flags) & 0xff) << 24)) | (((flags) & 0xff) << 24))
#endif #endif
#ifndef N_SET_DYNAMIC
# define N_SET_DYNAMIC(exec, dynamic) \
((exec).a_info = (dynamic) ? ((exec).a_info | 0x80000000) : \
((exec).a_info & 0x7fffffff))
#endif
#ifndef N_SET_MAGIC #ifndef N_SET_MAGIC
# define N_SET_MAGIC(exec, magic) \ # define N_SET_MAGIC(exec, magic) \
((exec).a_info = (((exec).a_info & 0xffff0000) | ((magic) & 0xffff))) ((exec).a_info = (((exec).a_info & 0xffff0000) | ((magic) & 0xffff)))
@ -227,6 +253,9 @@ struct aoutdata {
bfd_size_type external_sym_count; bfd_size_type external_sym_count;
char *external_strings; char *external_strings;
struct aout_link_hash_entry **sym_hashes; struct aout_link_hash_entry **sym_hashes;
/* A pointer for shared library information. */
PTR dynamic_info;
}; };
struct aout_data_struct { struct aout_data_struct {
@ -249,6 +278,7 @@ struct aout_data_struct {
#define obj_aout_external_sym_count(bfd) (adata(bfd).external_sym_count) #define obj_aout_external_sym_count(bfd) (adata(bfd).external_sym_count)
#define obj_aout_external_strings(bfd) (adata(bfd).external_strings) #define obj_aout_external_strings(bfd) (adata(bfd).external_strings)
#define obj_aout_sym_hashes(bfd) (adata(bfd).sym_hashes) #define obj_aout_sym_hashes(bfd) (adata(bfd).sym_hashes)
#define obj_aout_dynamic_info(bfd) (adata(bfd).dynamic_info)
/* We take the address of the first element of an asymbol to ensure that the /* We take the address of the first element of an asymbol to ensure that the
macro is only ever applied to an asymbol */ macro is only ever applied to an asymbol */
@ -294,21 +324,21 @@ NAME(aout,write_syms) PARAMS ((bfd *abfd));
void void
NAME(aout,reclaim_symbol_table) PARAMS ((bfd *abfd)); NAME(aout,reclaim_symbol_table) PARAMS ((bfd *abfd));
unsigned int long
NAME(aout,get_symtab_upper_bound) PARAMS ((bfd *abfd)); NAME(aout,get_symtab_upper_bound) PARAMS ((bfd *abfd));
unsigned int long
NAME(aout,get_symtab) PARAMS ((bfd *abfd, asymbol **location)); NAME(aout,get_symtab) PARAMS ((bfd *abfd, asymbol **location));
boolean boolean
NAME(aout,slurp_reloc_table) PARAMS ((bfd *abfd, sec_ptr asect, NAME(aout,slurp_reloc_table) PARAMS ((bfd *abfd, sec_ptr asect,
asymbol **symbols)); asymbol **symbols));
unsigned int long
NAME(aout,canonicalize_reloc) PARAMS ((bfd *abfd, sec_ptr section, NAME(aout,canonicalize_reloc) PARAMS ((bfd *abfd, sec_ptr section,
arelent **relptr, asymbol **symbols)); arelent **relptr, asymbol **symbols));
unsigned int long
NAME(aout,get_reloc_upper_bound) PARAMS ((bfd *abfd, sec_ptr asect)); NAME(aout,get_reloc_upper_bound) PARAMS ((bfd *abfd, sec_ptr asect));
void void
@ -375,6 +405,18 @@ aout_stab_name PARAMS ((int code));
#define NO_WRITE_HEADER_KLUDGE 0 #define NO_WRITE_HEADER_KLUDGE 0
#endif #endif
#ifndef aout_32_bfd_copy_private_section_data
#define aout_32_bfd_copy_private_section_data \
((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_true)
#endif
#ifndef aout_32_bfd_copy_private_bfd_data
#define aout_32_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
#endif
#ifndef aout_32_bfd_is_local_label
#define aout_32_bfd_is_local_label bfd_generic_is_local_label
#endif
#ifndef WRITE_HEADERS #ifndef WRITE_HEADERS
#define WRITE_HEADERS(abfd, execp) \ #define WRITE_HEADERS(abfd, execp) \
{ \ { \

View File

@ -117,6 +117,7 @@ boolean bfd_true PARAMS ((bfd *ignore));
PTR bfd_nullvoidptr PARAMS ((bfd *ignore)); PTR bfd_nullvoidptr PARAMS ((bfd *ignore));
int bfd_0 PARAMS ((bfd *ignore)); int bfd_0 PARAMS ((bfd *ignore));
unsigned int bfd_0u PARAMS ((bfd *ignore)); unsigned int bfd_0u PARAMS ((bfd *ignore));
long bfd_0l PARAMS ((bfd *ignore));
void bfd_void PARAMS ((bfd *ignore)); void bfd_void PARAMS ((bfd *ignore));
bfd * _bfd_new_bfd_contained_in PARAMS ((bfd *)); bfd * _bfd_new_bfd_contained_in PARAMS ((bfd *));
@ -178,6 +179,12 @@ extern struct bfd_link_hash_table *_bfd_generic_link_hash_table_create
extern boolean _bfd_generic_link_add_symbols extern boolean _bfd_generic_link_add_symbols
PARAMS ((bfd *, struct bfd_link_info *)); PARAMS ((bfd *, struct bfd_link_info *));
/* Generic add symbol routine. This version is used by targets for
which the linker must collect constructors and destructors by name,
as the collect2 program does. */
extern boolean _bfd_generic_link_add_symbols_collect
PARAMS ((bfd *, struct bfd_link_info *));
/* Generic archive add symbol routine. */ /* Generic archive add symbol routine. */
extern boolean _bfd_generic_link_add_archive_symbols extern boolean _bfd_generic_link_add_archive_symbols
PARAMS ((bfd *, struct bfd_link_info *, PARAMS ((bfd *, struct bfd_link_info *,

View File

@ -81,6 +81,14 @@ bfd_0u (ignore)
return 0; return 0;
} }
/*ARGUSED*/
long
bfd_0l (ignore)
bfd *ignore;
{
return 0;
}
/*ARGSUSED*/ /*ARGSUSED*/
void void
bfd_void (ignore) bfd_void (ignore)

View File

@ -117,6 +117,7 @@ boolean bfd_true PARAMS ((bfd *ignore));
PTR bfd_nullvoidptr PARAMS ((bfd *ignore)); PTR bfd_nullvoidptr PARAMS ((bfd *ignore));
int bfd_0 PARAMS ((bfd *ignore)); int bfd_0 PARAMS ((bfd *ignore));
unsigned int bfd_0u PARAMS ((bfd *ignore)); unsigned int bfd_0u PARAMS ((bfd *ignore));
long bfd_0l PARAMS ((bfd *ignore));
void bfd_void PARAMS ((bfd *ignore)); void bfd_void PARAMS ((bfd *ignore));
bfd * _bfd_new_bfd_contained_in PARAMS ((bfd *)); bfd * _bfd_new_bfd_contained_in PARAMS ((bfd *));
@ -307,7 +308,7 @@ bfd_generic_relax_section
PARAMS ((bfd *abfd, PARAMS ((bfd *abfd,
asection *section, asection *section,
struct bfd_link_info *, struct bfd_link_info *,
asymbol **symbols)); boolean *));
bfd_byte * bfd_byte *

View File

@ -1,5 +1,5 @@
/* BFD COFF object file private structure. /* BFD COFF object file private structure.
Copyright (C) 1990-1991 Free Software Foundation, Inc. Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
Written by Cygnus Support. Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library. This file is part of BFD, the Binary File Descriptor library.
@ -28,6 +28,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define obj_relocbase(bfd) (coff_data(bfd)->relocbase) #define obj_relocbase(bfd) (coff_data(bfd)->relocbase)
#define obj_raw_syments(bfd) (coff_data(bfd)->raw_syments) #define obj_raw_syments(bfd) (coff_data(bfd)->raw_syments)
#define obj_raw_syment_count(bfd) (coff_data(bfd)->raw_syment_count)
#define obj_convert(bfd) (coff_data(bfd)->conversion_table) #define obj_convert(bfd) (coff_data(bfd)->conversion_table)
#define obj_conv_table_size(bfd) (coff_data(bfd)->conv_table_size) #define obj_conv_table_size(bfd) (coff_data(bfd)->conv_table_size)
#if CFILE_STUFF #if CFILE_STUFF
@ -76,22 +77,25 @@ typedef struct coff_tdata
/* Functions in coffgen.c. */ /* Functions in coffgen.c. */
extern bfd_target *coff_object_p PARAMS ((bfd *)); extern bfd_target *coff_object_p PARAMS ((bfd *));
extern struct sec *coff_section_from_bfd_index PARAMS ((bfd *, int)); extern struct sec *coff_section_from_bfd_index PARAMS ((bfd *, int));
extern unsigned int coff_get_symtab_upper_bound PARAMS ((bfd *)); extern long coff_get_symtab_upper_bound PARAMS ((bfd *));
extern unsigned int coff_get_symtab PARAMS ((bfd *, asymbol **)); extern long coff_get_symtab PARAMS ((bfd *, asymbol **));
extern void coff_count_linenumbers PARAMS ((bfd *)); extern int coff_count_linenumbers PARAMS ((bfd *));
extern struct coff_symbol_struct *coff_symbol_from PARAMS ((bfd *, asymbol *)); extern struct coff_symbol_struct *coff_symbol_from PARAMS ((bfd *, asymbol *));
extern void coff_renumber_symbols PARAMS ((bfd *)); extern boolean coff_renumber_symbols PARAMS ((bfd *));
extern void coff_mangle_symbols PARAMS ((bfd *)); extern void coff_mangle_symbols PARAMS ((bfd *));
extern void coff_write_symbols PARAMS ((bfd *)); extern void coff_write_symbols PARAMS ((bfd *));
extern void coff_write_linenumbers PARAMS ((bfd *)); extern boolean coff_write_linenumbers PARAMS ((bfd *));
extern alent *coff_get_lineno PARAMS ((bfd *, asymbol *)); extern alent *coff_get_lineno PARAMS ((bfd *, asymbol *));
extern asymbol *coff_section_symbol PARAMS ((bfd *, char *)); extern asymbol *coff_section_symbol PARAMS ((bfd *, char *));
extern struct coff_ptr_struct *coff_get_normalized_symtab PARAMS ((bfd *)); extern struct coff_ptr_struct *coff_get_normalized_symtab PARAMS ((bfd *));
extern unsigned int coff_get_reloc_upper_bound PARAMS ((bfd *, sec_ptr)); extern long coff_get_reloc_upper_bound PARAMS ((bfd *, sec_ptr));
extern asymbol *coff_make_empty_symbol PARAMS ((bfd *)); extern asymbol *coff_make_empty_symbol PARAMS ((bfd *));
extern void coff_print_symbol PARAMS ((bfd *, PTR filep, asymbol *, extern void coff_print_symbol PARAMS ((bfd *, PTR filep, asymbol *,
bfd_print_symbol_type how)); bfd_print_symbol_type how));
extern asymbol *coff_make_debug_symbol PARAMS ((bfd *, PTR, unsigned long)); extern void coff_get_symbol_info PARAMS ((bfd *, asymbol *,
symbol_info *ret));
extern asymbol *coff_bfd_make_debug_symbol PARAMS ((bfd *, PTR,
unsigned long));
extern boolean coff_find_nearest_line PARAMS ((bfd *, extern boolean coff_find_nearest_line PARAMS ((bfd *,
asection *, asection *,
asymbol **, asymbol **,
@ -100,13 +104,17 @@ extern boolean coff_find_nearest_line PARAMS ((bfd *,
CONST char **functionname_ptr, CONST char **functionname_ptr,
unsigned int *line_ptr)); unsigned int *line_ptr));
extern int coff_sizeof_headers PARAMS ((bfd *, boolean reloc)); extern int coff_sizeof_headers PARAMS ((bfd *, boolean reloc));
extern boolean bfd_coff_reloc16_relax_section PARAMS ((bfd *, extern boolean bfd_coff_reloc16_relax_section
asection *, PARAMS ((bfd *, asection *, struct bfd_link_info *, boolean *));
asymbol **));
extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents
PARAMS ((bfd *, struct bfd_seclet *, bfd_byte *, boolean relocateable)); PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_order *,
bfd_byte *, boolean relocateable, asymbol **));
extern bfd_vma bfd_coff_reloc16_get_value PARAMS ((arelent *, extern bfd_vma bfd_coff_reloc16_get_value PARAMS ((arelent *,
struct bfd_seclet *)); struct bfd_link_info *,
asection *));
extern void bfd_perform_slip PARAMS ((bfd *abfd, unsigned int slip,
asection *input_section,
bfd_vma val));
/* And more taken from the source .. */ /* And more taken from the source .. */

View File

@ -1,5 +1,5 @@
/* BFD COFF object file private structure. /* BFD COFF object file private structure.
Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
Written by Cygnus Support. Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library. This file is part of BFD, the Binary File Descriptor library.
@ -77,18 +77,18 @@ typedef struct coff_tdata
/* Functions in coffgen.c. */ /* Functions in coffgen.c. */
extern bfd_target *coff_object_p PARAMS ((bfd *)); extern bfd_target *coff_object_p PARAMS ((bfd *));
extern struct sec *coff_section_from_bfd_index PARAMS ((bfd *, int)); extern struct sec *coff_section_from_bfd_index PARAMS ((bfd *, int));
extern unsigned int coff_get_symtab_upper_bound PARAMS ((bfd *)); extern long coff_get_symtab_upper_bound PARAMS ((bfd *));
extern unsigned int coff_get_symtab PARAMS ((bfd *, asymbol **)); extern long coff_get_symtab PARAMS ((bfd *, asymbol **));
extern int coff_count_linenumbers PARAMS ((bfd *)); extern int coff_count_linenumbers PARAMS ((bfd *));
extern struct coff_symbol_struct *coff_symbol_from PARAMS ((bfd *, asymbol *)); extern struct coff_symbol_struct *coff_symbol_from PARAMS ((bfd *, asymbol *));
extern void coff_renumber_symbols PARAMS ((bfd *)); extern boolean coff_renumber_symbols PARAMS ((bfd *));
extern void coff_mangle_symbols PARAMS ((bfd *)); extern void coff_mangle_symbols PARAMS ((bfd *));
extern void coff_write_symbols PARAMS ((bfd *)); extern void coff_write_symbols PARAMS ((bfd *));
extern void coff_write_linenumbers PARAMS ((bfd *)); extern boolean coff_write_linenumbers PARAMS ((bfd *));
extern alent *coff_get_lineno PARAMS ((bfd *, asymbol *)); extern alent *coff_get_lineno PARAMS ((bfd *, asymbol *));
extern asymbol *coff_section_symbol PARAMS ((bfd *, char *)); extern asymbol *coff_section_symbol PARAMS ((bfd *, char *));
extern struct coff_ptr_struct *coff_get_normalized_symtab PARAMS ((bfd *)); extern struct coff_ptr_struct *coff_get_normalized_symtab PARAMS ((bfd *));
extern unsigned int coff_get_reloc_upper_bound PARAMS ((bfd *, sec_ptr)); extern long coff_get_reloc_upper_bound PARAMS ((bfd *, sec_ptr));
extern asymbol *coff_make_empty_symbol PARAMS ((bfd *)); extern asymbol *coff_make_empty_symbol PARAMS ((bfd *));
extern void coff_print_symbol PARAMS ((bfd *, PTR filep, asymbol *, extern void coff_print_symbol PARAMS ((bfd *, PTR filep, asymbol *,
bfd_print_symbol_type how)); bfd_print_symbol_type how));
@ -104,23 +104,21 @@ extern boolean coff_find_nearest_line PARAMS ((bfd *,
CONST char **functionname_ptr, CONST char **functionname_ptr,
unsigned int *line_ptr)); unsigned int *line_ptr));
extern int coff_sizeof_headers PARAMS ((bfd *, boolean reloc)); extern int coff_sizeof_headers PARAMS ((bfd *, boolean reloc));
extern boolean bfd_coff_reloc16_relax_section PARAMS ((bfd *, extern boolean bfd_coff_reloc16_relax_section
asection *, PARAMS ((bfd *, asection *, struct bfd_link_info *, boolean *));
struct bfd_link_info *,
asymbol **));
extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents
PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_order *, PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_order *,
bfd_byte *, boolean relocateable, asymbol **)); bfd_byte *, boolean relocateable, asymbol **));
extern bfd_vma bfd_coff_reloc16_get_value PARAMS ((arelent *, extern bfd_vma bfd_coff_reloc16_get_value PARAMS ((arelent *,
struct bfd_link_info *, struct bfd_link_info *,
asection *)); asection *));
extern void bfd_perform_slip PARAMS ((asymbol **s, unsigned int slip, extern void bfd_perform_slip PARAMS ((bfd *abfd, unsigned int slip,
asection *input_section, asection *input_section,
bfd_vma value)); bfd_vma val));
/* And more taken from the source .. */ /* And more taken from the source .. */
typedef struct coff_ptr_struct typedef struct coff_ptr_struct
{ {
/* Remembers the offset from the first symbol in the file for /* Remembers the offset from the first symbol in the file for
@ -169,7 +167,7 @@ struct lineno_cache_entry *lineno;
/* Have the line numbers been relocated yet ? */ /* Have the line numbers been relocated yet ? */
boolean done_lineno; boolean done_lineno;
} coff_symbol_type; } coff_symbol_type;
typedef struct typedef struct
{ {
void (*_bfd_coff_swap_aux_in) PARAMS (( void (*_bfd_coff_swap_aux_in) PARAMS ((
bfd *abfd, bfd *abfd,
@ -282,8 +280,8 @@ typedef struct
unsigned int *src_ptr, unsigned int *src_ptr,
unsigned int *dst_ptr)); unsigned int *dst_ptr));
int (*_bfd_coff_reloc16_estimate) PARAMS (( int (*_bfd_coff_reloc16_estimate) PARAMS ((
bfd *abfd,
asection *input_section, asection *input_section,
asymbol **symbols,
arelent *r, arelent *r,
unsigned int shrink, unsigned int shrink,
struct bfd_link_info *link_info)); struct bfd_link_info *link_info));
@ -365,7 +363,7 @@ typedef struct
((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\ ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\
(abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr)) (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))
#define bfd_coff_reloc16_estimate(abfd, section, symbols, reloc, shrink, link_info)\ #define bfd_coff_reloc16_estimate(abfd, section, reloc, shrink, link_info)\
((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\ ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\
(section, symbols, reloc, shrink, link_info)) (abfd, section, reloc, shrink, link_info))

View File

@ -217,19 +217,18 @@ extern boolean ecoff_slurp_symbolic_info PARAMS ((bfd *));
/* Generic ECOFF BFD backend vectors. */ /* Generic ECOFF BFD backend vectors. */
extern asymbol *ecoff_make_empty_symbol PARAMS ((bfd *abfd)); extern asymbol *ecoff_make_empty_symbol PARAMS ((bfd *abfd));
extern unsigned int ecoff_get_symtab_upper_bound PARAMS ((bfd *abfd)); extern long ecoff_get_symtab_upper_bound PARAMS ((bfd *abfd));
extern unsigned int ecoff_get_symtab PARAMS ((bfd *abfd, extern long ecoff_get_symtab PARAMS ((bfd *abfd, asymbol **alocation));
asymbol **alocation));
extern void ecoff_get_symbol_info PARAMS ((bfd *abfd, extern void ecoff_get_symbol_info PARAMS ((bfd *abfd,
asymbol *symbol, asymbol *symbol,
symbol_info *ret)); symbol_info *ret));
extern void ecoff_print_symbol PARAMS ((bfd *abfd, PTR filep, extern void ecoff_print_symbol PARAMS ((bfd *abfd, PTR filep,
asymbol *symbol, asymbol *symbol,
bfd_print_symbol_type how)); bfd_print_symbol_type how));
extern unsigned int ecoff_canonicalize_reloc PARAMS ((bfd *abfd, extern long ecoff_canonicalize_reloc PARAMS ((bfd *abfd,
asection *section, asection *section,
arelent **relptr, arelent **relptr,
asymbol **symbols)); asymbol **symbols));
extern boolean ecoff_find_nearest_line PARAMS ((bfd *abfd, extern boolean ecoff_find_nearest_line PARAMS ((bfd *abfd,
asection *section, asection *section,
asymbol **symbols, asymbol **symbols,

View File

@ -259,12 +259,11 @@ extern boolean bfd_elf32_set_section_contents PARAMS ((bfd *, sec_ptr, PTR,
file_ptr, file_ptr,
bfd_size_type)); bfd_size_type));
extern unsigned int bfd_elf32_get_symtab_upper_bound PARAMS ((bfd *)); extern long bfd_elf32_get_symtab_upper_bound PARAMS ((bfd *));
extern unsigned int bfd_elf32_get_symtab PARAMS ((bfd *, asymbol **)); extern long bfd_elf32_get_symtab PARAMS ((bfd *, asymbol **));
extern unsigned int bfd_elf32_get_reloc_upper_bound PARAMS ((bfd *, sec_ptr)); extern long bfd_elf32_get_reloc_upper_bound PARAMS ((bfd *, sec_ptr));
extern unsigned int bfd_elf32_canonicalize_reloc PARAMS ((bfd *, sec_ptr, extern long bfd_elf32_canonicalize_reloc PARAMS ((bfd *, sec_ptr,
arelent **, arelent **, asymbol **));
asymbol **));
extern asymbol *bfd_elf32_make_empty_symbol PARAMS ((bfd *)); extern asymbol *bfd_elf32_make_empty_symbol PARAMS ((bfd *));
extern void bfd_elf32_print_symbol PARAMS ((bfd *, PTR, asymbol *, extern void bfd_elf32_print_symbol PARAMS ((bfd *, PTR, asymbol *,
bfd_print_symbol_type)); bfd_print_symbol_type));
@ -296,12 +295,11 @@ extern boolean bfd_elf64_set_section_contents PARAMS ((bfd *, sec_ptr, PTR,
file_ptr, file_ptr,
bfd_size_type)); bfd_size_type));
extern unsigned int bfd_elf64_get_symtab_upper_bound PARAMS ((bfd *)); extern long bfd_elf64_get_symtab_upper_bound PARAMS ((bfd *));
extern unsigned int bfd_elf64_get_symtab PARAMS ((bfd *, asymbol **)); extern long bfd_elf64_get_symtab PARAMS ((bfd *, asymbol **));
extern unsigned int bfd_elf64_get_reloc_upper_bound PARAMS ((bfd *, sec_ptr)); extern long bfd_elf64_get_reloc_upper_bound PARAMS ((bfd *, sec_ptr));
extern unsigned int bfd_elf64_canonicalize_reloc PARAMS ((bfd *, sec_ptr, extern long bfd_elf64_canonicalize_reloc PARAMS ((bfd *, sec_ptr,
arelent **, arelent **, asymbol **));
asymbol **));
extern asymbol *bfd_elf64_make_empty_symbol PARAMS ((bfd *)); extern asymbol *bfd_elf64_make_empty_symbol PARAMS ((bfd *));
extern void bfd_elf64_print_symbol PARAMS ((bfd *, PTR, asymbol *, extern void bfd_elf64_print_symbol PARAMS ((bfd *, PTR, asymbol *,
bfd_print_symbol_type)); bfd_print_symbol_type));

View File

@ -58,17 +58,17 @@ extern boolean nlm_set_arch_mach PARAMS ((bfd *, enum bfd_architecture,
extern void nlmNAME(get_symbol_info) extern void nlmNAME(get_symbol_info)
PARAMS ((bfd *, asymbol *, symbol_info *)); PARAMS ((bfd *, asymbol *, symbol_info *));
extern unsigned int nlmNAME(get_symtab_upper_bound) extern long nlmNAME(get_symtab_upper_bound)
PARAMS ((bfd *)); PARAMS ((bfd *));
extern unsigned int nlmNAME(get_symtab) extern long nlmNAME(get_symtab)
PARAMS ((bfd *, asymbol **)); PARAMS ((bfd *, asymbol **));
extern asymbol *nlmNAME(make_empty_symbol) extern asymbol *nlmNAME(make_empty_symbol)
PARAMS ((bfd *)); PARAMS ((bfd *));
extern void nlmNAME(print_symbol) extern void nlmNAME(print_symbol)
PARAMS ((bfd *, PTR, asymbol *, bfd_print_symbol_type)); PARAMS ((bfd *, PTR, asymbol *, bfd_print_symbol_type));
extern unsigned int nlmNAME(get_reloc_upper_bound) extern long nlmNAME(get_reloc_upper_bound)
PARAMS ((bfd *, asection *)); PARAMS ((bfd *, asection *));
extern unsigned int nlmNAME(canonicalize_reloc) extern long nlmNAME(canonicalize_reloc)
PARAMS ((bfd *, asection *, arelent **, asymbol **)); PARAMS ((bfd *, asection *, arelent **, asymbol **));
extern bfd_target *nlmNAME(object_p) extern bfd_target *nlmNAME(object_p)
PARAMS ((bfd *)); PARAMS ((bfd *));
@ -99,6 +99,20 @@ struct nlm_obj_tdata
/* Caches for data read from object file. */ /* Caches for data read from object file. */
arelent * nlm_reloc_fixups; arelent * nlm_reloc_fixups;
asection ** nlm_reloc_fixup_secs; asection ** nlm_reloc_fixup_secs;
/* Backend specific information. This should probably be a pointer,
but that would require yet another entry point to initialize the
structure. */
union
{
struct /* Alpha backend information. */
{
bfd_vma gp; /* GP value. */
bfd_vma lita_address; /* .lita section address. */
bfd_size_type lita_size; /* .lita section size. */
}
alpha_backend_data;
}
backend_data;
}; };
#define nlm_tdata(bfd) ((bfd) -> tdata.nlm_obj_data) #define nlm_tdata(bfd) ((bfd) -> tdata.nlm_obj_data)
@ -117,6 +131,9 @@ struct nlm_obj_tdata
#define nlm_relocation_fixups(bfd) (nlm_tdata(bfd) -> nlm_reloc_fixups) #define nlm_relocation_fixups(bfd) (nlm_tdata(bfd) -> nlm_reloc_fixups)
#define nlm_relocation_fixup_secs(bfd) (nlm_tdata(bfd)->nlm_reloc_fixup_secs) #define nlm_relocation_fixup_secs(bfd) (nlm_tdata(bfd)->nlm_reloc_fixup_secs)
#define nlm_alpha_backend_data(bfd) \
(&nlm_tdata (bfd)->backend_data.alpha_backend_data)
/* This is used when writing out the external relocs. */ /* This is used when writing out the external relocs. */
struct reloc_and_sec struct reloc_and_sec
@ -143,6 +160,10 @@ struct nlm_backend_data
enum bfd_architecture arch; enum bfd_architecture arch;
/* Machine. */ /* Machine. */
long mach; long mach;
/* Some NLM formats do not use the uninitialized data section, so
all uninitialized data must be put into the regular data section
instead. */
boolean no_uninitialized_data;
/* Some NLM formats have a prefix on the file. If this function is /* Some NLM formats have a prefix on the file. If this function is
not NULL, it will be called by nlm_object_p. It should return not NULL, it will be called by nlm_object_p. It should return
true if this file could match this format, and it should leave true if this file could match this format, and it should leave
@ -188,42 +209,47 @@ struct nlm_backend_data
boolean (*nlm_write_external) PARAMS ((bfd *, bfd_size_type, boolean (*nlm_write_external) PARAMS ((bfd *, bfd_size_type,
asymbol *, asymbol *,
struct reloc_and_sec *)); struct reloc_and_sec *));
boolean (*nlm_write_export) PARAMS ((bfd *, asymbol *, bfd_vma));
}; };
#define nlm_backend(bfd) \ #define nlm_backend(bfd) \
((struct nlm_backend_data *)((bfd) -> xvec -> backend_data)) ((struct nlm_backend_data *)((bfd) -> xvec -> backend_data))
#define nlm_signature(bfd) \ #define nlm_signature(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> signature : "") (nlm_backend(bfd) -> signature)
#define nlm_fixed_header_size(bfd) \ #define nlm_fixed_header_size(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> fixed_header_size : 0) (nlm_backend(bfd) -> fixed_header_size)
#define nlm_optional_prefix_size(bfd) \ #define nlm_optional_prefix_size(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> optional_prefix_size : 0) (nlm_backend(bfd) -> optional_prefix_size)
#define nlm_architecture(bfd) \ #define nlm_architecture(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> arch : bfd_arch_unknown) (nlm_backend(bfd) -> arch)
#define nlm_machine(bfd) \ #define nlm_machine(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> mach : 0) (nlm_backend(bfd) -> mach)
#define nlm_no_uninitialized_data(bfd) \
(nlm_backend(bfd) -> no_uninitialized_data)
#define nlm_backend_object_p_func(bfd) \ #define nlm_backend_object_p_func(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> nlm_backend_object_p : 0) (nlm_backend(bfd) -> nlm_backend_object_p)
#define nlm_write_prefix_func(bfd) \ #define nlm_write_prefix_func(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> nlm_write_prefix : 0) (nlm_backend(bfd) -> nlm_write_prefix)
#define nlm_read_reloc_func(bfd) \ #define nlm_read_reloc_func(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> nlm_read_reloc : 0) (nlm_backend(bfd) -> nlm_read_reloc)
#define nlm_mangle_relocs_func(bfd) \ #define nlm_mangle_relocs_func(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> nlm_mangle_relocs : 0) (nlm_backend(bfd) -> nlm_mangle_relocs)
#define nlm_read_import_func(bfd) \ #define nlm_read_import_func(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> nlm_read_import : 0) (nlm_backend(bfd) -> nlm_read_import)
#define nlm_write_import_func(bfd) \ #define nlm_write_import_func(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> nlm_write_import : 0) (nlm_backend(bfd) -> nlm_write_import)
#define nlm_set_public_section_func(bfd) \ #define nlm_set_public_section_func(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> nlm_set_public_section : 0) (nlm_backend(bfd) -> nlm_set_public_section)
#define nlm_get_public_offset_func(bfd) \ #define nlm_get_public_offset_func(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> nlm_get_public_offset : 0) (nlm_backend(bfd) -> nlm_get_public_offset)
#define nlm_swap_fixed_header_in_func(bfd) \ #define nlm_swap_fixed_header_in_func(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> nlm_swap_fhdr_in : 0) (nlm_backend(bfd) -> nlm_swap_fhdr_in)
#define nlm_swap_fixed_header_out_func(bfd) \ #define nlm_swap_fixed_header_out_func(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> nlm_swap_fhdr_out : 0) (nlm_backend(bfd) -> nlm_swap_fhdr_out)
#define nlm_write_external_func(bfd) \ #define nlm_write_external_func(bfd) \
(nlm_backend(bfd) ? nlm_backend(bfd) -> nlm_write_external : 0) (nlm_backend(bfd) -> nlm_write_external)
#define nlm_write_export_func(bfd) \
(nlm_backend(bfd) -> nlm_write_export)
/* The NLM code, data, and uninitialized sections have no names defined /* The NLM code, data, and uninitialized sections have no names defined
in the NLM, but bfd wants to give them names, so use the traditional in the NLM, but bfd wants to give them names, so use the traditional

View File

@ -52,8 +52,14 @@ static void MY(choose_reloc_size) PARAMS ((bfd *abfd));
#define MY_write_object_contents MY(write_object_contents) #define MY_write_object_contents MY(write_object_contents)
static boolean MY(write_object_contents) PARAMS ((bfd *abfd)); static boolean MY(write_object_contents) PARAMS ((bfd *abfd));
#define MY_reloc_howto_type_lookup MY(reloc_howto_type_lookup) /* We can't use MY(x) here because it leads to a recursive call to CAT
#define MY_canonicalize_reloc MY(canonicalize_reloc) when expanded inside JUMP_TABLE. */
#define MY_bfd_reloc_type_lookup mipsbsd_reloc_howto_type_lookup
#define MY_canonicalize_reloc mipsbsd_canonicalize_reloc
#define MY_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
#define MY_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define MY_bfd_final_link _bfd_generic_final_link
#define MY_backend_data &MY(backend_data) #define MY_backend_data &MY(backend_data)
#define MY_BFD_TARGET #define MY_BFD_TARGET
@ -177,14 +183,20 @@ MY(write_object_contents) (abfd)
* 0x10000 and continue normally. This will compensate for the sign extension * 0x10000 and continue normally. This will compensate for the sign extension
* when the low bits are added at run time. * when the low bits are added at run time.
*/ */
bfd_reloc_status_type static bfd_reloc_status_type
mips_fix_hi16_s (abfd,reloc_entry,symbol,data,input_section,output_bfd) mips_fix_hi16_s PARAMS ((bfd *, arelent *, asymbol *, PTR,
asection *, bfd *, char **));
static bfd_reloc_status_type
mips_fix_hi16_s (abfd, reloc_entry, symbol, data, input_section,
output_bfd, error_message)
bfd *abfd; bfd *abfd;
arelent *reloc_entry; arelent *reloc_entry;
struct symbol_cache_entry *symbol; asymbol *symbol;
PTR data; PTR data;
asection *input_section; asection *input_section;
bfd *output_bfd; bfd *output_bfd;
char **error_message;
{ {
bfd_vma relocation; bfd_vma relocation;
@ -212,21 +224,22 @@ mips_fix_hi16_s (abfd,reloc_entry,symbol,data,input_section,output_bfd)
} }
static reloc_howto_type mips_howto_table_ext[] = { static reloc_howto_type mips_howto_table_ext[] = {
{MIPS_RELOC_32, 0, 2, 32, false, 0, true, true, 0, {MIPS_RELOC_32, 0, 2, 32, false, 0, complain_overflow_bitfield, 0,
"32", false, 0, 0xffffffff, false}, "32", false, 0, 0xffffffff, false},
{MIPS_RELOC_JMP, 2, 2, 26, false, 0, false, true, 0, {MIPS_RELOC_JMP, 2, 2, 26, false, 0, complain_overflow_bitfield, 0,
"MIPS_JMP", false, 0, 0x03ffffff, false}, "MIPS_JMP", false, 0, 0x03ffffff, false},
{MIPS_RELOC_WDISP16, 2, 1, 16, true, 0, false, true, 0, {MIPS_RELOC_WDISP16, 2, 1, 16, true, 0, complain_overflow_signed, 0,
"WDISP16", false, 0, 0x0000ffff, false}, "WDISP16", false, 0, 0x0000ffff, false},
{MIPS_RELOC_HI16, 16, 1, 16, false, 0, false, true, 0, {MIPS_RELOC_HI16, 16, 1, 16, false, 0, complain_overflow_bitfield, 0,
"HI16", false, 0, 0x0000ffff, false}, "HI16", false, 0, 0x0000ffff, false},
{MIPS_RELOC_HI16_S, 16, 1, 16, false, 0, false, true, mips_fix_hi16_s, {MIPS_RELOC_HI16_S, 16, 1, 16, false, 0, complain_overflow_bitfield,
"HI16_S", false, 0, 0x0000ffff, false}, mips_fix_hi16_s,
{MIPS_RELOC_LO16, 0, 1, 16, false, 0, false, true, 0, "HI16_S", false, 0, 0x0000ffff, false},
{MIPS_RELOC_LO16, 0, 1, 16, false, 0, complain_overflow_dont, 0,
"LO16", false, 0, 0x0000ffff, false}, "LO16", false, 0, 0x0000ffff, false},
}; };
static reloc_howto_type * static const reloc_howto_type *
MY(reloc_howto_type_lookup) (abfd, code) MY(reloc_howto_type_lookup) (abfd, code)
bfd *abfd; bfd *abfd;
bfd_reloc_code_real_type code; bfd_reloc_code_real_type code;
@ -258,7 +271,7 @@ MY(reloc_howto_type_lookup) (abfd, code)
* This is just like the standard aoutx.h version but we need to do our * This is just like the standard aoutx.h version but we need to do our
* own mapping of external reloc type values to howto entries. * own mapping of external reloc type values to howto entries.
*/ */
unsigned int long
MY(canonicalize_reloc)(abfd, section, relptr, symbols) MY(canonicalize_reloc)(abfd, section, relptr, symbols)
bfd *abfd; bfd *abfd;
sec_ptr section; sec_ptr section;
@ -288,10 +301,10 @@ MY(canonicalize_reloc)(abfd, section, relptr, symbols)
} }
if (!NAME(aout,slurp_reloc_table)(abfd, section, symbols)) if (!NAME(aout,slurp_reloc_table)(abfd, section, symbols))
return 0; return -1;
tblptr = section->relocation; tblptr = section->relocation;
if (!tblptr) if (!tblptr)
return 0; return -1;
/* fix up howto entries */ /* fix up howto entries */
for (count = 0; count++ < section->reloc_count;) for (count = 0; count++ < section->reloc_count;)
@ -315,114 +328,60 @@ static CONST struct aout_backend_data MY(backend_data) = {
bfd_target aout_mips_little_vec = bfd_target aout_mips_little_vec =
{ {
"aout-mips-little", /* name */ "a.out-mips-little", /* name */
bfd_target_aout_flavour, bfd_target_aout_flavour,
false, /* target byte order (little) */ false, /* target byte order (little) */
false, /* target headers byte order (little) */ false, /* target headers byte order (little) */
(HAS_RELOC | EXEC_P | /* object flags */ (HAS_RELOC | EXEC_P | /* object flags */
HAS_LINENO | HAS_DEBUG | HAS_LINENO | HAS_DEBUG |
HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED), HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */ (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
MY_symbol_leading_char, MY_symbol_leading_char,
' ', /* ar_pad_char */ ' ', /* ar_pad_char */
15, /* ar_max_namelen */ 15, /* ar_max_namelen */
1, /* minimum alignment */ 1, /* minimum alignment */
_do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* data */ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
_do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* hdrs */ 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, MY_object_p, /* bfd_check_format */ {_bfd_dummy_target, MY_object_p, /* bfd_check_format */
bfd_generic_archive_p, MY_core_file_p}, bfd_generic_archive_p, MY_core_file_p},
{bfd_false, MY_mkobject, /* bfd_set_format */ {bfd_false, MY_mkobject, /* bfd_set_format */
_bfd_generic_mkarchive, bfd_false}, _bfd_generic_mkarchive, bfd_false},
{bfd_false, MY_write_object_contents, /* bfd_write_contents */ {bfd_false, MY_write_object_contents, /* bfd_write_contents */
_bfd_write_archive_contents, bfd_false}, _bfd_write_archive_contents, bfd_false},
JUMP_TABLE (MY),
MY_core_file_failing_command,
MY_core_file_failing_signal,
MY_core_file_matches_executable_p,
MY_slurp_armap,
MY_slurp_extended_name_table,
MY_truncate_arname,
MY_write_armap,
MY_close_and_cleanup,
MY_set_section_contents,
MY_get_section_contents,
MY_new_section_hook,
MY_get_symtab_upper_bound,
MY_get_symtab,
MY_get_reloc_upper_bound,
MY_canonicalize_reloc,
MY_make_empty_symbol,
MY_print_symbol,
MY_get_lineno,
MY_set_arch_mach,
MY_openr_next_archived_file,
MY_find_nearest_line,
MY_generic_stat_arch_elt,
MY_sizeof_headers,
MY_bfd_debug_info_start,
MY_bfd_debug_info_end,
MY_bfd_debug_info_accumulate,
bfd_generic_get_relocated_section_contents,
bfd_generic_relax_section,
bfd_generic_seclet_link,
MY_reloc_howto_type_lookup,
MY_make_debug_symbol,
(PTR) MY_backend_data, (PTR) MY_backend_data,
}; };
bfd_target aout_mips_big_vec = bfd_target aout_mips_big_vec =
{ {
"aout-mips-big", /* name */ "a.out-mips-big", /* name */
bfd_target_aout_flavour, bfd_target_aout_flavour,
true, /* target byte order (big) */ true, /* target byte order (big) */
true, /* target headers byte order (big) */ true, /* target headers byte order (big) */
(HAS_RELOC | EXEC_P | /* object flags */ (HAS_RELOC | EXEC_P | /* object flags */
HAS_LINENO | HAS_DEBUG | HAS_LINENO | HAS_DEBUG |
HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED), HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */ (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
MY_symbol_leading_char, MY_symbol_leading_char,
' ', /* ar_pad_char */ ' ', /* ar_pad_char */
15, /* ar_max_namelen */ 15, /* ar_max_namelen */
1, /* minimum alignment */ 1, /* minimum alignment */
_do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* data */ bfd_getb64, bfd_getb_signed_64, bfd_putb64,
_do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* hdrs */ 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, MY_object_p, /* bfd_check_format */ {_bfd_dummy_target, MY_object_p, /* bfd_check_format */
bfd_generic_archive_p, MY_core_file_p}, bfd_generic_archive_p, MY_core_file_p},
{bfd_false, MY_mkobject, /* bfd_set_format */ {bfd_false, MY_mkobject, /* bfd_set_format */
_bfd_generic_mkarchive, bfd_false}, _bfd_generic_mkarchive, bfd_false},
{bfd_false, MY_write_object_contents, /* bfd_write_contents */ {bfd_false, MY_write_object_contents, /* bfd_write_contents */
_bfd_write_archive_contents, bfd_false}, _bfd_write_archive_contents, bfd_false},
JUMP_TABLE (MY),
MY_core_file_failing_command,
MY_core_file_failing_signal,
MY_core_file_matches_executable_p,
MY_slurp_armap,
MY_slurp_extended_name_table,
MY_truncate_arname,
MY_write_armap,
MY_close_and_cleanup,
MY_set_section_contents,
MY_get_section_contents,
MY_new_section_hook,
MY_get_symtab_upper_bound,
MY_get_symtab,
MY_get_reloc_upper_bound,
MY_canonicalize_reloc,
MY_make_empty_symbol,
MY_print_symbol,
MY_get_lineno,
MY_set_arch_mach,
MY_openr_next_archived_file,
MY_find_nearest_line,
MY_generic_stat_arch_elt,
MY_sizeof_headers,
MY_bfd_debug_info_start,
MY_bfd_debug_info_end,
MY_bfd_debug_info_accumulate,
bfd_generic_get_relocated_section_contents,
bfd_generic_relax_section,
bfd_generic_seclet_link,
MY_reloc_howto_type_lookup,
MY_make_debug_symbol,
(PTR) MY_backend_data, (PTR) MY_backend_data,
}; };

View File

@ -122,9 +122,7 @@ nlm_sparc_read_reloc (abfd, sym, secp, rel)
asection **secp; asection **secp;
arelent *rel; arelent *rel;
{ {
bfd_byte temp[4];
bfd_vma val, addend; bfd_vma val, addend;
const char *name;
int index; int index;
unsigned int type; unsigned int type;
struct nlm32_sparc_reloc_ext tmp_reloc; struct nlm32_sparc_reloc_ext tmp_reloc;

File diff suppressed because it is too large Load Diff

View File

@ -201,11 +201,12 @@ oasys_slurp_symbol_table (abfd)
return true; return true;
} }
static unsigned int static long
oasys_get_symtab_upper_bound (abfd) oasys_get_symtab_upper_bound (abfd)
bfd *CONST abfd; bfd *CONST abfd;
{ {
oasys_slurp_symbol_table (abfd); if (! oasys_slurp_symbol_table (abfd))
return -1;
return (abfd->symcount + 1) * (sizeof (oasys_symbol_type *)); return (abfd->symcount + 1) * (sizeof (oasys_symbol_type *));
} }
@ -215,7 +216,7 @@ oasys_get_symtab_upper_bound (abfd)
extern bfd_target oasys_vec; extern bfd_target oasys_vec;
unsigned int long
oasys_get_symtab (abfd, location) oasys_get_symtab (abfd, location)
bfd *abfd; bfd *abfd;
asymbol **location; asymbol **location;
@ -224,7 +225,7 @@ oasys_get_symtab (abfd, location)
unsigned int counter; unsigned int counter;
if (oasys_slurp_symbol_table (abfd) == false) if (oasys_slurp_symbol_table (abfd) == false)
{ {
return 0; return -1;
} }
symbase = OASYS_DATA (abfd)->symbols; symbase = OASYS_DATA (abfd)->symbols;
for (counter = 0; counter < abfd->symcount; counter++) for (counter = 0; counter < abfd->symcount; counter++)
@ -800,12 +801,13 @@ oasys_new_section_hook (abfd, newsect)
} }
static unsigned int static long
oasys_get_reloc_upper_bound (abfd, asect) oasys_get_reloc_upper_bound (abfd, asect)
bfd *abfd; bfd *abfd;
sec_ptr asect; sec_ptr asect;
{ {
oasys_slurp_section_data (abfd); if (! oasys_slurp_section_data (abfd))
return -1;
return (asect->reloc_count + 1) * sizeof (arelent *); return (asect->reloc_count + 1) * sizeof (arelent *);
} }
@ -831,7 +833,7 @@ oasys_get_section_contents (abfd, section, location, offset, count)
} }
unsigned int long
oasys_canonicalize_reloc (ignore_abfd, section, relptr, symbols) oasys_canonicalize_reloc (ignore_abfd, section, relptr, symbols)
bfd *ignore_abfd; bfd *ignore_abfd;
sec_ptr section; sec_ptr section;
@ -1435,6 +1437,11 @@ oasys_sizeof_headers (abfd, exec)
#define oasys_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define oasys_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
#define oasys_bfd_link_add_symbols _bfd_generic_link_add_symbols #define oasys_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define oasys_bfd_final_link _bfd_generic_final_link #define oasys_bfd_final_link _bfd_generic_final_link
#define oasys_bfd_copy_private_section_data \
((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_true)
#define oasys_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
#define oasys_bfd_is_local_label bfd_generic_is_local_label
/*SUPPRESS 460 */ /*SUPPRESS 460 */
bfd_target oasys_vec = bfd_target oasys_vec =

View File

@ -142,7 +142,7 @@ osf_core_core_file_p (abfd)
secname = bfd_alloc (abfd, 40); secname = bfd_alloc (abfd, 40);
if (!secname) if (!secname)
{ {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
return NULL; return NULL;
} }
sprintf (secname, ".data%d", dseccnt++); sprintf (secname, ".data%d", dseccnt++);
@ -212,13 +212,13 @@ osf_core_core_file_matches_executable_p (core_bfd, exec_bfd)
#define osf_core_get_section_contents bfd_generic_get_section_contents #define osf_core_get_section_contents bfd_generic_get_section_contents
#define osf_core_new_section_hook (boolean (*) PARAMS \ #define osf_core_new_section_hook (boolean (*) PARAMS \
((bfd *, sec_ptr))) bfd_true ((bfd *, sec_ptr))) bfd_true
#define osf_core_get_symtab_upper_bound bfd_0u #define osf_core_get_symtab_upper_bound bfd_0l
#define osf_core_get_symtab (unsigned int (*) PARAMS \ #define osf_core_get_symtab (long (*) PARAMS \
((bfd *, struct symbol_cache_entry **))) bfd_0u ((bfd *, struct symbol_cache_entry **))) bfd_0l
#define osf_core_get_reloc_upper_bound (unsigned int (*) PARAMS \ #define osf_core_get_reloc_upper_bound (long (*) PARAMS \
((bfd *, sec_ptr))) bfd_0u ((bfd *, sec_ptr))) bfd_0l
#define osf_core_canonicalize_reloc (unsigned int (*) PARAMS \ #define osf_core_canonicalize_reloc (long (*) PARAMS \
((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0u ((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0l
#define osf_core_print_symbol (void (*) PARAMS \ #define osf_core_print_symbol (void (*) PARAMS \
((bfd *, PTR, struct symbol_cache_entry *, \ ((bfd *, PTR, struct symbol_cache_entry *, \
bfd_print_symbol_type))) bfd_false bfd_print_symbol_type))) bfd_false
@ -252,6 +252,12 @@ osf_core_core_file_matches_executable_p (core_bfd, exec_bfd)
((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false) ((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false)
#define osf_core_bfd_final_link \ #define osf_core_bfd_final_link \
((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false) ((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false)
#define osf_core_bfd_copy_private_section_data \
((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_false)
#define osf_core_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define osf_core_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, asymbol *))) bfd_false)
/* If somebody calls any byte-swapping routines, shoot them. */ /* If somebody calls any byte-swapping routines, shoot them. */
static void static void

View File

@ -80,7 +80,7 @@ ptrace_unix_core_file_p (abfd)
|| u.pt_rev != _BCS_PTRACE_REV) || u.pt_rev != _BCS_PTRACE_REV)
{ {
/* Too small to be a core file */ /* Too small to be a core file */
bfd_error = wrong_format; bfd_set_error (bfd_error_wrong_format);
return 0; return 0;
} }
@ -92,7 +92,7 @@ ptrace_unix_core_file_p (abfd)
bfd_zalloc (abfd, sizeof (struct trad_core_struct)); bfd_zalloc (abfd, sizeof (struct trad_core_struct));
if (rawptr == NULL) { if (rawptr == NULL) {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
return 0; return 0;
} }
@ -103,10 +103,10 @@ ptrace_unix_core_file_p (abfd)
/* Create the sections. This is raunchy, but bfd_close wants to free /* Create the sections. This is raunchy, but bfd_close wants to free
them separately. */ them separately. */
core_stacksec(abfd) = (asection *) zalloc (sizeof (asection)); core_stacksec(abfd) = (asection *) bfd_zmalloc (sizeof (asection));
if (core_stacksec (abfd) == NULL) { if (core_stacksec (abfd) == NULL) {
loser: loser:
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
free ((void *)rawptr); free ((void *)rawptr);
return 0; return 0;
} }
@ -203,17 +203,17 @@ ptrace_unix_core_file_matches_executable_p (core_bfd, exec_bfd)
#define ptrace_unix_close_and_cleanup bfd_generic_close_and_cleanup #define ptrace_unix_close_and_cleanup bfd_generic_close_and_cleanup
#define ptrace_unix_set_section_contents (boolean (*) PARAMS \ #define ptrace_unix_set_section_contents (boolean (*) PARAMS \
((bfd *abfd, asection *section, PTR data, file_ptr offset, \ ((bfd *abfd, asection *section, PTR data, file_ptr offset, \
bfd_size_type count))) bfd_false bfd_size_type count))) bfd_generic_set_section_contents
#define ptrace_unix_get_section_contents bfd_generic_get_section_contents #define ptrace_unix_get_section_contents bfd_generic_get_section_contents
#define ptrace_unix_new_section_hook (boolean (*) PARAMS \ #define ptrace_unix_new_section_hook (boolean (*) PARAMS \
((bfd *, sec_ptr))) bfd_true ((bfd *, sec_ptr))) bfd_true
#define ptrace_unix_get_symtab_upper_bound bfd_0u #define ptrace_unix_get_symtab_upper_bound bfd_0l
#define ptrace_unix_get_symtab (unsigned int (*) PARAMS \ #define ptrace_unix_get_symtab (long (*) PARAMS \
((bfd *, struct symbol_cache_entry **))) bfd_0u ((bfd *, struct symbol_cache_entry **))) bfd_0l
#define ptrace_unix_get_reloc_upper_bound (unsigned int (*) PARAMS \ #define ptrace_unix_get_reloc_upper_bound (long (*) PARAMS \
((bfd *, sec_ptr))) bfd_0u ((bfd *, sec_ptr))) bfd_0l
#define ptrace_unix_canonicalize_reloc (unsigned int (*) PARAMS \ #define ptrace_unix_canonicalize_reloc (long (*) PARAMS \
((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0u ((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0l
#define ptrace_unix_make_empty_symbol (struct symbol_cache_entry * \ #define ptrace_unix_make_empty_symbol (struct symbol_cache_entry * \
(*) PARAMS ((bfd *))) bfd_false (*) PARAMS ((bfd *))) bfd_false
#define ptrace_unix_print_symbol (void (*) PARAMS \ #define ptrace_unix_print_symbol (void (*) PARAMS \
@ -249,6 +249,12 @@ ptrace_unix_core_file_matches_executable_p (core_bfd, exec_bfd)
((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false) ((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false)
#define ptrace_unix_bfd_final_link \ #define ptrace_unix_bfd_final_link \
((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false) ((boolean (*) PARAMS ((bfd *, struct bfd_link_info *))) bfd_false)
#define ptrace_unix_bfd_copy_private_section_data \
((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_false)
#define ptrace_unix_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
#define ptrace_unix_bfd_is_local_label \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_false)
/* If somebody calls any byte-swapping routines, shoot them. */ /* If somebody calls any byte-swapping routines, shoot them. */
void void
@ -256,9 +262,10 @@ swap_abort()
{ {
abort(); /* This way doesn't require any declaration for ANSI to fuck up */ abort(); /* This way doesn't require any declaration for ANSI to fuck up */
} }
#define NO_GET ((bfd_vma (*) PARAMS (( bfd_byte *))) swap_abort ) #define NO_GET ((bfd_vma (*) PARAMS (( const bfd_byte *))) swap_abort )
#define NO_PUT ((void (*) PARAMS ((bfd_vma, bfd_byte *))) swap_abort ) #define NO_PUT ((void (*) PARAMS ((bfd_vma, bfd_byte *))) swap_abort )
#define NO_SIGNED_GET ((bfd_signed_vma (*) PARAMS ((bfd_byte *))) swap_abort ) #define NO_SIGNED_GET \
((bfd_signed_vma (*) PARAMS ((const bfd_byte *))) swap_abort )
bfd_target ptrace_core_vec = bfd_target ptrace_core_vec =
{ {

View File

@ -57,7 +57,7 @@ SUBSECTION
CODE_FRAGMENT CODE_FRAGMENT
. .
.typedef enum bfd_reloc_status .typedef enum bfd_reloc_status
.{ .{
. {* No errors detected *} . {* No errors detected *}
. bfd_reloc_ok, . bfd_reloc_ok,
@ -89,7 +89,7 @@ CODE_FRAGMENT
. bfd_reloc_status_type; . bfd_reloc_status_type;
. .
. .
.typedef struct reloc_cache_entry .typedef struct reloc_cache_entry
.{ .{
. {* A pointer into the canonical table of pointers *} . {* A pointer into the canonical table of pointers *}
. struct symbol_cache_entry **sym_ptr_ptr; . struct symbol_cache_entry **sym_ptr_ptr;
@ -98,7 +98,7 @@ CODE_FRAGMENT
. bfd_size_type address; . bfd_size_type address;
. .
. {* addend for relocation value *} . {* addend for relocation value *}
. bfd_vma addend; . bfd_vma addend;
. .
. {* Pointer to how to perform the required relocation *} . {* Pointer to how to perform the required relocation *}
. const struct reloc_howto_struct *howto; . const struct reloc_howto_struct *howto;
@ -162,7 +162,7 @@ DESCRIPTION
|RELOCATION RECORDS FOR [.text]: |RELOCATION RECORDS FOR [.text]:
|offset type value |offset type value
|00000006 32 _foo |00000006 32 _foo
| |
|00000000 4e56 fffc ; linkw fp,#-4 |00000000 4e56 fffc ; linkw fp,#-4
@ -187,7 +187,7 @@ DESCRIPTION
|RELOCATION RECORDS FOR [.text]: |RELOCATION RECORDS FOR [.text]:
|offset type value |offset type value
|00000002 HVRT16 _foo+0x12340000 |00000002 HVRT16 _foo+0x12340000
|00000006 LVRT16 _foo+0x12340000 |00000006 LVRT16 _foo+0x12340000
| |
@ -207,7 +207,7 @@ DESCRIPTION
sparc the parts are created in odd sized lumps. The designers of sparc the parts are created in odd sized lumps. The designers of
the a.out format chose to not use the data within the section the a.out format chose to not use the data within the section
for storing part of the offset; all the offset is kept within for storing part of the offset; all the offset is kept within
the reloc. Anything in the data should be ignored. the reloc. Anything in the data should be ignored.
| save %sp,-112,%sp | save %sp,-112,%sp
| sethi %hi(_foo+0x12345678),%g2 | sethi %hi(_foo+0x12345678),%g2
@ -220,7 +220,7 @@ DESCRIPTION
|RELOCATION RECORDS FOR [.text]: |RELOCATION RECORDS FOR [.text]:
|offset type value |offset type value
|00000004 HI22 _foo+0x12345678 |00000004 HI22 _foo+0x12345678
|00000008 LO10 _foo+0x12345678 |00000008 LO10 _foo+0x12345678
| |
@ -240,7 +240,7 @@ DESCRIPTION
would normally have a relocation instruction set and turn would normally have a relocation instruction set and turn
relocations into pointers to the correct structure on input - relocations into pointers to the correct structure on input -
but it would be possible to create each howto field on demand. but it would be possible to create each howto field on demand.
*/ */
/* /*
@ -273,7 +273,7 @@ CODE_FRAGMENT
*/ */
/* /*
SUBSUBSECTION SUBSUBSECTION
<<reloc_howto_type>> <<reloc_howto_type>>
The <<reloc_howto_type>> is a structure which contains all the The <<reloc_howto_type>> is a structure which contains all the
@ -282,8 +282,8 @@ SUBSUBSECTION
CODE_FRAGMENT CODE_FRAGMENT
.struct symbol_cache_entry; {* Forward declaration *} .struct symbol_cache_entry; {* Forward declaration *}
. .
.typedef struct reloc_howto_struct .typedef struct reloc_howto_struct
.{ .{
. {* The type field has mainly a documetary use - the back end can . {* The type field has mainly a documetary use - the back end can
. do what it wants with it, though normally the back end's . do what it wants with it, though normally the back end's
. external idea of what a reloc number is stored . external idea of what a reloc number is stored
@ -323,12 +323,12 @@ CODE_FRAGMENT
. called rather than the normal function. This allows really . called rather than the normal function. This allows really
. strange relocation methods to be accomodated (e.g., i960 callj . strange relocation methods to be accomodated (e.g., i960 callj
. instructions). *} . instructions). *}
. bfd_reloc_status_type (*special_function) . bfd_reloc_status_type (*special_function)
. PARAMS ((bfd *abfd, . PARAMS ((bfd *abfd,
. arelent *reloc_entry, . arelent *reloc_entry,
. struct symbol_cache_entry *symbol, . struct symbol_cache_entry *symbol,
. PTR data, . PTR data,
. asection *input_section, . asection *input_section,
. bfd *output_bfd, . bfd *output_bfd,
. char **error_message)); . char **error_message));
. .
@ -352,7 +352,7 @@ CODE_FRAGMENT
. into the instruction. In most cases src_mask == dst_mask, . into the instruction. In most cases src_mask == dst_mask,
. except in the above special case, where dst_mask would be . except in the above special case, where dst_mask would be
. 0x000000ff, and src_mask would be 0x00000000. *} . 0x000000ff, and src_mask would be 0x00000000. *}
. bfd_vma dst_mask; . bfd_vma dst_mask;
. .
. {* When some formats create PC relative instructions, they leave . {* When some formats create PC relative instructions, they leave
. the value of the pc of the place being relocated in the offset . the value of the pc of the place being relocated in the offset
@ -397,7 +397,7 @@ DESCRIPTION
. relocation = symbol->value; \ . relocation = symbol->value; \
. } \ . } \
. } \ . } \
.} .}
*/ */
@ -417,15 +417,16 @@ int
bfd_get_reloc_size (howto) bfd_get_reloc_size (howto)
const reloc_howto_type *howto; const reloc_howto_type *howto;
{ {
switch (howto->size) { switch (howto->size)
case 0: return 1; {
case 1: return 2; case 0: return 1;
case 2: return 4; case 1: return 2;
case 3: return 0; case 2: return 4;
case 4: return 8; case 3: return 0;
case -2: return 4; case 4: return 8;
default: abort (); case -2: return 4;
} default: abort ();
}
} }
/* /*
@ -448,7 +449,7 @@ DESCRIPTION
/* /*
FUNCTION FUNCTION
bfd_perform_relocation bfd_perform_relocation
SYNOPSIS SYNOPSIS
@ -492,15 +493,15 @@ bfd_perform_relocation (abfd, reloc_entry, data, input_section, output_bfd,
{ {
bfd_vma relocation; bfd_vma relocation;
bfd_reloc_status_type flag = bfd_reloc_ok; bfd_reloc_status_type flag = bfd_reloc_ok;
bfd_size_type addr = reloc_entry->address ; bfd_size_type addr = reloc_entry->address;
bfd_vma output_base = 0; bfd_vma output_base = 0;
const reloc_howto_type *howto = reloc_entry->howto; const reloc_howto_type *howto = reloc_entry->howto;
asection *reloc_target_output_section; asection *reloc_target_output_section;
asymbol *symbol; asymbol *symbol;
symbol = *(reloc_entry->sym_ptr_ptr); symbol = *(reloc_entry->sym_ptr_ptr);
if ((symbol->section == &bfd_abs_section) if ((symbol->section == &bfd_abs_section)
&& output_bfd != (bfd *)NULL) && output_bfd != (bfd *) NULL)
{ {
reloc_entry->address += input_section->output_offset; reloc_entry->address += input_section->output_offset;
return bfd_reloc_ok; return bfd_reloc_ok;
@ -544,7 +545,7 @@ bfd_perform_relocation (abfd, reloc_entry, data, input_section, output_bfd,
reloc_target_output_section = symbol->section->output_section; reloc_target_output_section = symbol->section->output_section;
/* Convert input-section-relative symbol value to absolute. */ /* Convert input-section-relative symbol value to absolute. */
if (output_bfd && howto->partial_inplace==false) if (output_bfd && howto->partial_inplace == false)
output_base = 0; output_base = 0;
else else
output_base = reloc_target_output_section->vma; output_base = reloc_target_output_section->vma;
@ -587,28 +588,28 @@ bfd_perform_relocation (abfd, reloc_entry, data, input_section, output_bfd,
actually does. I don't want to change it, because it seems actually does. I don't want to change it, because it seems
far too likely that something will break. */ far too likely that something will break. */
relocation -= relocation -=
input_section->output_section->vma + input_section->output_offset; input_section->output_section->vma + input_section->output_offset;
if (howto->pcrel_offset == true) if (howto->pcrel_offset == true)
relocation -= reloc_entry->address; relocation -= reloc_entry->address;
} }
if (output_bfd!= (bfd *)NULL) if (output_bfd != (bfd *) NULL)
{ {
if ( howto->partial_inplace == false) if (howto->partial_inplace == false)
{ {
/* This is a partial relocation, and we want to apply the relocation /* This is a partial relocation, and we want to apply the relocation
to the reloc entry rather than the raw data. Modify the reloc to the reloc entry rather than the raw data. Modify the reloc
inplace to reflect what we now know. */ inplace to reflect what we now know. */
reloc_entry->addend = relocation; reloc_entry->addend = relocation;
reloc_entry->address += input_section->output_offset; reloc_entry->address += input_section->output_offset;
return flag; return flag;
} }
else else
{ {
/* This is a partial relocation, but inplace, so modify the /* This is a partial relocation, but inplace, so modify the
reloc record a bit. reloc record a bit.
If we've relocated with a symbol with a section, change If we've relocated with a symbol with a section, change
into a ref to the section belonging to the symbol. */ into a ref to the section belonging to the symbol. */
@ -699,7 +700,7 @@ space consuming. For each target:
} }
} }
} }
else else
{ {
reloc_entry->addend = 0; reloc_entry->addend = 0;
} }
@ -727,14 +728,14 @@ space consuming. For each target:
{ {
/* Assumes two's complement. */ /* Assumes two's complement. */
bfd_signed_vma reloc_signed_max = (1 << (howto->bitsize - 1)) - 1; bfd_signed_vma reloc_signed_max = (1 << (howto->bitsize - 1)) - 1;
bfd_signed_vma reloc_signed_min = ~ reloc_signed_max; bfd_signed_vma reloc_signed_min = ~reloc_signed_max;
/* The above right shift is incorrect for a signed value. /* The above right shift is incorrect for a signed value.
Fix it up by forcing on the upper bits. */ Fix it up by forcing on the upper bits. */
if (howto->rightshift > howto->bitpos if (howto->rightshift > howto->bitpos
&& (bfd_signed_vma) relocation < 0) && (bfd_signed_vma) relocation < 0)
check |= ((bfd_vma) -1 check |= ((bfd_vma) - 1
&~ ((bfd_vma) -1 & ~((bfd_vma) - 1
>> (howto->rightshift - howto->bitpos))); >> (howto->rightshift - howto->bitpos)));
if ((bfd_signed_vma) check > reloc_signed_max if ((bfd_signed_vma) check > reloc_signed_max
|| (bfd_signed_vma) check < reloc_signed_min) || (bfd_signed_vma) check < reloc_signed_min)
@ -747,7 +748,7 @@ space consuming. For each target:
overflow if howto->bitsize is the number of bits in overflow if howto->bitsize is the number of bits in
bfd_vma. */ bfd_vma. */
bfd_vma reloc_unsigned_max = bfd_vma reloc_unsigned_max =
(((1 << (howto->bitsize - 1)) - 1) << 1) | 1; (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
if ((bfd_vma) check > reloc_unsigned_max) if ((bfd_vma) check > reloc_unsigned_max)
flag = bfd_reloc_overflow; flag = bfd_reloc_overflow;
@ -760,8 +761,8 @@ space consuming. For each target:
bfd_vma. */ bfd_vma. */
bfd_vma reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1; bfd_vma reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
if (((bfd_vma) check &~ reloc_bits) != 0 if (((bfd_vma) check & ~reloc_bits) != 0
&& ((bfd_vma) check &~ reloc_bits) != (-1 &~ reloc_bits)) && ((bfd_vma) check & ~reloc_bits) != (-1 & ~reloc_bits))
{ {
/* The above right shift is incorrect for a signed /* The above right shift is incorrect for a signed
value. See if turning on the upper bits fixes the value. See if turning on the upper bits fixes the
@ -769,10 +770,10 @@ space consuming. For each target:
if (howto->rightshift > howto->bitpos if (howto->rightshift > howto->bitpos
&& (bfd_signed_vma) relocation < 0) && (bfd_signed_vma) relocation < 0)
{ {
check |= ((bfd_vma) -1 check |= ((bfd_vma) - 1
&~ ((bfd_vma) -1 & ~((bfd_vma) - 1
>> (howto->rightshift - howto->bitpos))); >> (howto->rightshift - howto->bitpos)));
if (((bfd_vma) check &~ reloc_bits) != (-1 &~ reloc_bits)) if (((bfd_vma) check & ~reloc_bits) != (-1 & ~reloc_bits))
flag = bfd_reloc_overflow; flag = bfd_reloc_overflow;
} }
else else
@ -784,8 +785,8 @@ space consuming. For each target:
abort (); abort ();
} }
} }
/* /*
Either we are relocating all the way, or we don't want to apply Either we are relocating all the way, or we don't want to apply
the relocation to the reloc entry (probably because there isn't the relocation to the reloc entry (probably because there isn't
any room in the output format to describe addends to relocs) any room in the output format to describe addends to relocs)
@ -817,7 +818,7 @@ space consuming. For each target:
relocation >>= (bfd_vma) howto->rightshift; relocation >>= (bfd_vma) howto->rightshift;
/* Shift everything up to where it's going to be used */ /* Shift everything up to where it's going to be used */
relocation <<= (bfd_vma) howto->bitpos; relocation <<= (bfd_vma) howto->bitpos;
/* Wait for the day when all have the mask in them */ /* Wait for the day when all have the mask in them */
@ -832,23 +833,23 @@ space consuming. For each target:
A part 1 A part 1
B part 2 B part 2
R result R result
Do this: Do this:
i i i i i o o o o o from bfd_get<size> i i i i i o o o o o from bfd_get<size>
and S S S S S to get the size offset we want and S S S S S to get the size offset we want
+ r r r r r r r r r r to get the final value to place + r r r r r r r r r r to get the final value to place
and D D D D D to chop to right size and D D D D D to chop to right size
----------------------- -----------------------
A A A A A A A A A A
And this: And this:
... i i i i i o o o o o from bfd_get<size> ... i i i i i o o o o o from bfd_get<size>
and N N N N N get instruction and N N N N N get instruction
----------------------- -----------------------
... B B B B B ... B B B B B
And then: And then:
B B B B B B B B B B
or A A A A A or A A A A A
----------------------- -----------------------
R R R R R R R R R R put into bfd_put<size> R R R R R R R R R R put into bfd_put<size>
*/ */
@ -856,60 +857,60 @@ space consuming. For each target:
#define DOIT(x) \ #define DOIT(x) \
x = ( (x & ~howto->dst_mask) | (((x & howto->src_mask) + relocation) & howto->dst_mask)) x = ( (x & ~howto->dst_mask) | (((x & howto->src_mask) + relocation) & howto->dst_mask))
switch (howto->size) switch (howto->size)
{ {
case 0: case 0:
{ {
char x = bfd_get_8(abfd, (char *)data + addr); char x = bfd_get_8 (abfd, (char *) data + addr);
DOIT(x); DOIT (x);
bfd_put_8(abfd,x, (unsigned char *) data + addr); bfd_put_8 (abfd, x, (unsigned char *) data + addr);
} }
break; break;
case 1: case 1:
if (relocation) if (relocation)
{ {
short x = bfd_get_16(abfd, (bfd_byte *)data + addr); short x = bfd_get_16 (abfd, (bfd_byte *) data + addr);
DOIT(x); DOIT (x);
bfd_put_16(abfd, x, (unsigned char *)data + addr); bfd_put_16 (abfd, x, (unsigned char *) data + addr);
} }
break; break;
case 2: case 2:
if (relocation) if (relocation)
{ {
long x = bfd_get_32 (abfd, (bfd_byte *) data + addr); long x = bfd_get_32 (abfd, (bfd_byte *) data + addr);
DOIT (x); DOIT (x);
bfd_put_32 (abfd, x, (bfd_byte *)data + addr); bfd_put_32 (abfd, x, (bfd_byte *) data + addr);
} }
break; break;
case -2: case -2:
{ {
long x = bfd_get_32(abfd, (bfd_byte *) data + addr); long x = bfd_get_32 (abfd, (bfd_byte *) data + addr);
relocation = -relocation; relocation = -relocation;
DOIT(x); DOIT (x);
bfd_put_32(abfd,x, (bfd_byte *)data + addr); bfd_put_32 (abfd, x, (bfd_byte *) data + addr);
} }
break; break;
case 3: case 3:
/* Do nothing */ /* Do nothing */
break; break;
case 4: case 4:
#ifdef BFD64 #ifdef BFD64
if (relocation) if (relocation)
{ {
bfd_vma x = bfd_get_64 (abfd, (bfd_byte *) data + addr); bfd_vma x = bfd_get_64 (abfd, (bfd_byte *) data + addr);
DOIT (x); DOIT (x);
bfd_put_64 (abfd, x, (bfd_byte *) data + addr); bfd_put_64 (abfd, x, (bfd_byte *) data + addr);
} }
#else #else
abort (); abort ();
#endif #endif
break; break;
default: default:
return bfd_reloc_other; return bfd_reloc_other;
} }
return flag; return flag;
} }
@ -937,7 +938,7 @@ space consuming. For each target:
bfd_reloc_status_type bfd_reloc_status_type
_bfd_final_link_relocate (howto, input_bfd, input_section, contents, address, _bfd_final_link_relocate (howto, input_bfd, input_section, contents, address,
value, addend) value, addend)
const reloc_howto_type *howto; const reloc_howto_type *howto;
bfd *input_bfd; bfd *input_bfd;
asection *input_section; asection *input_section;
@ -975,7 +976,7 @@ _bfd_final_link_relocate (howto, input_bfd, input_section, contents, address,
if (howto->pcrel_offset) if (howto->pcrel_offset)
relocation -= address; relocation -= address;
} }
return _bfd_relocate_contents (howto, input_bfd, relocation, return _bfd_relocate_contents (howto, input_bfd, relocation,
contents + address); contents + address);
} }
@ -996,7 +997,7 @@ _bfd_relocate_contents (howto, input_bfd, relocation, location)
/* If the size is negative, negate RELOCATION. This isn't very /* If the size is negative, negate RELOCATION. This isn't very
general. */ general. */
if (howto->size < 0) if (howto->size < 0)
relocation = - relocation; relocation = -relocation;
/* Get the value we are going to relocate. */ /* Get the value we are going to relocate. */
size = bfd_get_reloc_size (howto); size = bfd_get_reloc_size (howto);
@ -1051,8 +1052,8 @@ _bfd_relocate_contents (howto, input_bfd, relocation, location)
signed_check = check; signed_check = check;
else else
signed_check = (check signed_check = (check
| ((bfd_vma) -1 | ((bfd_vma) - 1
&~ ((bfd_vma) -1 >> howto->rightshift))); & ~((bfd_vma) - 1 >> howto->rightshift)));
} }
/* Get the value from the object file. */ /* Get the value from the object file. */
@ -1067,8 +1068,8 @@ _bfd_relocate_contents (howto, input_bfd, relocation, location)
signed_add needs no adjustment to become negative in that signed_add needs no adjustment to become negative in that
case. */ case. */
signed_add = add; signed_add = add;
if ((add & (((~ howto->src_mask) >> 1) & howto->src_mask)) != 0) if ((add & (((~howto->src_mask) >> 1) & howto->src_mask)) != 0)
signed_add -= (((~ howto->src_mask) >> 1) & howto->src_mask) << 1; signed_add -= (((~howto->src_mask) >> 1) & howto->src_mask) << 1;
/* Add the value from the object file, shifted so that it is a /* Add the value from the object file, shifted so that it is a
straight number. */ straight number. */
@ -1088,8 +1089,8 @@ _bfd_relocate_contents (howto, input_bfd, relocation, location)
signed_check += add >> howto->bitpos; signed_check += add >> howto->bitpos;
else else
signed_check += ((add >> howto->bitpos) signed_check += ((add >> howto->bitpos)
| ((bfd_vma) -1 | ((bfd_vma) - 1
&~ ((bfd_vma) -1 >> howto->bitpos))); & ~((bfd_vma) - 1 >> howto->bitpos)));
} }
switch (howto->complain_on_overflow) switch (howto->complain_on_overflow)
@ -1098,7 +1099,7 @@ _bfd_relocate_contents (howto, input_bfd, relocation, location)
{ {
/* Assumes two's complement. */ /* Assumes two's complement. */
bfd_signed_vma reloc_signed_max = (1 << (howto->bitsize - 1)) - 1; bfd_signed_vma reloc_signed_max = (1 << (howto->bitsize - 1)) - 1;
bfd_signed_vma reloc_signed_min = ~ reloc_signed_max; bfd_signed_vma reloc_signed_min = ~reloc_signed_max;
if (signed_check > reloc_signed_max if (signed_check > reloc_signed_max
|| signed_check < reloc_signed_min) || signed_check < reloc_signed_min)
@ -1111,7 +1112,7 @@ _bfd_relocate_contents (howto, input_bfd, relocation, location)
overflow if howto->bitsize is the number of bits in overflow if howto->bitsize is the number of bits in
bfd_vma. */ bfd_vma. */
bfd_vma reloc_unsigned_max = bfd_vma reloc_unsigned_max =
(((1 << (howto->bitsize - 1)) - 1) << 1) | 1; (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
if (check > reloc_unsigned_max) if (check > reloc_unsigned_max)
overflow = true; overflow = true;
@ -1124,9 +1125,9 @@ _bfd_relocate_contents (howto, input_bfd, relocation, location)
bfd_vma. */ bfd_vma. */
bfd_vma reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1; bfd_vma reloc_bits = (((1 << (howto->bitsize - 1)) - 1) << 1) | 1;
if ((check &~ reloc_bits) != 0 if ((check & ~reloc_bits) != 0
&& (((bfd_vma) signed_check &~ reloc_bits) && (((bfd_vma) signed_check & ~reloc_bits)
!= (-1 &~ reloc_bits))) != (-1 & ~reloc_bits)))
overflow = true; overflow = true;
} }
break; break;
@ -1140,7 +1141,7 @@ _bfd_relocate_contents (howto, input_bfd, relocation, location)
relocation <<= (bfd_vma) howto->bitpos; relocation <<= (bfd_vma) howto->bitpos;
/* Add RELOCATION to the right bits of X. */ /* Add RELOCATION to the right bits of X. */
x = ((x &~ howto->dst_mask) x = ((x & ~howto->dst_mask)
| (((x & howto->src_mask) + relocation) & howto->dst_mask)); | (((x & howto->src_mask) + relocation) & howto->dst_mask));
/* Put the relocated value back in the object file. */ /* Put the relocated value back in the object file. */
@ -1176,7 +1177,7 @@ INODE
howto manager, , typedef arelent, Relocations howto manager, , typedef arelent, Relocations
SECTION SECTION
The howto manager The howto manager
When an application wants to create a relocation, but doesn't When an application wants to create a relocation, but doesn't
know what the target machine might call it, it can find out by know what the target machine might call it, it can find out by
@ -1200,12 +1201,12 @@ DESCRIPTION
CODE_FRAGMENT CODE_FRAGMENT
. .
.typedef enum bfd_reloc_code_real .typedef enum bfd_reloc_code_real
.{ .{
. {* Basic absolute relocations *} . {* Basic absolute relocations *}
. BFD_RELOC_64, . BFD_RELOC_64,
. BFD_RELOC_32, . BFD_RELOC_32,
. BFD_RELOC_16, . BFD_RELOC_16,
. BFD_RELOC_14, . BFD_RELOC_14,
. BFD_RELOC_8, . BFD_RELOC_8,
. .
@ -1494,15 +1495,15 @@ DESCRIPTION
const struct reloc_howto_struct * const struct reloc_howto_struct *
DEFUN(bfd_reloc_type_lookup,(abfd, code), bfd_reloc_type_lookup (abfd, code)
bfd *abfd AND bfd *abfd;
bfd_reloc_code_real_type code) bfd_reloc_code_real_type code;
{ {
return BFD_SEND (abfd, reloc_type_lookup, (abfd, code)); return BFD_SEND (abfd, reloc_type_lookup, (abfd, code));
} }
static reloc_howto_type bfd_howto_32 = static reloc_howto_type bfd_howto_32 =
HOWTO(0, 00,2,32,false,0,complain_overflow_bitfield,0,"VRT32", false,0xffffffff,0xffffffff,true); HOWTO (0, 00, 2, 32, false, 0, complain_overflow_bitfield, 0, "VRT32", false, 0xffffffff, 0xffffffff, true);
/* /*
@ -1511,8 +1512,7 @@ INTERNAL_FUNCTION
SYNOPSIS SYNOPSIS
const struct reloc_howto_struct *bfd_default_reloc_type_lookup const struct reloc_howto_struct *bfd_default_reloc_type_lookup
(bfd *abfd AND (bfd *abfd, bfd_reloc_code_real_type code);
bfd_reloc_code_real_type code);
DESCRIPTION DESCRIPTION
Provides a default relocation lookup routine for any architecture. Provides a default relocation lookup routine for any architecture.
@ -1521,29 +1521,30 @@ DESCRIPTION
*/ */
const struct reloc_howto_struct * const struct reloc_howto_struct *
DEFUN(bfd_default_reloc_type_lookup, (abfd, code), bfd_default_reloc_type_lookup (abfd, code)
bfd *abfd AND bfd *abfd;
bfd_reloc_code_real_type code) bfd_reloc_code_real_type code;
{ {
switch (code) switch (code)
{ {
case BFD_RELOC_CTOR: case BFD_RELOC_CTOR:
/* The type of reloc used in a ctor, which will be as wide as the /* The type of reloc used in a ctor, which will be as wide as the
address - so either a 64, 32, or 16 bitter. */ address - so either a 64, 32, or 16 bitter. */
switch (bfd_get_arch_info (abfd)->bits_per_address) { switch (bfd_get_arch_info (abfd)->bits_per_address)
case 64: {
BFD_FAIL(); case 64:
case 32: BFD_FAIL ();
return &bfd_howto_32; case 32:
case 16: return &bfd_howto_32;
BFD_FAIL(); case 16:
default: BFD_FAIL ();
BFD_FAIL(); default:
} BFD_FAIL ();
}
default: default:
BFD_FAIL(); BFD_FAIL ();
} }
return (const struct reloc_howto_struct *)NULL; return (const struct reloc_howto_struct *) NULL;
} }
@ -1556,7 +1557,7 @@ SYNOPSIS
(bfd *abfd, (bfd *abfd,
asection *section, asection *section,
struct bfd_link_info *, struct bfd_link_info *,
asymbol **symbols); boolean *);
DESCRIPTION DESCRIPTION
Provides default handling for relaxing for back ends which Provides default handling for relaxing for back ends which
@ -1565,15 +1566,16 @@ DESCRIPTION
/*ARGSUSED*/ /*ARGSUSED*/
boolean boolean
bfd_generic_relax_section (abfd, section, link_info, symbols) bfd_generic_relax_section (abfd, section, link_info, again)
bfd *abfd; bfd *abfd;
asection *section; asection *section;
struct bfd_link_info *link_info; struct bfd_link_info *link_info;
asymbol **symbols; boolean *again;
{ {
return false; *again = false;
return true;
} }
/* /*
INTERNAL_FUNCTION INTERNAL_FUNCTION
bfd_generic_get_relocated_section_contents bfd_generic_get_relocated_section_contents
@ -1607,95 +1609,101 @@ bfd_generic_get_relocated_section_contents (abfd, link_info, link_order, data,
bfd *input_bfd = link_order->u.indirect.section->owner; bfd *input_bfd = link_order->u.indirect.section->owner;
asection *input_section = link_order->u.indirect.section; asection *input_section = link_order->u.indirect.section;
size_t reloc_size = bfd_get_reloc_upper_bound(input_bfd, input_section); long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
arelent **reloc_vector = NULL; arelent **reloc_vector = NULL;
long reloc_count;
if (reloc_size < 0)
goto error_return;
reloc_vector = (arelent **) malloc (reloc_size); reloc_vector = (arelent **) malloc (reloc_size);
if (reloc_vector == NULL) if (reloc_vector == NULL && reloc_size != 0)
{ {
bfd_set_error (bfd_error_no_memory); bfd_set_error (bfd_error_no_memory);
goto error_return; goto error_return;
} }
/* read in the section */ /* read in the section */
if (!bfd_get_section_contents(input_bfd, if (!bfd_get_section_contents (input_bfd,
input_section, input_section,
(PTR) data, (PTR) data,
0, 0,
input_section->_raw_size)) input_section->_raw_size))
goto error_return; goto error_return;
/* We're not relaxing the section, so just copy the size info */ /* We're not relaxing the section, so just copy the size info */
input_section->_cooked_size = input_section->_raw_size; input_section->_cooked_size = input_section->_raw_size;
input_section->reloc_done = true; input_section->reloc_done = true;
if (!bfd_canonicalize_reloc (input_bfd, reloc_count = bfd_canonicalize_reloc (input_bfd,
input_section, input_section,
reloc_vector, reloc_vector,
symbols)) symbols);
if (reloc_count < 0)
goto error_return; goto error_return;
{ if (reloc_count > 0)
arelent **parent; {
for (parent = reloc_vector; * parent != (arelent *)NULL; arelent **parent;
parent++) for (parent = reloc_vector; *parent != (arelent *) NULL;
{ parent++)
char *error_message = (char *) NULL;
bfd_reloc_status_type r=
bfd_perform_relocation(input_bfd,
*parent,
(PTR) data,
input_section,
relocateable ? abfd : (bfd *) NULL,
&error_message);
if (relocateable)
{ {
asection *os = input_section->output_section; char *error_message = (char *) NULL;
bfd_reloc_status_type r =
bfd_perform_relocation (input_bfd,
*parent,
(PTR) data,
input_section,
relocateable ? abfd : (bfd *) NULL,
&error_message);
/* A partial link, so keep the relocs */ if (relocateable)
os->orelocation[os->reloc_count] = *parent; {
os->reloc_count++; asection *os = input_section->output_section;
/* A partial link, so keep the relocs */
os->orelocation[os->reloc_count] = *parent;
os->reloc_count++;
}
if (r != bfd_reloc_ok)
{
switch (r)
{
case bfd_reloc_undefined:
if (!((*link_info->callbacks->undefined_symbol)
(link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
input_bfd, input_section, (*parent)->address)))
goto error_return;
break;
case bfd_reloc_dangerous:
BFD_ASSERT (error_message != (char *) NULL);
if (!((*link_info->callbacks->reloc_dangerous)
(link_info, error_message, input_bfd, input_section,
(*parent)->address)))
goto error_return;
break;
case bfd_reloc_overflow:
if (!((*link_info->callbacks->reloc_overflow)
(link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
(*parent)->howto->name, (*parent)->addend,
input_bfd, input_section, (*parent)->address)))
goto error_return;
break;
case bfd_reloc_outofrange:
default:
abort ();
break;
}
}
} }
}
if (r != bfd_reloc_ok)
{
switch (r)
{
case bfd_reloc_undefined:
if (! ((*link_info->callbacks->undefined_symbol)
(link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
input_bfd, input_section, (*parent)->address)))
goto error_return;
break;
case bfd_reloc_dangerous:
BFD_ASSERT (error_message != (char *) NULL);
if (! ((*link_info->callbacks->reloc_dangerous)
(link_info, error_message, input_bfd, input_section,
(*parent)->address)))
goto error_return;
break;
case bfd_reloc_overflow:
if (! ((*link_info->callbacks->reloc_overflow)
(link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
(*parent)->howto->name, (*parent)->addend,
input_bfd, input_section, (*parent)->address)))
goto error_return;
break;
case bfd_reloc_outofrange:
default:
abort();
break;
}
}
}
}
if (reloc_vector != NULL) if (reloc_vector != NULL)
free (reloc_vector); free (reloc_vector);
return data; return data;
error_return: error_return:
if (reloc_vector != NULL) if (reloc_vector != NULL)
free (reloc_vector); free (reloc_vector);
return NULL; return NULL;

View File

@ -138,16 +138,16 @@ static bfd_target * som_object_p PARAMS ((bfd *));
static boolean som_write_object_contents PARAMS ((bfd *)); static boolean som_write_object_contents PARAMS ((bfd *));
static boolean som_slurp_string_table PARAMS ((bfd *)); static boolean som_slurp_string_table PARAMS ((bfd *));
static unsigned int som_slurp_symbol_table PARAMS ((bfd *)); static unsigned int som_slurp_symbol_table PARAMS ((bfd *));
static unsigned int som_get_symtab_upper_bound PARAMS ((bfd *)); static long som_get_symtab_upper_bound PARAMS ((bfd *));
static unsigned int som_canonicalize_reloc PARAMS ((bfd *, sec_ptr, static long som_canonicalize_reloc PARAMS ((bfd *, sec_ptr,
arelent **, asymbol **)); arelent **, asymbol **));
static unsigned int som_get_reloc_upper_bound PARAMS ((bfd *, sec_ptr)); static long som_get_reloc_upper_bound PARAMS ((bfd *, sec_ptr));
static unsigned int som_set_reloc_info PARAMS ((unsigned char *, unsigned int, static unsigned int som_set_reloc_info PARAMS ((unsigned char *, unsigned int,
arelent *, asection *, arelent *, asection *,
asymbol **, boolean)); asymbol **, boolean));
static boolean som_slurp_reloc_table PARAMS ((bfd *, asection *, static boolean som_slurp_reloc_table PARAMS ((bfd *, asection *,
asymbol **, boolean)); asymbol **, boolean));
static unsigned int som_get_symtab PARAMS ((bfd *, asymbol **)); static long som_get_symtab PARAMS ((bfd *, asymbol **));
static asymbol * som_make_empty_symbol PARAMS ((bfd *)); static asymbol * som_make_empty_symbol PARAMS ((bfd *));
static void som_print_symbol PARAMS ((bfd *, PTR, static void som_print_symbol PARAMS ((bfd *, PTR,
asymbol *, bfd_print_symbol_type)); asymbol *, bfd_print_symbol_type));
@ -3544,12 +3544,12 @@ som_slurp_string_table (abfd)
/* Return the amount of data (in bytes) required to hold the symbol /* Return the amount of data (in bytes) required to hold the symbol
table for this object. */ table for this object. */
static unsigned int static long
som_get_symtab_upper_bound (abfd) som_get_symtab_upper_bound (abfd)
bfd *abfd; bfd *abfd;
{ {
if (!som_slurp_symbol_table (abfd)) if (!som_slurp_symbol_table (abfd))
return 0; return -1;
return (bfd_get_symcount (abfd) + 1) * (sizeof (asymbol *)); return (bfd_get_symcount (abfd) + 1) * (sizeof (asymbol *));
} }
@ -3774,7 +3774,7 @@ som_slurp_symbol_table (abfd)
/* Canonicalize a SOM symbol table. Return the number of entries /* Canonicalize a SOM symbol table. Return the number of entries
in the symbol table. */ in the symbol table. */
static unsigned int static long
som_get_symtab (abfd, location) som_get_symtab (abfd, location)
bfd *abfd; bfd *abfd;
asymbol **location; asymbol **location;
@ -3783,7 +3783,7 @@ som_get_symtab (abfd, location)
som_symbol_type *symbase; som_symbol_type *symbase;
if (!som_slurp_symbol_table (abfd)) if (!som_slurp_symbol_table (abfd))
return 0; return -1;
i = bfd_get_symcount (abfd); i = bfd_get_symcount (abfd);
symbase = obj_som_symtab (abfd); symbase = obj_som_symtab (abfd);
@ -4169,7 +4169,7 @@ som_slurp_reloc_table (abfd, section, symbols, just_count)
/* Return the number of bytes required to store the relocation /* Return the number of bytes required to store the relocation
information associated with the given section. */ information associated with the given section. */
static unsigned int static long
som_get_reloc_upper_bound (abfd, asect) som_get_reloc_upper_bound (abfd, asect)
bfd *abfd; bfd *abfd;
sec_ptr asect; sec_ptr asect;
@ -4178,18 +4178,18 @@ som_get_reloc_upper_bound (abfd, asect)
and parse it to determine how many relocations exist. */ and parse it to determine how many relocations exist. */
if (asect->flags & SEC_RELOC) if (asect->flags & SEC_RELOC)
{ {
if (som_slurp_reloc_table (abfd, asect, NULL, true)) if (! som_slurp_reloc_table (abfd, asect, NULL, true))
return (asect->reloc_count + 1) * sizeof (arelent); return false;
return (asect->reloc_count + 1) * sizeof (arelent);
} }
/* Either there are no relocations or an error occurred while /* There are no relocations. */
reading and parsing the relocation stream. */
return 0; return 0;
} }
/* Convert relocations from SOM (external) form into BFD internal /* Convert relocations from SOM (external) form into BFD internal
form. Return the number of relocations. */ form. Return the number of relocations. */
static unsigned int static long
som_canonicalize_reloc (abfd, section, relptr, symbols) som_canonicalize_reloc (abfd, section, relptr, symbols)
bfd *abfd; bfd *abfd;
sec_ptr section; sec_ptr section;
@ -4200,12 +4200,12 @@ som_canonicalize_reloc (abfd, section, relptr, symbols)
int count; int count;
if (som_slurp_reloc_table (abfd, section, symbols, false) == false) if (som_slurp_reloc_table (abfd, section, symbols, false) == false)
return 0; return -1;
count = section->reloc_count; count = section->reloc_count;
tblptr = section->relocation; tblptr = section->relocation;
if (tblptr == (arelent *) NULL) if (tblptr == (arelent *) NULL)
return 0; return -1;
while (count--) while (count--)
*relptr++ = tblptr++; *relptr++ = tblptr++;

View File

@ -859,16 +859,17 @@ srec_make_empty_symbol (abfd)
return new; return new;
} }
static unsigned int static long
srec_get_symtab_upper_bound (abfd) srec_get_symtab_upper_bound (abfd)
bfd *abfd; bfd *abfd;
{ {
/* Read in all the info */ /* Read in all the info */
srec_get_section_contents (abfd, abfd->sections, 0, 0, 0); if (! srec_get_section_contents (abfd, abfd->sections, 0, 0, 0))
return -1;
return (bfd_get_symcount (abfd) + 1) * (sizeof (asymbol *)); return (bfd_get_symcount (abfd) + 1) * (sizeof (asymbol *));
} }
static unsigned int static long
srec_get_symtab (abfd, alocation) srec_get_symtab (abfd, alocation)
bfd *abfd; bfd *abfd;
asymbol **alocation; asymbol **alocation;
@ -919,8 +920,8 @@ srec_print_symbol (ignore_abfd, afile, symbol, how)
#define FOO PROTO #define FOO PROTO
#define srec_new_section_hook (FOO(boolean, (*), (bfd *, asection *)))bfd_true #define srec_new_section_hook (FOO(boolean, (*), (bfd *, asection *)))bfd_true
#define srec_get_reloc_upper_bound (FOO(unsigned int, (*),(bfd*, asection *)))bfd_false #define srec_get_reloc_upper_bound (FOO(long, (*),(bfd*, asection *)))bfd_0l
#define srec_canonicalize_reloc (FOO(unsigned int, (*),(bfd*,asection *, arelent **, asymbol **))) bfd_0 #define srec_canonicalize_reloc (FOO(long, (*),(bfd*,asection *, arelent **, asymbol **))) bfd_0l
@ -951,6 +952,12 @@ srec_print_symbol (ignore_abfd, afile, symbol, how)
#define srec_bfd_link_add_symbols _bfd_generic_link_add_symbols #define srec_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define srec_bfd_final_link _bfd_generic_final_link #define srec_bfd_final_link _bfd_generic_final_link
#define srec_bfd_copy_private_section_data \
((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_true)
#define srec_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
#define srec_bfd_is_local_label bfd_generic_is_local_label
bfd_target srec_vec = bfd_target srec_vec =
{ {
"srec", /* name */ "srec", /* name */

View File

@ -275,12 +275,12 @@ Standard stuff.
Symbols and relocations. Symbols and relocations.
. unsigned int (*_get_symtab_upper_bound) PARAMS ((bfd *)); . long (*_bfd_get_symtab_upper_bound) PARAMS ((bfd *));
. unsigned int (*_bfd_canonicalize_symtab) PARAMS ((bfd *, . long (*_bfd_canonicalize_symtab) PARAMS ((bfd *,
. struct symbol_cache_entry **)); . struct symbol_cache_entry **));
. unsigned int (*_get_reloc_upper_bound) PARAMS ((bfd *, sec_ptr)); . long (*_get_reloc_upper_bound) PARAMS ((bfd *, sec_ptr));
. unsigned int (*_bfd_canonicalize_reloc) PARAMS ((bfd *, sec_ptr, arelent **, . long (*_bfd_canonicalize_reloc) PARAMS ((bfd *, sec_ptr, arelent **,
. struct symbol_cache_entry **)); . struct symbol_cache_entry **));
. struct symbol_cache_entry * . struct symbol_cache_entry *
. (*_bfd_make_empty_symbol) PARAMS ((bfd *)); . (*_bfd_make_empty_symbol) PARAMS ((bfd *));
. void (*_bfd_print_symbol) PARAMS ((bfd *, PTR, . void (*_bfd_print_symbol) PARAMS ((bfd *, PTR,

View File

@ -358,7 +358,7 @@ find_chunk (abfd, vma)
if (!sname || !d) if (!sname || !d)
{ {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
return NULL; return NULL;
} }
@ -422,7 +422,7 @@ first_phase (abfd, type, src)
if (!n) if (!n)
{ {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
abort(); /* FIXME */ abort(); /* FIXME */
} }
memcpy (n, sym, len + 1); memcpy (n, sym, len + 1);
@ -456,7 +456,7 @@ first_phase (abfd, type, src)
if (!new) if (!new)
{ {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
abort(); /* FIXME */ abort(); /* FIXME */
} }
new->symbol.the_bfd = abfd; new->symbol.the_bfd = abfd;
@ -469,7 +469,7 @@ first_phase (abfd, type, src)
new->symbol.name = bfd_alloc (abfd, len + 1); new->symbol.name = bfd_alloc (abfd, len + 1);
if (!new->symbol.name) if (!new->symbol.name)
{ {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
abort(); /* FIXME */ abort(); /* FIXME */
} }
memcpy ((char *) (new->symbol.name), sym, len + 1); memcpy ((char *) (new->symbol.name), sym, len + 1);
@ -533,7 +533,7 @@ static void
} }
unsigned int long
tekhex_get_symtab (abfd, table) tekhex_get_symtab (abfd, table)
bfd *abfd; bfd *abfd;
asymbol **table; asymbol **table;
@ -552,7 +552,7 @@ tekhex_get_symtab (abfd, table)
return bfd_get_symcount (abfd); return bfd_get_symcount (abfd);
} }
unsigned int long
tekhex_get_symtab_upper_bound (abfd) tekhex_get_symtab_upper_bound (abfd)
bfd *abfd; bfd *abfd;
{ {
@ -568,7 +568,7 @@ tekhex_mkobject (abfd)
if (!tdata) if (!tdata)
{ {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
return false; return false;
} }
abfd->tdata.tekhex_data = tdata; abfd->tdata.tekhex_data = tdata;
@ -913,7 +913,7 @@ tekhex_write_object_contents (abfd)
break; break;
case 'C': case 'C':
case 'U': case 'U':
bfd_error = wrong_format; bfd_set_error (bfd_error_wrong_format);
return false; return false;
} }
@ -946,7 +946,7 @@ tekhex_make_empty_symbol (abfd)
if (!new) if (!new)
{ {
bfd_error = no_memory; bfd_set_error (bfd_error_no_memory);
return NULL; return NULL;
} }
new->symbol.the_bfd = abfd; new->symbol.the_bfd = abfd;
@ -995,8 +995,8 @@ tekhex_print_symbol (ignore_abfd, filep, symbol, how)
#define FOO PROTO #define FOO PROTO
#define tekhex_new_section_hook (FOO(boolean, (*), (bfd *, asection *)))bfd_true #define tekhex_new_section_hook (FOO(boolean, (*), (bfd *, asection *)))bfd_true
#define tekhex_get_reloc_upper_bound (FOO(unsigned int, (*),(bfd*, asection *)))bfd_false #define tekhex_get_reloc_upper_bound (FOO(long, (*),(bfd*, asection *)))bfd_0l
#define tekhex_canonicalize_reloc (FOO(unsigned int, (*),(bfd*,asection *, arelent **, asymbol **))) bfd_0 #define tekhex_canonicalize_reloc (FOO(long, (*),(bfd*,asection *, arelent **, asymbol **))) bfd_0l
#define tekhex_openr_next_archived_file (FOO(bfd *, (*), (bfd*,bfd*))) bfd_nullvoidptr #define tekhex_openr_next_archived_file (FOO(bfd *, (*), (bfd*,bfd*))) bfd_nullvoidptr
#define tekhex_find_nearest_line (FOO(boolean, (*),(bfd*,asection*,asymbol**,bfd_vma, CONST char**, CONST char**, unsigned int *))) bfd_false #define tekhex_find_nearest_line (FOO(boolean, (*),(bfd*,asection*,asymbol**,bfd_vma, CONST char**, CONST char**, unsigned int *))) bfd_false
@ -1023,6 +1023,11 @@ tekhex_print_symbol (ignore_abfd, filep, symbol, how)
#define tekhex_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define tekhex_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
#define tekhex_bfd_link_add_symbols _bfd_generic_link_add_symbols #define tekhex_bfd_link_add_symbols _bfd_generic_link_add_symbols
#define tekhex_bfd_final_link _bfd_generic_final_link #define tekhex_bfd_final_link _bfd_generic_final_link
#define tekhex_bfd_copy_private_section_data \
((boolean (*) PARAMS ((bfd *, asection *, bfd *, asection *))) bfd_true)
#define tekhex_bfd_copy_private_bfd_data \
((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
#define tekhex_bfd_is_local_label bfd_generic_is_local_label
bfd_target tekhex_vec = bfd_target tekhex_vec =
{ {

View File

@ -147,7 +147,7 @@ trad_unix_core_file_p (abfd)
/* Allocate both the upage and the struct core_data at once, so /* Allocate both the upage and the struct core_data at once, so
a single free() will free them both. */ a single free() will free them both. */
rawptr = (struct trad_core_struct *) rawptr = (struct trad_core_struct *)
bfd_zmalloc (abfd, sizeof (struct trad_core_struct)); bfd_zmalloc (sizeof (struct trad_core_struct));
if (rawptr == NULL) { if (rawptr == NULL) {
bfd_set_error (bfd_error_no_memory); bfd_set_error (bfd_error_no_memory);
return 0; return 0;
@ -297,13 +297,13 @@ trad_unix_core_file_matches_executable_p (core_bfd, exec_bfd)
#define trad_unix_get_section_contents bfd_generic_get_section_contents #define trad_unix_get_section_contents bfd_generic_get_section_contents
#define trad_unix_new_section_hook (boolean (*) PARAMS \ #define trad_unix_new_section_hook (boolean (*) PARAMS \
((bfd *, sec_ptr))) bfd_true ((bfd *, sec_ptr))) bfd_true
#define trad_unix_get_symtab_upper_bound bfd_0u #define trad_unix_get_symtab_upper_bound bfd_0l
#define trad_unix_get_symtab (unsigned int (*) PARAMS \ #define trad_unix_get_symtab (long (*) PARAMS \
((bfd *, struct symbol_cache_entry **))) bfd_0u ((bfd *, struct symbol_cache_entry **))) bfd_0l
#define trad_unix_get_reloc_upper_bound (unsigned int (*) PARAMS \ #define trad_unix_get_reloc_upper_bound (long (*) PARAMS \
((bfd *, sec_ptr))) bfd_0u ((bfd *, sec_ptr))) bfd_0l
#define trad_unix_canonicalize_reloc (unsigned int (*) PARAMS \ #define trad_unix_canonicalize_reloc (long (*) PARAMS \
((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0u ((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0l
#define trad_unix_make_empty_symbol (struct symbol_cache_entry * \ #define trad_unix_make_empty_symbol (struct symbol_cache_entry * \
(*) PARAMS ((bfd *))) bfd_false (*) PARAMS ((bfd *))) bfd_false
#define trad_unix_print_symbol (void (*) PARAMS \ #define trad_unix_print_symbol (void (*) PARAMS \