Line 1... |
Line 1... |
/* BFD back-end for IBM RS/6000 "XCOFF64" files.
|
/* BFD back-end for IBM RS/6000 "XCOFF64" files.
|
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
|
Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
Written Clinton Popetz.
|
Written Clinton Popetz.
|
Contributed by Cygnus Support.
|
Contributed 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.
|
Line 270... |
Line 270... |
#define coff_SWAP_aux_out _bfd_xcoff64_swap_aux_out
|
#define coff_SWAP_aux_out _bfd_xcoff64_swap_aux_out
|
#define coff_swap_reloc_in xcoff64_swap_reloc_in
|
#define coff_swap_reloc_in xcoff64_swap_reloc_in
|
#define coff_swap_reloc_out xcoff64_swap_reloc_out
|
#define coff_swap_reloc_out xcoff64_swap_reloc_out
|
#define NO_COFF_RELOCS
|
#define NO_COFF_RELOCS
|
|
|
|
#ifndef bfd_pe_print_pdata
|
|
#define bfd_pe_print_pdata NULL
|
|
#endif
|
|
|
#include "coffcode.h"
|
#include "coffcode.h"
|
|
|
/* For XCOFF64, the effective width of symndx changes depending on
|
/* For XCOFF64, the effective width of symndx changes depending on
|
whether we are the first entry. Sigh. */
|
whether we are the first entry. Sigh. */
|
static void
|
static void
|
Line 347... |
Line 351... |
H_PUT_8 (abfd, in->n_numaux, ext->e_numaux);
|
H_PUT_8 (abfd, in->n_numaux, ext->e_numaux);
|
return bfd_coff_symesz (abfd);
|
return bfd_coff_symesz (abfd);
|
}
|
}
|
|
|
static void
|
static void
|
_bfd_xcoff64_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1)
|
_bfd_xcoff64_swap_aux_in (abfd, ext1, type, in_class, indx, numaux, in1)
|
bfd *abfd;
|
bfd *abfd;
|
PTR ext1;
|
PTR ext1;
|
int type;
|
int type;
|
int class;
|
int in_class;
|
int indx;
|
int indx;
|
int numaux;
|
int numaux;
|
PTR in1;
|
PTR in1;
|
{
|
{
|
union external_auxent *ext = (union external_auxent *) ext1;
|
union external_auxent *ext = (union external_auxent *) ext1;
|
union internal_auxent *in = (union internal_auxent *) in1;
|
union internal_auxent *in = (union internal_auxent *) in1;
|
|
|
switch (class)
|
switch (in_class)
|
{
|
{
|
case C_FILE:
|
case C_FILE:
|
if (ext->x_file.x_n.x_zeroes[0] == 0)
|
if (ext->x_file.x_n.x_zeroes[0] == 0)
|
{
|
{
|
in->x_file.x_n.x_zeroes = 0;
|
in->x_file.x_n.x_zeroes = 0;
|
Line 375... |
Line 379... |
}
|
}
|
goto end;
|
goto end;
|
|
|
/* RS/6000 "csect" auxents */
|
/* RS/6000 "csect" auxents */
|
case C_EXT:
|
case C_EXT:
|
|
case C_AIX_WEAKEXT:
|
case C_HIDEXT:
|
case C_HIDEXT:
|
if (indx + 1 == numaux)
|
if (indx + 1 == numaux)
|
{
|
{
|
bfd_signed_vma h = 0;
|
bfd_signed_vma h = 0;
|
bfd_vma l = 0;
|
bfd_vma l = 0;
|
Line 413... |
Line 418... |
goto end;
|
goto end;
|
}
|
}
|
break;
|
break;
|
}
|
}
|
|
|
if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
|
if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type)
|
|
|| ISTAG (in_class))
|
{
|
{
|
in->x_sym.x_fcnary.x_fcn.x_lnnoptr
|
in->x_sym.x_fcnary.x_fcn.x_lnnoptr
|
= H_GET_64 (abfd, ext->x_sym.x_fcnary.x_fcn.x_lnnoptr);
|
= H_GET_64 (abfd, ext->x_sym.x_fcnary.x_fcn.x_lnnoptr);
|
in->x_sym.x_fcnary.x_fcn.x_endndx.l
|
in->x_sym.x_fcnary.x_fcn.x_endndx.l
|
= H_GET_32 (abfd, ext->x_sym.x_fcnary.x_fcn.x_endndx);
|
= H_GET_32 (abfd, ext->x_sym.x_fcnary.x_fcn.x_endndx);
|
Line 437... |
Line 443... |
|
|
end: ;
|
end: ;
|
}
|
}
|
|
|
static unsigned int
|
static unsigned int
|
_bfd_xcoff64_swap_aux_out (abfd, inp, type, class, indx, numaux, extp)
|
_bfd_xcoff64_swap_aux_out (abfd, inp, type, in_class, indx, numaux, extp)
|
bfd *abfd;
|
bfd *abfd;
|
PTR inp;
|
PTR inp;
|
int type;
|
int type;
|
int class;
|
int in_class;
|
int indx ATTRIBUTE_UNUSED;
|
int indx ATTRIBUTE_UNUSED;
|
int numaux ATTRIBUTE_UNUSED;
|
int numaux ATTRIBUTE_UNUSED;
|
PTR extp;
|
PTR extp;
|
{
|
{
|
union internal_auxent *in = (union internal_auxent *) inp;
|
union internal_auxent *in = (union internal_auxent *) inp;
|
union external_auxent *ext = (union external_auxent *) extp;
|
union external_auxent *ext = (union external_auxent *) extp;
|
|
|
memset ((PTR) ext, 0, bfd_coff_auxesz (abfd));
|
memset ((PTR) ext, 0, bfd_coff_auxesz (abfd));
|
switch (class)
|
switch (in_class)
|
{
|
{
|
case C_FILE:
|
case C_FILE:
|
if (in->x_file.x_n.x_zeroes == 0)
|
if (in->x_file.x_n.x_zeroes == 0)
|
{
|
{
|
H_PUT_32 (abfd, 0, ext->x_file.x_n.x_zeroes);
|
H_PUT_32 (abfd, 0, ext->x_file.x_n.x_zeroes);
|
Line 467... |
Line 473... |
H_PUT_8 (abfd, _AUX_FILE, ext->x_auxtype.x_auxtype);
|
H_PUT_8 (abfd, _AUX_FILE, ext->x_auxtype.x_auxtype);
|
goto end;
|
goto end;
|
|
|
/* RS/6000 "csect" auxents */
|
/* RS/6000 "csect" auxents */
|
case C_EXT:
|
case C_EXT:
|
|
case C_AIX_WEAKEXT:
|
case C_HIDEXT:
|
case C_HIDEXT:
|
if (indx + 1 == numaux)
|
if (indx + 1 == numaux)
|
{
|
{
|
bfd_vma temp;
|
bfd_vma temp;
|
|
|
Line 498... |
Line 505... |
goto end;
|
goto end;
|
}
|
}
|
break;
|
break;
|
}
|
}
|
|
|
if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
|
if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type)
|
|
|| ISTAG (in_class))
|
{
|
{
|
H_PUT_64 (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr,
|
H_PUT_64 (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr,
|
ext->x_sym.x_fcnary.x_fcn.x_lnnoptr);
|
ext->x_sym.x_fcnary.x_fcn.x_lnnoptr);
|
H_PUT_8 (abfd, _AUX_FCN,
|
H_PUT_8 (abfd, _AUX_FCN,
|
ext->x_auxtype.x_auxtype);
|
ext->x_auxtype.x_auxtype);
|
Line 761... |
Line 769... |
file_ptr reloc_base;
|
file_ptr reloc_base;
|
file_ptr lineno_base;
|
file_ptr lineno_base;
|
file_ptr sym_base;
|
file_ptr sym_base;
|
unsigned long reloc_size = 0;
|
unsigned long reloc_size = 0;
|
unsigned long lnno_size = 0;
|
unsigned long lnno_size = 0;
|
bfd_boolean long_section_names;
|
|
asection *text_sec = ((void *) 0);
|
asection *text_sec = ((void *) 0);
|
asection *data_sec = ((void *) 0);
|
asection *data_sec = ((void *) 0);
|
asection *bss_sec = ((void *) 0);
|
asection *bss_sec = ((void *) 0);
|
struct internal_filehdr internal_f;
|
struct internal_filehdr internal_f;
|
struct internal_aouthdr internal_a;
|
struct internal_aouthdr internal_a;
|
Line 831... |
Line 838... |
internal_f.f_nscns = 0;
|
internal_f.f_nscns = 0;
|
|
|
if (bfd_seek (abfd, scn_base, SEEK_SET) != 0)
|
if (bfd_seek (abfd, scn_base, SEEK_SET) != 0)
|
return FALSE;
|
return FALSE;
|
|
|
long_section_names = FALSE;
|
|
for (current = abfd->sections; current != NULL; current = current->next)
|
for (current = abfd->sections; current != NULL; current = current->next)
|
{
|
{
|
struct internal_scnhdr section;
|
struct internal_scnhdr section;
|
struct external_scnhdr buff;
|
struct external_scnhdr buff;
|
bfd_size_type amount;
|
bfd_size_type amount;
|
Line 1044... |
Line 1050... |
internal_a.o_cputype = 4;
|
internal_a.o_cputype = 4;
|
break;
|
break;
|
case bfd_arch_powerpc:
|
case bfd_arch_powerpc:
|
if (bfd_get_mach (abfd) == bfd_mach_ppc)
|
if (bfd_get_mach (abfd) == bfd_mach_ppc)
|
internal_a.o_cputype = 3;
|
internal_a.o_cputype = 3;
|
|
else if (bfd_get_mach (abfd) == bfd_mach_ppc_620)
|
|
internal_a.o_cputype = 2;
|
else
|
else
|
internal_a.o_cputype = 1;
|
internal_a.o_cputype = 1;
|
break;
|
break;
|
default:
|
default:
|
abort ();
|
abort ();
|
Line 1111... |
Line 1119... |
bfd_vma addend;
|
bfd_vma addend;
|
bfd_vma *relocation;
|
bfd_vma *relocation;
|
bfd_byte *contents;
|
bfd_byte *contents;
|
{
|
{
|
struct xcoff_link_hash_entry *h;
|
struct xcoff_link_hash_entry *h;
|
|
bfd_vma section_offset;
|
|
|
if (0 > rel->r_symndx)
|
if (0 > rel->r_symndx)
|
return FALSE;
|
return FALSE;
|
|
|
h = obj_xcoff_sym_hashes (input_bfd)[rel->r_symndx];
|
h = obj_xcoff_sym_hashes (input_bfd)[rel->r_symndx];
|
|
section_offset = rel->r_vaddr - input_section->vma;
|
|
|
/* If we see an R_BR or R_RBR reloc which is jumping to global
|
/* If we see an R_BR or R_RBR reloc which is jumping to global
|
linkage code, and it is followed by an appropriate cror nop
|
linkage code, and it is followed by an appropriate cror nop
|
instruction, we replace the cror with ld r2,40(r1). This
|
instruction, we replace the cror with ld r2,40(r1). This
|
restores the TOC after the glink code. Contrariwise, if the
|
restores the TOC after the glink code. Contrariwise, if the
|
call is followed by a ld r2,40(r1), but the call is not
|
call is followed by a ld r2,40(r1), but the call is not
|
going to global linkage code, we can replace the load with a
|
going to global linkage code, we can replace the load with a
|
cror. */
|
cror. */
|
if (NULL != h
|
if (NULL != h
|
&& bfd_link_hash_defined == h->root.type
|
&& (bfd_link_hash_defined == h->root.type
|
&& rel->r_vaddr - input_section->vma + 8 <= input_section->size)
|
|| bfd_link_hash_defweak == h->root.type)
|
|
&& section_offset + 8 <= input_section->size)
|
{
|
{
|
bfd_byte *pnext;
|
bfd_byte *pnext;
|
unsigned long next;
|
unsigned long next;
|
|
|
pnext = contents + (rel->r_vaddr - input_section->vma) + 4;
|
pnext = contents + section_offset + 4;
|
next = bfd_get_32 (input_bfd, pnext);
|
next = bfd_get_32 (input_bfd, pnext);
|
|
|
/* The _ptrgl function is magic. It is used by the AIX compiler to call
|
/* The _ptrgl function is magic. It is used by the AIX compiler to call
|
a function through a pointer. */
|
a function through a pointer. */
|
if (h->smclas == XMC_GL || strcmp (h->root.root.string, "._ptrgl") == 0)
|
if (h->smclas == XMC_GL || strcmp (h->root.root.string, "._ptrgl") == 0)
|
Line 1160... |
Line 1171... |
truncated but no it not important. For this case, disable the
|
truncated but no it not important. For this case, disable the
|
overflow checking. */
|
overflow checking. */
|
howto->complain_on_overflow = complain_overflow_dont;
|
howto->complain_on_overflow = complain_overflow_dont;
|
}
|
}
|
|
|
howto->pc_relative = TRUE;
|
/* The original PC-relative relocation is biased by -r_vaddr, so adding
|
|
the value below will give the absolute target address. */
|
|
*relocation = val + addend + rel->r_vaddr;
|
|
|
howto->src_mask &= ~3;
|
howto->src_mask &= ~3;
|
howto->dst_mask = howto->src_mask;
|
howto->dst_mask = howto->src_mask;
|
|
|
/* A PC relative reloc includes the section address. */
|
if (h != NULL
|
addend += input_section->vma;
|
&& (h->root.type == bfd_link_hash_defined
|
|
|| h->root.type == bfd_link_hash_defweak)
|
|
&& bfd_is_abs_section (h->root.u.def.section)
|
|
&& section_offset + 4 <= input_section->size)
|
|
{
|
|
bfd_byte *ptr;
|
|
bfd_vma insn;
|
|
|
|
/* Turn the relative branch into an absolute one by setting the
|
|
AA bit. */
|
|
ptr = contents + section_offset;
|
|
insn = bfd_get_32 (input_bfd, ptr);
|
|
insn |= 2;
|
|
bfd_put_32 (input_bfd, insn, ptr);
|
|
|
*relocation = val + addend;
|
/* Make the howto absolute too. */
|
|
howto->pc_relative = FALSE;
|
|
howto->complain_on_overflow = complain_overflow_bitfield;
|
|
}
|
|
else
|
|
{
|
|
/* Use a PC-relative howto and subtract the instruction's address
|
|
from the target address we calculated above. */
|
|
howto->pc_relative = TRUE;
|
*relocation -= (input_section->output_section->vma
|
*relocation -= (input_section->output_section->vma
|
+ input_section->output_offset);
|
+ input_section->output_offset
|
|
+ section_offset);
|
|
}
|
return TRUE;
|
return TRUE;
|
}
|
}
|
|
|
/* This is the relocation function for the PowerPC64.
|
/* This is the relocation function for the PowerPC64.
|
See xcoff_ppc_relocation_section for more information. */
|
See xcoff_ppc_relocation_section for more information. */
|
Line 1260... |
Line 1297... |
+ sym->n_value
|
+ sym->n_value
|
- sec->vma);
|
- sec->vma);
|
}
|
}
|
else
|
else
|
{
|
{
|
|
if (info->unresolved_syms_in_objects != RM_IGNORE
|
|
&& (h->flags & XCOFF_WAS_UNDEFINED) != 0)
|
|
{
|
|
if (! ((*info->callbacks->undefined_symbol)
|
|
(info, h->root.root.string,
|
|
input_bfd, input_section,
|
|
rel->r_vaddr - input_section->vma,
|
|
(info->unresolved_syms_in_objects
|
|
== RM_GENERATE_ERROR))))
|
|
return FALSE;
|
|
}
|
if (h->root.type == bfd_link_hash_defined
|
if (h->root.type == bfd_link_hash_defined
|
|| h->root.type == bfd_link_hash_defweak)
|
|| h->root.type == bfd_link_hash_defweak)
|
{
|
{
|
sec = h->root.u.def.section;
|
sec = h->root.u.def.section;
|
val = (h->root.u.def.value
|
val = (h->root.u.def.value
|
Line 1274... |
Line 1322... |
{
|
{
|
sec = h->root.u.c.p->section;
|
sec = h->root.u.c.p->section;
|
val = (sec->output_section->vma
|
val = (sec->output_section->vma
|
+ sec->output_offset);
|
+ sec->output_offset);
|
}
|
}
|
else if ((0 == (h->flags & (XCOFF_DEF_DYNAMIC | XCOFF_IMPORT)))
|
else
|
&& ! info->relocatable)
|
|
{
|
{
|
if (! ((*info->callbacks->undefined_symbol)
|
BFD_ASSERT (info->relocatable
|
(info, h->root.root.string, input_bfd, input_section,
|
|| (h->flags & XCOFF_DEF_DYNAMIC) != 0
|
rel->r_vaddr - input_section->vma, TRUE)))
|
|| (h->flags & XCOFF_IMPORT) != 0);
|
return FALSE;
|
|
|
|
/* Don't try to process the reloc. It can't help, and
|
|
it may generate another error. */
|
|
continue;
|
|
}
|
}
|
}
|
}
|
}
|
}
|
|
|
if (rel->r_type >= XCOFF_MAX_CALCULATE_RELOCATION
|
if (rel->r_type >= XCOFF_MAX_CALCULATE_RELOCATION
|
Line 1550... |
Line 1592... |
0xffff, /* dst_mask */
|
0xffff, /* dst_mask */
|
FALSE), /* pcrel_offset */
|
FALSE), /* pcrel_offset */
|
|
|
EMPTY_HOWTO (0xe),
|
EMPTY_HOWTO (0xe),
|
|
|
/* Non-relocating reference. */
|
/* Non-relocating reference. Bitsize is 1 so that r_rsize is 0. */
|
HOWTO (R_REF, /* type */
|
HOWTO (R_REF, /* type */
|
0, /* rightshift */
|
0, /* rightshift */
|
2, /* size (0 = byte, 1 = short, 2 = long) */
|
0, /* size (0 = byte, 1 = short, 2 = long) */
|
32, /* bitsize */
|
1, /* bitsize */
|
FALSE, /* pc_relative */
|
FALSE, /* pc_relative */
|
0, /* bitpos */
|
0, /* bitpos */
|
complain_overflow_dont, /* complain_on_overflow */
|
complain_overflow_dont, /* complain_on_overflow */
|
0, /* special_function */
|
0, /* special_function */
|
"R_REF", /* name */
|
"R_REF", /* name */
|
Line 1838... |
Line 1880... |
case BFD_RELOC_32:
|
case BFD_RELOC_32:
|
case BFD_RELOC_CTOR:
|
case BFD_RELOC_CTOR:
|
return &xcoff64_howto_table[0x1c];
|
return &xcoff64_howto_table[0x1c];
|
case BFD_RELOC_64:
|
case BFD_RELOC_64:
|
return &xcoff64_howto_table[0];
|
return &xcoff64_howto_table[0];
|
|
case BFD_RELOC_NONE:
|
|
return &xcoff64_howto_table[0xf];
|
default:
|
default:
|
return NULL;
|
return NULL;
|
}
|
}
|
}
|
}
|
|
|
Line 2555... |
Line 2599... |
AUXESZ,
|
AUXESZ,
|
RELSZ,
|
RELSZ,
|
LINESZ,
|
LINESZ,
|
FILNMLEN,
|
FILNMLEN,
|
TRUE, /* _bfd_coff_long_filenames */
|
TRUE, /* _bfd_coff_long_filenames */
|
FALSE, /* _bfd_coff_long_section_names */
|
XCOFF_NO_LONG_SECTION_NAMES, /* _bfd_coff_long_section_names */
|
3, /* _bfd_coff_default_section_alignment_power */
|
3, /* _bfd_coff_default_section_alignment_power */
|
TRUE, /* _bfd_coff_force_symnames_in_strings */
|
TRUE, /* _bfd_coff_force_symnames_in_strings */
|
4, /* _bfd_coff_debug_string_prefix_length */
|
4, /* _bfd_coff_debug_string_prefix_length */
|
coff_swap_filehdr_in,
|
coff_swap_filehdr_in,
|
coff_swap_aouthdr_in,
|
coff_swap_aouthdr_in,
|
Line 2574... |
Line 2618... |
symname_in_debug_hook,
|
symname_in_debug_hook,
|
coff_pointerize_aux_hook,
|
coff_pointerize_aux_hook,
|
coff_print_aux,
|
coff_print_aux,
|
dummy_reloc16_extra_cases,
|
dummy_reloc16_extra_cases,
|
dummy_reloc16_estimate,
|
dummy_reloc16_estimate,
|
NULL, /* bfd_coff_sym_is_global */
|
NULL, /* bfd_coff_symbol_classification */
|
coff_compute_section_file_positions,
|
coff_compute_section_file_positions,
|
NULL, /* _bfd_coff_start_final_link */
|
NULL, /* _bfd_coff_start_final_link */
|
xcoff64_ppc_relocate_section,
|
xcoff64_ppc_relocate_section,
|
coff_rtype_to_howto,
|
coff_rtype_to_howto,
|
NULL, /* _bfd_coff_adjust_symndx */
|
NULL, /* _bfd_coff_adjust_symndx */
|
_bfd_generic_link_add_one_symbol,
|
_bfd_generic_link_add_one_symbol,
|
coff_link_output_has_begun,
|
coff_link_output_has_begun,
|
coff_final_link_postscript
|
coff_final_link_postscript,
|
|
NULL /* print_pdata. */
|
},
|
},
|
|
|
0x01EF, /* magic number */
|
0x01EF, /* magic number */
|
bfd_arch_powerpc,
|
bfd_arch_powerpc,
|
bfd_mach_ppc_620,
|
bfd_mach_ppc_620,
|
Line 2762... |
Line 2807... |
bfd_generic_gc_sections,
|
bfd_generic_gc_sections,
|
bfd_generic_merge_sections,
|
bfd_generic_merge_sections,
|
bfd_generic_is_group_section,
|
bfd_generic_is_group_section,
|
bfd_generic_discard_group,
|
bfd_generic_discard_group,
|
_bfd_generic_section_already_linked,
|
_bfd_generic_section_already_linked,
|
|
_bfd_xcoff_define_common_symbol,
|
|
|
/* Dynamic */
|
/* Dynamic */
|
_bfd_xcoff_get_dynamic_symtab_upper_bound,
|
_bfd_xcoff_get_dynamic_symtab_upper_bound,
|
_bfd_xcoff_canonicalize_dynamic_symtab,
|
_bfd_xcoff_canonicalize_dynamic_symtab,
|
_bfd_nodynamic_get_synthetic_symtab,
|
_bfd_nodynamic_get_synthetic_symtab,
|
Line 2808... |
Line 2854... |
AUXESZ,
|
AUXESZ,
|
RELSZ,
|
RELSZ,
|
LINESZ,
|
LINESZ,
|
FILNMLEN,
|
FILNMLEN,
|
TRUE, /* _bfd_coff_long_filenames */
|
TRUE, /* _bfd_coff_long_filenames */
|
FALSE, /* _bfd_coff_long_section_names */
|
XCOFF_NO_LONG_SECTION_NAMES, /* _bfd_coff_long_section_names */
|
3, /* _bfd_coff_default_section_alignment_power */
|
3, /* _bfd_coff_default_section_alignment_power */
|
TRUE, /* _bfd_coff_force_symnames_in_strings */
|
TRUE, /* _bfd_coff_force_symnames_in_strings */
|
4, /* _bfd_coff_debug_string_prefix_length */
|
4, /* _bfd_coff_debug_string_prefix_length */
|
coff_swap_filehdr_in,
|
coff_swap_filehdr_in,
|
coff_swap_aouthdr_in,
|
coff_swap_aouthdr_in,
|
Line 2835... |
Line 2881... |
xcoff64_ppc_relocate_section,
|
xcoff64_ppc_relocate_section,
|
coff_rtype_to_howto,
|
coff_rtype_to_howto,
|
NULL, /* _bfd_coff_adjust_symndx */
|
NULL, /* _bfd_coff_adjust_symndx */
|
_bfd_generic_link_add_one_symbol,
|
_bfd_generic_link_add_one_symbol,
|
coff_link_output_has_begun,
|
coff_link_output_has_begun,
|
coff_final_link_postscript
|
coff_final_link_postscript,
|
|
NULL /* print_pdata. */
|
},
|
},
|
|
|
U64_TOCMAGIC, /* magic number */
|
U64_TOCMAGIC, /* magic number */
|
bfd_arch_powerpc,
|
bfd_arch_powerpc,
|
bfd_mach_ppc_620,
|
bfd_mach_ppc_620,
|
Line 3014... |
Line 3061... |
bfd_generic_gc_sections,
|
bfd_generic_gc_sections,
|
bfd_generic_merge_sections,
|
bfd_generic_merge_sections,
|
bfd_generic_is_group_section,
|
bfd_generic_is_group_section,
|
bfd_generic_discard_group,
|
bfd_generic_discard_group,
|
_bfd_generic_section_already_linked,
|
_bfd_generic_section_already_linked,
|
|
_bfd_xcoff_define_common_symbol,
|
|
|
/* Dynamic */
|
/* Dynamic */
|
_bfd_xcoff_get_dynamic_symtab_upper_bound,
|
_bfd_xcoff_get_dynamic_symtab_upper_bound,
|
_bfd_xcoff_canonicalize_dynamic_symtab,
|
_bfd_xcoff_canonicalize_dynamic_symtab,
|
_bfd_nodynamic_get_synthetic_symtab,
|
_bfd_nodynamic_get_synthetic_symtab,
|