mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-25 05:00:01 +00:00
2000-11-30 Kazu Hirata <kazu@hxi.com>
* xcofflink.c: Fix formatting.
This commit is contained in:
parent
be5a57e1c9
commit
fbc4fff4c6
@ -1,3 +1,7 @@
|
||||
2000-11-30 Kazu Hirata <kazu@hxi.com>
|
||||
|
||||
* xcofflink.c: Fix formatting.
|
||||
|
||||
2000-11-28 Kazu Hirata <kazu@hxi.com>
|
||||
|
||||
* aoutx.h: Fix formatting.
|
||||
|
171
bfd/xcofflink.c
171
bfd/xcofflink.c
@ -67,8 +67,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* The remaining words of global linkage code. */
|
||||
|
||||
static unsigned long xcoff_glink_code[] =
|
||||
{
|
||||
static unsigned long xcoff_glink_code[] = {
|
||||
0x90410014, /* stw r2,20(r1) */
|
||||
0x800c0000, /* lwz r0,0(r12) */
|
||||
0x804c0004, /* lwz r2,4(r12) */
|
||||
@ -90,8 +89,7 @@ static unsigned long xcoff_glink_code[] =
|
||||
/* The ldhdr structure. This appears at the start of the .loader
|
||||
section. */
|
||||
|
||||
struct internal_ldhdr
|
||||
{
|
||||
struct internal_ldhdr {
|
||||
/* The version number: currently always 1. */
|
||||
unsigned long l_version;
|
||||
/* The number of symbol table entries. */
|
||||
@ -112,8 +110,7 @@ struct internal_ldhdr
|
||||
bfd_size_type l_stoff;
|
||||
};
|
||||
|
||||
struct external_ldhdr
|
||||
{
|
||||
struct external_ldhdr {
|
||||
bfd_byte l_version[4];
|
||||
bfd_byte l_nsyms[4];
|
||||
bfd_byte l_nreloc[4];
|
||||
@ -129,21 +126,18 @@ struct external_ldhdr
|
||||
/* The ldsym structure. This is used to represent a symbol in the
|
||||
.loader section. */
|
||||
|
||||
struct internal_ldsym
|
||||
{
|
||||
union
|
||||
{
|
||||
/* The symbol name if <= SYMNMLEN characters. */
|
||||
char _l_name[SYMNMLEN];
|
||||
struct
|
||||
{
|
||||
/* Zero if the symbol name is more than SYMNMLEN characters. */
|
||||
long _l_zeroes;
|
||||
/* The offset in the string table if the symbol name is more
|
||||
than SYMNMLEN characters. */
|
||||
long _l_offset;
|
||||
} _l_l;
|
||||
} _l;
|
||||
struct internal_ldsym {
|
||||
union {
|
||||
/* The symbol name if <= SYMNMLEN characters. */
|
||||
char _l_name[SYMNMLEN];
|
||||
struct {
|
||||
/* Zero if the symbol name is more than SYMNMLEN characters. */
|
||||
long _l_zeroes;
|
||||
/* The offset in the string table if the symbol name is more
|
||||
than SYMNMLEN characters. */
|
||||
long _l_offset;
|
||||
} _l_l;
|
||||
} _l;
|
||||
/* The symbol value. */
|
||||
bfd_vma l_value;
|
||||
/* The symbol section number. */
|
||||
@ -158,17 +152,14 @@ struct internal_ldsym
|
||||
bfd_size_type l_parm;
|
||||
};
|
||||
|
||||
struct external_ldsym
|
||||
{
|
||||
union
|
||||
{
|
||||
bfd_byte _l_name[SYMNMLEN];
|
||||
struct
|
||||
{
|
||||
bfd_byte _l_zeroes[4];
|
||||
bfd_byte _l_offset[4];
|
||||
} _l_l;
|
||||
} _l;
|
||||
struct external_ldsym {
|
||||
union {
|
||||
bfd_byte _l_name[SYMNMLEN];
|
||||
struct {
|
||||
bfd_byte _l_zeroes[4];
|
||||
bfd_byte _l_offset[4];
|
||||
} _l_l;
|
||||
} _l;
|
||||
bfd_byte l_value[4];
|
||||
bfd_byte l_scnum[2];
|
||||
bfd_byte l_smtype[1];
|
||||
@ -192,8 +183,7 @@ struct external_ldsym
|
||||
/* The ldrel structure. This is used to represent a reloc in the
|
||||
.loader section. */
|
||||
|
||||
struct internal_ldrel
|
||||
{
|
||||
struct internal_ldrel {
|
||||
/* The reloc address. */
|
||||
bfd_vma l_vaddr;
|
||||
/* The symbol table index in the .loader section symbol table. */
|
||||
@ -204,8 +194,7 @@ struct internal_ldrel
|
||||
short l_rsecnm;
|
||||
};
|
||||
|
||||
struct external_ldrel
|
||||
{
|
||||
struct external_ldrel {
|
||||
bfd_byte l_vaddr[4];
|
||||
bfd_byte l_symndx[4];
|
||||
bfd_byte l_rtype[2];
|
||||
@ -216,8 +205,7 @@ struct external_ldrel
|
||||
|
||||
/* The list of import files. */
|
||||
|
||||
struct xcoff_import_file
|
||||
{
|
||||
struct xcoff_import_file {
|
||||
/* The next entry in the list. */
|
||||
struct xcoff_import_file *next;
|
||||
/* The path. */
|
||||
@ -230,8 +218,7 @@ struct xcoff_import_file
|
||||
|
||||
/* An entry in the XCOFF linker hash table. */
|
||||
|
||||
struct xcoff_link_hash_entry
|
||||
{
|
||||
struct xcoff_link_hash_entry {
|
||||
struct bfd_link_hash_entry root;
|
||||
|
||||
/* Symbol index in output file. Set to -1 initially. Set to -2 if
|
||||
@ -242,15 +229,14 @@ struct xcoff_link_hash_entry
|
||||
section which holds it. */
|
||||
asection *toc_section;
|
||||
|
||||
union
|
||||
{
|
||||
/* If we have created a TOC entry (the XCOFF_SET_TOC flag is
|
||||
set), this is the offset in toc_section. */
|
||||
bfd_vma toc_offset;
|
||||
/* If the TOC entry comes from an input file, this is set to the
|
||||
symbol index of the C_HIDEXT XMC_TC or XMC_TD symbol. */
|
||||
long toc_indx;
|
||||
} u;
|
||||
union {
|
||||
/* If we have created a TOC entry (the XCOFF_SET_TOC flag is set),
|
||||
this is the offset in toc_section. */
|
||||
bfd_vma toc_offset;
|
||||
/* If the TOC entry comes from an input file, this is set to the
|
||||
symbol index of the C_HIDEXT XMC_TC or XMC_TD symbol. */
|
||||
long toc_indx;
|
||||
} u;
|
||||
|
||||
/* If this symbol is a function entry point which is called, this
|
||||
field holds a pointer to the function descriptor. If this symbol
|
||||
@ -303,8 +289,7 @@ struct xcoff_link_hash_entry
|
||||
|
||||
/* The XCOFF linker hash table. */
|
||||
|
||||
struct xcoff_link_hash_table
|
||||
{
|
||||
struct xcoff_link_hash_table {
|
||||
struct bfd_link_hash_table root;
|
||||
|
||||
/* The .debug string hash table. We need to compute this while
|
||||
@ -349,12 +334,11 @@ struct xcoff_link_hash_table
|
||||
boolean gc;
|
||||
|
||||
/* A linked list of symbols for which we have size information. */
|
||||
struct xcoff_link_size_list
|
||||
{
|
||||
struct xcoff_link_size_list *next;
|
||||
struct xcoff_link_hash_entry *h;
|
||||
bfd_size_type size;
|
||||
} *size_list;
|
||||
struct xcoff_link_size_list {
|
||||
struct xcoff_link_size_list *next;
|
||||
struct xcoff_link_hash_entry *h;
|
||||
bfd_size_type size;
|
||||
} *size_list;
|
||||
|
||||
/* Magic sections: _text, _etext, _data, _edata, _end, end. */
|
||||
asection *special_sections[6];
|
||||
@ -363,8 +347,7 @@ struct xcoff_link_hash_table
|
||||
/* Information we keep for each section in the output file during the
|
||||
final link phase. */
|
||||
|
||||
struct xcoff_link_section_info
|
||||
{
|
||||
struct xcoff_link_section_info {
|
||||
/* The relocs to be output. */
|
||||
struct internal_reloc *relocs;
|
||||
/* For each reloc against a global symbol whose index was not known
|
||||
@ -374,18 +357,16 @@ struct xcoff_link_section_info
|
||||
index of the TOC symbol is not known when the reloc was handled,
|
||||
an entry is added to this linked list. This is not an array,
|
||||
like rel_hashes, because this case is quite uncommon. */
|
||||
struct xcoff_toc_rel_hash
|
||||
{
|
||||
struct xcoff_toc_rel_hash *next;
|
||||
struct xcoff_link_hash_entry *h;
|
||||
struct internal_reloc *rel;
|
||||
} *toc_rel_hashes;
|
||||
struct xcoff_toc_rel_hash {
|
||||
struct xcoff_toc_rel_hash *next;
|
||||
struct xcoff_link_hash_entry *h;
|
||||
struct internal_reloc *rel;
|
||||
} *toc_rel_hashes;
|
||||
};
|
||||
|
||||
/* Information that we pass around while doing the final link step. */
|
||||
|
||||
struct xcoff_final_link_info
|
||||
{
|
||||
struct xcoff_final_link_info {
|
||||
/* General link information. */
|
||||
struct bfd_link_info *info;
|
||||
/* Output BFD. */
|
||||
@ -784,18 +765,18 @@ _bfd_xcoff_get_dynamic_reloc_upper_bound (abfd)
|
||||
/* The typical dynamic reloc. */
|
||||
|
||||
static reloc_howto_type xcoff_dynamic_reloc =
|
||||
HOWTO (0, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
false, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
HOWTO (0, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
32, /* bitsize */
|
||||
false, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
complain_overflow_bitfield, /* complain_on_overflow */
|
||||
0, /* special_function */
|
||||
"R_POS", /* name */
|
||||
true, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
0, /* special_function */
|
||||
"R_POS", /* name */
|
||||
true, /* partial_inplace */
|
||||
0xffffffff, /* src_mask */
|
||||
0xffffffff, /* dst_mask */
|
||||
false); /* pcrel_offset */
|
||||
|
||||
/* Get the dynamic relocs. */
|
||||
@ -1886,12 +1867,11 @@ xcoff_link_add_symbols (abfd, info)
|
||||
the csect storage mapping class, so that the linker can
|
||||
accumulate similar csects together. */
|
||||
{
|
||||
static const char *csect_name_by_class[] =
|
||||
{
|
||||
".pr", ".ro", ".db", ".tc", ".ua", ".rw", ".gl", ".xo",
|
||||
".sv", ".bs", ".ds", ".uc", ".ti", ".tb", NULL, ".tc0",
|
||||
".td"
|
||||
};
|
||||
static const char *csect_name_by_class[] = {
|
||||
".pr", ".ro", ".db", ".tc", ".ua", ".rw", ".gl", ".xo",
|
||||
".sv", ".bs", ".ds", ".uc", ".ti", ".tb", NULL, ".tc0",
|
||||
".td"
|
||||
};
|
||||
const char *csect_name;
|
||||
asection *enclosing;
|
||||
|
||||
@ -2281,7 +2261,7 @@ xcoff_link_add_symbols (abfd, info)
|
||||
else
|
||||
{
|
||||
(*sym_hash)->root.u.c.p->alignment_power
|
||||
= csect->alignment_power;
|
||||
= csect->alignment_power;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2396,7 +2376,7 @@ xcoff_link_add_symbols (abfd, info)
|
||||
|
||||
/* Reset SEC_RELOC and the reloc_count, since the reloc
|
||||
information is now attached to the csects. */
|
||||
o->flags &=~ SEC_RELOC;
|
||||
o->flags &= ~SEC_RELOC;
|
||||
o->reloc_count = 0;
|
||||
|
||||
/* If we are not keeping memory, free the reloc information. */
|
||||
@ -3137,7 +3117,7 @@ bfd_xcoff_link_count_reloc (output_bfd, info, name)
|
||||
|
||||
h->flags |= XCOFF_REF_REGULAR | XCOFF_LDREL;
|
||||
++xcoff_hash_table (info)->ldrel_count;
|
||||
|
||||
|
||||
/* Mark the symbol to avoid garbage collection. */
|
||||
if (! xcoff_mark_symbol (info, h))
|
||||
return false;
|
||||
@ -3172,8 +3152,7 @@ bfd_xcoff_record_link_assignment (output_bfd, info, name)
|
||||
/* This structure is used to pass information through
|
||||
xcoff_link_hash_traverse. */
|
||||
|
||||
struct xcoff_loader_info
|
||||
{
|
||||
struct xcoff_loader_info {
|
||||
/* Set if a problem occurred. */
|
||||
boolean failed;
|
||||
/* Output BFD. */
|
||||
@ -4093,7 +4072,7 @@ _bfd_xcoff_bfd_final_link (abfd, info)
|
||||
finfo.section_info[o->target_index].rel_hashes =
|
||||
((struct xcoff_link_hash_entry **)
|
||||
bfd_malloc (o->reloc_count
|
||||
* sizeof (struct xcoff_link_hash_entry *)));
|
||||
* sizeof (struct xcoff_link_hash_entry *)));
|
||||
if (finfo.section_info[o->target_index].relocs == NULL
|
||||
|| finfo.section_info[o->target_index].rel_hashes == NULL)
|
||||
goto error_return;
|
||||
@ -4694,12 +4673,12 @@ xcoff_link_input_bfd (finfo, input_bfd)
|
||||
script. */
|
||||
tocend = ((*csectpp)->output_section->vma
|
||||
+ (*csectpp)->output_section->_raw_size);
|
||||
for (inp = finfo->info->input_bfds;
|
||||
inp != NULL;
|
||||
for (inp = finfo->info->input_bfds;
|
||||
inp != NULL;
|
||||
inp = inp->link_next)
|
||||
{
|
||||
asection *o;
|
||||
|
||||
|
||||
for (o = inp->sections; o != NULL; o = o->next)
|
||||
if (strcmp (o->name, ".tocbss") == 0)
|
||||
{
|
||||
@ -4710,9 +4689,9 @@ xcoff_link_input_bfd (finfo, input_bfd)
|
||||
if (new_toc_end > tocend)
|
||||
tocend = new_toc_end;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (tocval + 0x10000 < tocend)
|
||||
{
|
||||
(*_bfd_error_handler)
|
||||
@ -6344,7 +6323,7 @@ _bfd_ppc_xcoff_relocate_section (output_bfd, info, input_bfd,
|
||||
addend = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
h = obj_xcoff_sym_hashes (input_bfd)[symndx];
|
||||
sym = syms + symndx;
|
||||
addend = - sym->n_value;
|
||||
|
Loading…
Reference in New Issue
Block a user