mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-24 04:00:07 +08:00
* bfd.c (bfd_get_gp_size): Added support for ELF.
This commit is contained in:
@ -1,5 +1,7 @@
|
|||||||
Fri Jan 21 01:11:55 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
Fri Jan 21 01:11:55 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
||||||
|
|
||||||
|
* bfd.c (bfd_get_gp_size): Added support for ELF.
|
||||||
|
|
||||||
* syms.c (BSF_DYNAMIC): New symbol flag.
|
* syms.c (BSF_DYNAMIC): New symbol flag.
|
||||||
(bfd_print_symbol_vandf): Print it.
|
(bfd_print_symbol_vandf): Print it.
|
||||||
* bfd-in2.h: Rebuilt.
|
* bfd-in2.h: Rebuilt.
|
||||||
|
123
bfd/bfd.c
123
bfd/bfd.c
@ -23,7 +23,7 @@ SECTION
|
|||||||
<<typedef bfd>>
|
<<typedef bfd>>
|
||||||
|
|
||||||
A BFD has type <<bfd>>; objects of this type are the
|
A BFD has type <<bfd>>; objects of this type are the
|
||||||
cornerstone of any application using <<libbfd>>. Using BFD
|
cornerstone of any application using BFD. Using BFD
|
||||||
consists of making references though the BFD and to data in the BFD.
|
consists of making references though the BFD and to data in the BFD.
|
||||||
|
|
||||||
Here is the structure that defines the type <<bfd>>. It
|
Here is the structure that defines the type <<bfd>>. It
|
||||||
@ -136,6 +136,13 @@ CODE_FRAGMENT
|
|||||||
. struct _bfd *archive_head; {* The first BFD in the archive. *}
|
. struct _bfd *archive_head; {* The first BFD in the archive. *}
|
||||||
. boolean has_armap;
|
. boolean has_armap;
|
||||||
.
|
.
|
||||||
|
. {* A chain of BFD structures involved in a link. *}
|
||||||
|
. struct _bfd *link_next;
|
||||||
|
.
|
||||||
|
. {* A field used by _bfd_generic_link_add_archive_symbols. This will
|
||||||
|
. be used only for archive elements. *}
|
||||||
|
. int archive_pass;
|
||||||
|
.
|
||||||
. {* Used by the back end to hold private data. *}
|
. {* Used by the back end to hold private data. *}
|
||||||
.
|
.
|
||||||
. union
|
. union
|
||||||
@ -157,6 +164,7 @@ CODE_FRAGMENT
|
|||||||
. struct trad_core_struct *trad_core_data;
|
. struct trad_core_struct *trad_core_data;
|
||||||
. struct som_data_struct *som_data;
|
. struct som_data_struct *som_data;
|
||||||
. struct hpux_core_struct *hpux_core_data;
|
. struct hpux_core_struct *hpux_core_data;
|
||||||
|
. struct hppabsd_core_struct *hppabsd_core_data;
|
||||||
. 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;
|
||||||
@ -168,15 +176,13 @@ CODE_FRAGMENT
|
|||||||
.
|
.
|
||||||
. {* Where all the allocated stuff under this BFD goes *}
|
. {* Where all the allocated stuff under this BFD goes *}
|
||||||
. struct obstack memory;
|
. struct obstack memory;
|
||||||
.
|
|
||||||
. {* Is this really needed in addition to usrdata? *}
|
|
||||||
. asymbol **ld_symbols;
|
|
||||||
.};
|
.};
|
||||||
.
|
.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "bfd.h"
|
#include "bfd.h"
|
||||||
#include "sysdep.h"
|
#include "sysdep.h"
|
||||||
|
#include "bfdlink.h"
|
||||||
#include "libbfd.h"
|
#include "libbfd.h"
|
||||||
#include "coff/internal.h"
|
#include "coff/internal.h"
|
||||||
#include "coff/sym.h"
|
#include "coff/sym.h"
|
||||||
@ -201,7 +207,7 @@ bfd_ec bfd_error = no_error;
|
|||||||
CONST char *CONST bfd_errmsgs[] = {
|
CONST char *CONST bfd_errmsgs[] = {
|
||||||
"No error",
|
"No error",
|
||||||
"System call error",
|
"System call error",
|
||||||
"Invalid target",
|
"Invalid bfd target",
|
||||||
"File in wrong format",
|
"File in wrong format",
|
||||||
"Invalid operation",
|
"Invalid operation",
|
||||||
"Memory exhausted",
|
"Memory exhausted",
|
||||||
@ -220,62 +226,6 @@ CONST char *CONST bfd_errmsgs[] = {
|
|||||||
"#<Invalid error code>"
|
"#<Invalid error code>"
|
||||||
};
|
};
|
||||||
|
|
||||||
static
|
|
||||||
void
|
|
||||||
DEFUN(bfd_nonrepresentable_section,(abfd, name),
|
|
||||||
CONST bfd * CONST abfd AND
|
|
||||||
CONST char * CONST name)
|
|
||||||
{
|
|
||||||
fprintf(stderr,
|
|
||||||
"bfd error writing file %s, format %s can't represent section %s\n",
|
|
||||||
abfd->filename,
|
|
||||||
abfd->xvec->name,
|
|
||||||
name);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*ARGSUSED*/
|
|
||||||
static
|
|
||||||
void
|
|
||||||
DEFUN(bfd_undefined_symbol,(relent, seclet),
|
|
||||||
CONST arelent *relent AND
|
|
||||||
CONST struct bfd_seclet *seclet)
|
|
||||||
{
|
|
||||||
asymbol *symbol = *(relent->sym_ptr_ptr);
|
|
||||||
fprintf(stderr, "bfd error relocating, symbol %s is undefined\n",
|
|
||||||
symbol->name);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
/*ARGSUSED*/
|
|
||||||
static
|
|
||||||
void
|
|
||||||
DEFUN(bfd_reloc_value_truncated,(relent, seclet),
|
|
||||||
CONST arelent *relent AND
|
|
||||||
struct bfd_seclet *seclet)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "bfd error relocating, value truncated\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
/*ARGSUSED*/
|
|
||||||
static
|
|
||||||
void
|
|
||||||
DEFUN(bfd_reloc_is_dangerous,(relent, seclet),
|
|
||||||
CONST arelent *relent AND
|
|
||||||
CONST struct bfd_seclet *seclet)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "bfd error relocating, dangerous\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
bfd_error_vector_type bfd_error_vector =
|
|
||||||
{
|
|
||||||
bfd_nonrepresentable_section ,
|
|
||||||
bfd_undefined_symbol,
|
|
||||||
bfd_reloc_value_truncated,
|
|
||||||
bfd_reloc_is_dangerous,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
CONST char *
|
CONST char *
|
||||||
bfd_errmsg (error_tag)
|
bfd_errmsg (error_tag)
|
||||||
bfd_ec error_tag;
|
bfd_ec error_tag;
|
||||||
@ -293,16 +243,6 @@ bfd_errmsg (error_tag)
|
|||||||
return bfd_errmsgs [(int)error_tag];
|
return bfd_errmsgs [(int)error_tag];
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
DEFUN (bfd_default_error_trap, (error_tag),
|
|
||||||
bfd_ec error_tag)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "bfd assert fail (%s)\n", bfd_errmsg(error_tag));
|
|
||||||
}
|
|
||||||
|
|
||||||
void (*bfd_error_trap) PARAMS ((bfd_ec)) = bfd_default_error_trap;
|
|
||||||
void (*bfd_error_nonrepresentabltrap) PARAMS ((bfd_ec)) = bfd_default_error_trap;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
DEFUN(bfd_perror,(message),
|
DEFUN(bfd_perror,(message),
|
||||||
CONST char *message)
|
CONST char *message)
|
||||||
@ -425,12 +365,12 @@ DESCRIPTION
|
|||||||
Set the flag word in the BFD @var{abfd} to the value @var{flags}.
|
Set the flag word in the BFD @var{abfd} to the value @var{flags}.
|
||||||
|
|
||||||
Possible errors are:
|
Possible errors are:
|
||||||
o wrong_format - The target bfd was not of object format.
|
o <<wrong_format>> - The target bfd was not of object format.
|
||||||
o invalid_operation - The target bfd was open for reading.
|
o <<invalid_operation>> - The target bfd was open for reading.
|
||||||
o invalid_operation -
|
o <<invalid_operation>> -
|
||||||
The flag word contained a bit which was not applicable to the
|
The flag word contained a bit which was not applicable to the
|
||||||
type of file. E.g., an attempt was made to set the D_PAGED bit
|
type of file. E.g., an attempt was made to set the <<D_PAGED>> bit
|
||||||
on a bfd format which does not support demand paging.
|
on a BFD format which does not support demand paging.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -578,7 +518,7 @@ SYNOPSIS
|
|||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
Return the maximum size of objects to be optimized using the GP
|
Return the maximum size of objects to be optimized using the GP
|
||||||
register under MIPS ECOFF. This is typically set by the -G
|
register under MIPS ECOFF. This is typically set by the <<-G>>
|
||||||
argument to the compiler, assembler or linker.
|
argument to the compiler, assembler or linker.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -588,6 +528,8 @@ bfd_get_gp_size (abfd)
|
|||||||
{
|
{
|
||||||
if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
|
if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
|
||||||
return ecoff_data (abfd)->gp_size;
|
return ecoff_data (abfd)->gp_size;
|
||||||
|
else if (abfd->xvec->flavour == bfd_target_elf_flavour)
|
||||||
|
return elf_gp_size (abfd);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -601,7 +543,7 @@ SYNOPSIS
|
|||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
Set the maximum size of objects to be optimized using the GP
|
Set the maximum size of objects to be optimized using the GP
|
||||||
register under ECOFF or MIPS ELF. This is typically set by
|
register under ECOFF or MIPS ELF. This is typically set by
|
||||||
the -G argument to the compiler, assembler or linker.
|
the <<-G>> argument to the compiler, assembler or linker.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -624,9 +566,9 @@ SYNOPSIS
|
|||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
Convert, like <<strtoul>>, a numerical expression
|
Convert, like <<strtoul>>, a numerical expression
|
||||||
@var{string} into a bfd_vma integer, and returns that integer.
|
@var{string} into a <<bfd_vma>> integer, and return that integer.
|
||||||
(Though without as many bells and whistles as <<strtoul>>.)
|
(Though without as many bells and whistles as <<strtoul>>.)
|
||||||
The expression is assumed to be unsigned (i.e. positive).
|
The expression is assumed to be unsigned (i.e., positive).
|
||||||
If given a @var{base}, it is used as the base for conversion.
|
If given a @var{base}, it is used as the base for conversion.
|
||||||
A base of 0 causes the function to interpret the string
|
A base of 0 causes the function to interpret the string
|
||||||
in hex if a leading "0x" or "0X" is found, otherwise
|
in hex if a leading "0x" or "0X" is found, otherwise
|
||||||
@ -719,13 +661,22 @@ DESCRIPTION
|
|||||||
.#define bfd_set_arch_mach(abfd, arch, mach)\
|
.#define bfd_set_arch_mach(abfd, arch, mach)\
|
||||||
. BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
|
. BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
|
||||||
.
|
.
|
||||||
.#define bfd_get_relocated_section_contents(abfd, seclet, data, relocateable) \
|
.#define bfd_get_relocated_section_contents(abfd, link_info, link_order, data, relocateable, symbols) \
|
||||||
. BFD_SEND (abfd, _bfd_get_relocated_section_contents, (abfd, seclet, data, relocateable))
|
. BFD_SEND (abfd, _bfd_get_relocated_section_contents, \
|
||||||
|
. (abfd, link_info, link_order, data, relocateable, symbols))
|
||||||
.
|
.
|
||||||
.#define bfd_relax_section(abfd, section, symbols) \
|
.#define bfd_relax_section(abfd, section, link_info, symbols) \
|
||||||
. BFD_SEND (abfd, _bfd_relax_section, (abfd, section, symbols))
|
. BFD_SEND (abfd, _bfd_relax_section, \
|
||||||
|
. (abfd, section, link_info, symbols))
|
||||||
|
.
|
||||||
|
.#define bfd_link_hash_table_create(abfd) \
|
||||||
|
. BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
|
||||||
|
.
|
||||||
|
.#define bfd_link_add_symbols(abfd, info) \
|
||||||
|
. BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
|
||||||
|
.
|
||||||
|
.#define bfd_final_link(abfd, info) \
|
||||||
|
. BFD_SEND (abfd, _bfd_final_link, (abfd, info))
|
||||||
.
|
.
|
||||||
.#define bfd_seclet_link(abfd, data, relocateable) \
|
|
||||||
. BFD_SEND (abfd, _bfd_seclet_link, (abfd, data, relocateable))
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user