Update binutils to version 2.24 to work around a build problem

This commit is contained in:
Wolfgang Thaller
2014-09-13 00:14:23 +02:00
parent 449227a01f
commit 2ce044c327
8219 changed files with 1566054 additions and 305601 deletions
+199 -123
View File
@@ -1,7 +1,5 @@
/* Support for the generic parts of most COFF variants, for BFD.
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
Free Software Foundation, Inc.
Copyright 1990-2013 Free Software Foundation, Inc.
Written by Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
@@ -119,11 +117,11 @@ SUBSUBSECTION
The Microsoft PE variants of the Coff object file format add
an extension to support the use of long section names. This
extension is defined in section 4 of the Microsoft PE/COFF
extension is defined in section 4 of the Microsoft PE/COFF
specification (rev 8.1). If a section name is too long to fit
into the section header's @code{s_name} field, it is instead
placed into the string table, and the @code{s_name} field is
filled with a slash ("/") followed by the ASCII decimal
filled with a slash ("/") followed by the ASCII decimal
representation of the offset of the full name relative to the
string table base.
@@ -140,11 +138,11 @@ SUBSUBSECTION
expecting the MS standard format may become confused; @file{PEview} is
one known example.
The functionality is supported in BFD by code implemented under
The functionality is supported in BFD by code implemented under
the control of the macro @code{COFF_LONG_SECTION_NAMES}. If not
defined, the format does not support long section names in any way.
If defined, it is used to initialise a flag,
@code{_bfd_coff_long_section_names}, and a hook function pointer,
If defined, it is used to initialise a flag,
@code{_bfd_coff_long_section_names}, and a hook function pointer,
@code{_bfd_coff_set_long_section_names}, in the Coff backend data
structure. The flag controls the generation of long section names
in output BFDs at runtime; if it is false, as it will be by default
@@ -153,7 +151,7 @@ SUBSUBSECTION
points to a function that allows the value of the flag to be altered
at runtime, on formats that support long section names at all; on
other formats it points to a stub that returns an error indication.
With input BFDs, the flag is set according to whether any long section
names are detected while reading the section headers. For a completely
new BFD, the flag is set to the default for the target format. This
@@ -361,6 +359,8 @@ CODE_FRAGMENT
*/
#include "libiberty.h"
#ifdef COFF_WITH_PE
#include "peicode.h"
#else
@@ -370,7 +370,9 @@ CODE_FRAGMENT
#define STRING_SIZE_SIZE 4
#define DOT_DEBUG ".debug"
#define DOT_ZDEBUG ".zdebug"
#define GNU_LINKONCE_WI ".gnu.linkonce.wi."
#define GNU_LINKONCE_WT ".gnu.linkonce.wt."
#define DOT_RELOC ".reloc"
#if defined (COFF_LONG_SECTION_NAMES)
@@ -542,7 +544,8 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags)
styp_flags = STYP_LIT;
#endif /* _LIT */
}
else if (CONST_STRNEQ (sec_name, DOT_DEBUG))
else if (CONST_STRNEQ (sec_name, DOT_DEBUG)
|| CONST_STRNEQ (sec_name, DOT_ZDEBUG))
{
/* Handle the XCOFF debug section and DWARF2 debug sections. */
if (!sec_name[6])
@@ -555,7 +558,8 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags)
styp_flags = STYP_DEBUG_INFO;
}
#ifdef COFF_LONG_SECTION_NAMES
else if (CONST_STRNEQ (sec_name, GNU_LINKONCE_WI))
else if (CONST_STRNEQ (sec_name, GNU_LINKONCE_WI)
|| CONST_STRNEQ (sec_name, GNU_LINKONCE_WT))
{
styp_flags = STYP_DEBUG_INFO;
}
@@ -577,6 +581,17 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags)
{
styp_flags = STYP_TYPCHK;
}
else if (sec_flags & SEC_DEBUGGING)
{
int i;
for (i = 0; i < XCOFF_DWSECT_NBR_NAMES; i++)
if (!strcmp (sec_name, xcoff_dwsect_names[i].name))
{
styp_flags = STYP_DWARF | xcoff_dwsect_names[i].flag;
break;
}
}
#endif
/* Try and figure out what it should be */
else if (sec_flags & SEC_CODE)
@@ -634,6 +649,16 @@ static long
sec_to_styp_flags (const char *sec_name, flagword sec_flags)
{
long styp_flags = 0;
bfd_boolean is_dbg = FALSE;
if (CONST_STRNEQ (sec_name, DOT_DEBUG)
|| CONST_STRNEQ (sec_name, DOT_ZDEBUG)
#ifdef COFF_LONG_SECTION_NAMES
|| CONST_STRNEQ (sec_name, GNU_LINKONCE_WI)
|| CONST_STRNEQ (sec_name, GNU_LINKONCE_WT)
#endif
|| CONST_STRNEQ (sec_name, ".stab"))
is_dbg = TRUE;
/* caution: there are at least three groups of symbols that have
very similar bits and meanings: IMAGE_SCN*, SEC_*, and STYP_*.
@@ -644,16 +669,20 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags)
but there are more IMAGE_SCN_* flags. */
/* FIXME: There is no gas syntax to specify the debug section flag. */
if (CONST_STRNEQ (sec_name, DOT_DEBUG)
|| CONST_STRNEQ (sec_name, GNU_LINKONCE_WI))
sec_flags = SEC_DEBUGGING | SEC_READONLY;
if (is_dbg)
{
sec_flags &= (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_DISCARD
| SEC_LINK_DUPLICATES_SAME_CONTENTS
| SEC_LINK_DUPLICATES_SAME_SIZE);
sec_flags |= SEC_DEBUGGING | SEC_READONLY;
}
/* skip LOAD */
/* READONLY later */
/* skip RELOC */
if ((sec_flags & SEC_CODE) != 0)
styp_flags |= IMAGE_SCN_CNT_CODE;
if ((sec_flags & SEC_DATA) != 0)
if ((sec_flags & (SEC_DATA | SEC_DEBUGGING)) != 0)
styp_flags |= IMAGE_SCN_CNT_INITIALIZED_DATA;
if ((sec_flags & SEC_ALLOC) != 0 && (sec_flags & SEC_LOAD) == 0)
styp_flags |= IMAGE_SCN_CNT_UNINITIALIZED_DATA; /* ==STYP_BSS */
@@ -664,15 +693,19 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags)
styp_flags |= IMAGE_SCN_LNK_COMDAT;
if ((sec_flags & SEC_DEBUGGING) != 0)
styp_flags |= IMAGE_SCN_MEM_DISCARDABLE;
if ((sec_flags & SEC_EXCLUDE) != 0)
if ((sec_flags & SEC_EXCLUDE) != 0 && !is_dbg)
styp_flags |= IMAGE_SCN_LNK_REMOVE;
if ((sec_flags & SEC_NEVER_LOAD) != 0)
if ((sec_flags & SEC_NEVER_LOAD) != 0 && !is_dbg)
styp_flags |= IMAGE_SCN_LNK_REMOVE;
/* skip IN_MEMORY */
/* skip SORT */
if (sec_flags & SEC_LINK_ONCE)
styp_flags |= IMAGE_SCN_LNK_COMDAT;
/* skip LINK_DUPLICATES */
if ((sec_flags
& (SEC_LINK_DUPLICATES_DISCARD | SEC_LINK_DUPLICATES_SAME_CONTENTS
| SEC_LINK_DUPLICATES_SAME_SIZE)) != 0)
styp_flags |= IMAGE_SCN_LNK_COMDAT;
/* skip LINKER_CREATED */
if ((sec_flags & SEC_COFF_NOREAD) == 0)
@@ -761,6 +794,16 @@ styp_to_sec_flags (bfd *abfd ATTRIBUTE_UNUSED,
}
else if (styp_flags & STYP_PAD)
sec_flags = 0;
#ifdef RS6000COFF_C
else if (styp_flags & STYP_EXCEPT)
sec_flags |= SEC_LOAD;
else if (styp_flags & STYP_LOADER)
sec_flags |= SEC_LOAD;
else if (styp_flags & STYP_TYPCHK)
sec_flags |= SEC_LOAD;
else if (styp_flags & STYP_DWARF)
sec_flags |= SEC_DEBUGGING;
#endif
else if (strcmp (name, _TEXT) == 0)
{
if (sec_flags & SEC_NEVER_LOAD)
@@ -785,11 +828,13 @@ styp_to_sec_flags (bfd *abfd ATTRIBUTE_UNUSED,
sec_flags |= SEC_ALLOC;
}
else if (CONST_STRNEQ (name, DOT_DEBUG)
|| CONST_STRNEQ (name, DOT_ZDEBUG)
#ifdef _COMMENT
|| strcmp (name, _COMMENT) == 0
#endif
#ifdef COFF_LONG_SECTION_NAMES
|| CONST_STRNEQ (name, GNU_LINKONCE_WI)
|| CONST_STRNEQ (name, GNU_LINKONCE_WT)
#endif
|| CONST_STRNEQ (name, ".stab"))
{
@@ -947,7 +992,7 @@ handle_COMDAT (bfd * abfd,
if (! ((isym.n_sclass == C_STAT
|| isym.n_sclass == C_EXT)
&& isym.n_type == T_NULL
&& BTYPE (isym.n_type) == T_NULL
&& isym.n_value == 0))
abort ();
@@ -1118,7 +1163,16 @@ styp_to_sec_flags (bfd *abfd,
long styp_flags = internal_s->s_flags;
flagword sec_flags;
bfd_boolean result = TRUE;
bfd_boolean is_dbg = FALSE;
if (CONST_STRNEQ (name, DOT_DEBUG)
|| CONST_STRNEQ (name, DOT_ZDEBUG)
#ifdef COFF_LONG_SECTION_NAMES
|| CONST_STRNEQ (name, GNU_LINKONCE_WI)
|| CONST_STRNEQ (name, GNU_LINKONCE_WT)
#endif
|| CONST_STRNEQ (name, ".stab"))
is_dbg = TRUE;
/* Assume read only unless IMAGE_SCN_MEM_WRITE is specified. */
sec_flags = SEC_READONLY;
@@ -1188,27 +1242,30 @@ styp_to_sec_flags (bfd *abfd,
mean that a given section contains debug information. Thus
we only set the SEC_DEBUGGING flag on sections that we
recognise as containing debug information. */
if (CONST_STRNEQ (name, DOT_DEBUG)
if (is_dbg
#ifdef _COMMENT
|| strcmp (name, _COMMENT) == 0
#endif
#ifdef COFF_LONG_SECTION_NAMES
|| CONST_STRNEQ (name, GNU_LINKONCE_WI)
#endif
|| CONST_STRNEQ (name, ".stab"))
sec_flags |= SEC_DEBUGGING;
)
{
sec_flags |= SEC_DEBUGGING | SEC_READONLY;
}
break;
case IMAGE_SCN_MEM_SHARED:
sec_flags |= SEC_COFF_SHARED;
break;
case IMAGE_SCN_LNK_REMOVE:
sec_flags |= SEC_EXCLUDE;
if (!is_dbg)
sec_flags |= SEC_EXCLUDE;
break;
case IMAGE_SCN_CNT_CODE:
sec_flags |= SEC_CODE | SEC_ALLOC | SEC_LOAD;
break;
case IMAGE_SCN_CNT_INITIALIZED_DATA:
sec_flags |= SEC_DATA | SEC_ALLOC | SEC_LOAD;
if (is_dbg)
sec_flags |= SEC_DEBUGGING;
else
sec_flags |= SEC_DATA | SEC_ALLOC | SEC_LOAD;
break;
case IMAGE_SCN_CNT_UNINITIALIZED_DATA:
sec_flags |= SEC_ALLOC;
@@ -1332,7 +1389,7 @@ Special entry points for gdb to swap in coff symbol table parts:
. bfd_boolean _bfd_coff_long_section_names;
. bfd_boolean (*_bfd_coff_set_long_section_names)
. (bfd *, int);
.
.
. unsigned int _bfd_coff_default_section_alignment_power;
. bfd_boolean _bfd_coff_force_symnames_in_strings;
. unsigned int _bfd_coff_debug_string_prefix_length;
@@ -1690,6 +1747,7 @@ coff_new_section_hook (bfd * abfd, asection * section)
{
combined_entry_type *native;
bfd_size_type amt;
unsigned char sclass = C_STAT;
section->alignment_power = COFF_DEFAULT_SECTION_ALIGNMENT_POWER;
@@ -1697,9 +1755,22 @@ coff_new_section_hook (bfd * abfd, asection * section)
if (bfd_xcoff_text_align_power (abfd) != 0
&& strcmp (bfd_get_section_name (abfd, section), ".text") == 0)
section->alignment_power = bfd_xcoff_text_align_power (abfd);
if (bfd_xcoff_data_align_power (abfd) != 0
else if (bfd_xcoff_data_align_power (abfd) != 0
&& strcmp (bfd_get_section_name (abfd, section), ".data") == 0)
section->alignment_power = bfd_xcoff_data_align_power (abfd);
else
{
int i;
for (i = 0; i < XCOFF_DWSECT_NBR_NAMES; i++)
if (strcmp (bfd_get_section_name (abfd, section),
xcoff_dwsect_names[i].name) == 0)
{
section->alignment_power = 0;
sclass = C_DWARF;
break;
}
}
#endif
/* Set up the section symbol. */
@@ -1723,7 +1794,7 @@ coff_new_section_hook (bfd * abfd, asection * section)
for n_numaux is already correct. */
native->u.syment.n_type = T_NULL;
native->u.syment.n_sclass = C_STAT;
native->u.syment.n_sclass = sclass;
coffsymbol (section->symbol)->native = native;
@@ -1836,12 +1907,14 @@ coff_set_alignment_hook (bfd * abfd ATTRIBUTE_UNUSED,
file_ptr oldpos = bfd_tell (abfd);
bfd_size_type relsz = bfd_coff_relsz (abfd);
bfd_seek (abfd, (file_ptr) hdr->s_relptr, 0);
if (bfd_seek (abfd, (file_ptr) hdr->s_relptr, 0) != 0)
return;
if (bfd_bread (& dst, relsz, abfd) != relsz)
return;
coff_swap_reloc_in (abfd, &dst, &n);
bfd_seek (abfd, oldpos, 0);
if (bfd_seek (abfd, oldpos, 0) != 0)
return;
section->reloc_count = hdr->s_nreloc = n.r_vaddr - 1;
section->rel_filepos += relsz;
}
@@ -2092,22 +2165,6 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr)
machine = bfd_mach_m68020;
break;
#endif
#ifdef MAXQ20MAGIC
case MAXQ20MAGIC:
arch = bfd_arch_maxq;
switch (internal_f->f_flags & F_MACHMASK)
{
case F_MAXQ10:
machine = bfd_mach_maxq10;
break;
case F_MAXQ20:
machine = bfd_mach_maxq20;
break;
default:
return FALSE;
}
break;
#endif
#ifdef MC88MAGIC
case MC88MAGIC:
case MC88DMAGIC:
@@ -2646,7 +2703,7 @@ coff_write_relocs (bfd * abfd, int first_undef)
entries know which symbol index they point to. So we
have to look up the output symbol here. */
if (q->sym_ptr_ptr[0]->the_bfd != abfd)
if (q->sym_ptr_ptr[0] != NULL && q->sym_ptr_ptr[0]->the_bfd != abfd)
{
int j;
const char *sname = q->sym_ptr_ptr[0]->name;
@@ -2675,7 +2732,7 @@ coff_write_relocs (bfd * abfd, int first_undef)
n.r_symndx = q->addend;
else
#endif
if (q->sym_ptr_ptr)
if (q->sym_ptr_ptr && q->sym_ptr_ptr[0] != NULL)
{
#ifdef SECTION_RELATIVE_ABSOLUTE_SYMBOL_P
if (SECTION_RELATIVE_ABSOLUTE_SYMBOL_P (q, s))
@@ -3016,17 +3073,6 @@ coff_set_flags (bfd * abfd,
return TRUE;
#endif
#ifdef MAXQ20MAGIC
case bfd_arch_maxq:
* magicp = MAXQ20MAGIC;
switch (bfd_get_mach (abfd))
{
case bfd_mach_maxq10: * flagsp = F_MAXQ10; return TRUE;
case bfd_mach_maxq20: * flagsp = F_MAXQ20; return TRUE;
default: return FALSE;
}
#endif
default: /* Unknown architecture. */
/* Fall through to "return FALSE" below, to avoid
"statement never reached" errors on the one below. */
@@ -3088,13 +3134,34 @@ static bfd_boolean
coff_compute_section_file_positions (bfd * abfd)
{
asection *current;
asection *previous = NULL;
file_ptr sofar = bfd_coff_filhsz (abfd);
bfd_boolean align_adjust;
int target_index;
#ifdef ALIGN_SECTIONS_IN_FILE
asection *previous = NULL;
file_ptr old_sofar;
#endif
#ifdef COFF_IMAGE_WITH_PE
int page_size;
if (coff_data (abfd)->link_info)
{
page_size = pe_data (abfd)->pe_opthdr.FileAlignment;
/* If no file alignment has been set, default to one.
This repairs 'ld -r' for arm-wince-pe target. */
if (page_size == 0)
page_size = 1;
}
else
page_size = PE_DEF_FILE_ALIGNMENT;
#else
#ifdef COFF_PAGE_SIZE
int page_size = COFF_PAGE_SIZE;
#endif
#endif
#ifdef RS6000COFF_C
/* On XCOFF, if we have symbols, set up the .debug section. */
if (bfd_get_symcount (abfd) > 0)
@@ -3134,26 +3201,6 @@ coff_compute_section_file_positions (bfd * abfd)
}
#endif
#ifdef COFF_IMAGE_WITH_PE
int page_size;
if (coff_data (abfd)->link_info)
{
page_size = pe_data (abfd)->pe_opthdr.FileAlignment;
/* If no file alignment has been set, default to one.
This repairs 'ld -r' for arm-wince-pe target. */
if (page_size == 0)
page_size = 1;
}
else
page_size = PE_DEF_FILE_ALIGNMENT;
#else
#ifdef COFF_PAGE_SIZE
int page_size = COFF_PAGE_SIZE;
#endif
#endif
if (bfd_get_start_address (abfd))
/* A start address may have been added to the original file. In this
case it will need an optional header to record it. */
@@ -3189,7 +3236,6 @@ coff_compute_section_file_positions (bfd * abfd)
unsigned int count;
asection **section_list;
unsigned int i;
int target_index;
bfd_size_type amt;
#ifdef COFF_PAGE_SIZE
@@ -3252,14 +3298,20 @@ coff_compute_section_file_positions (bfd * abfd)
#else /* ! COFF_IMAGE_WITH_PE */
{
/* Set the target_index field. */
int target_index;
target_index = 1;
for (current = abfd->sections; current != NULL; current = current->next)
current->target_index = target_index++;
}
#endif /* ! COFF_IMAGE_WITH_PE */
if (target_index >= 32768)
{
bfd_set_error (bfd_error_file_too_big);
(*_bfd_error_handler)
(_("%B: too many sections (%d)"), abfd, target_index);
return FALSE;
}
align_adjust = FALSE;
for (current = abfd->sections;
current != NULL;
@@ -3292,6 +3344,8 @@ coff_compute_section_file_positions (bfd * abfd)
if (!(current->flags & SEC_HAS_CONTENTS))
continue;
current->rawsize = current->size;
#ifdef COFF_IMAGE_WITH_PE
/* Make sure we skip empty sections in a PE image. */
if (current->size == 0)
@@ -3309,36 +3363,38 @@ coff_compute_section_file_positions (bfd * abfd)
padding the previous section up if necessary. */
old_sofar = sofar;
sofar = BFD_ALIGN (sofar, 1 << current->alignment_power);
#ifdef RS6000COFF_C
/* AIX loader checks the text section alignment of (vma - filepos)
So even though the filepos may be aligned wrt the o_algntext, for
AIX executables, this check fails. This shows up when a native
AIX executable is stripped with gnu strip because the default vma
of native is 0x10000150 but default for gnu is 0x10000140. Gnu
stripped gnu excutable passes this check because the filepos is
0x0140. This problem also show up with 64 bit shared objects. The
data section must also be aligned. */
/* Make sure the file offset and the vma of .text/.data are at the
same page offset, so that the file can be mmap'ed without being
relocated. Failing that, AIX is able to load and execute the
program, but it will be silently relocated (possible as
executables are PIE). But the relocation is slightly costly and
complexify the use of addr2line or gdb. So better to avoid it,
like does the native linker. Usually gnu ld makes sure that
the vma of .text is the file offset so this issue shouldn't
appear unless you are stripping such an executable.
AIX loader checks the text section alignment of (vma - filepos),
and the native linker doesn't try to align the text sections.
For example:
0 .text 000054cc 10000128 10000128 00000128 2**5
CONTENTS, ALLOC, LOAD, CODE
*/
if (!strcmp (current->name, _TEXT)
|| !strcmp (current->name, _DATA))
{
bfd_vma pad;
bfd_vma align;
bfd_vma align = 4096;
bfd_vma sofar_off = sofar % align;
bfd_vma vma_off = current->vma % align;
sofar = BFD_ALIGN (sofar, 1 << current->alignment_power);
align = 1 << current->alignment_power;
pad = abs (current->vma - sofar) % align;
if (pad)
{
pad = align - pad;
sofar += pad;
}
}
else
#else
{
sofar = BFD_ALIGN (sofar, 1 << current->alignment_power);
if (vma_off > sofar_off)
sofar += vma_off - sofar_off;
else if (vma_off < sofar_off)
sofar += align + vma_off - sofar_off;
}
#endif
if (previous != NULL)
@@ -3358,7 +3414,7 @@ coff_compute_section_file_positions (bfd * abfd)
#ifdef COFF_IMAGE_WITH_PE
/* Set the padded size. */
current->size = (current->size + page_size -1) & -page_size;
current->size = (current->size + page_size - 1) & -page_size;
#endif
sofar += current->size;
@@ -3397,10 +3453,12 @@ coff_compute_section_file_positions (bfd * abfd)
incremented in coff_set_section_contents. This is right for
SVR3.2. */
if (strcmp (current->name, _LIB) == 0)
bfd_set_section_vma (abfd, current, 0);
(void) bfd_set_section_vma (abfd, current, 0);
#endif
#ifdef ALIGN_SECTIONS_IN_FILE
previous = current;
#endif
}
/* It is now safe to write to the output file. If we needed an
@@ -3525,7 +3583,9 @@ coff_write_object_contents (bfd * abfd)
asection *current;
bfd_boolean hasrelocs = FALSE;
bfd_boolean haslinno = FALSE;
#ifdef COFF_IMAGE_WITH_PE
bfd_boolean hasdebug = FALSE;
#endif
file_ptr scn_base;
file_ptr reloc_base;
file_ptr lineno_base;
@@ -3628,9 +3688,9 @@ coff_write_object_contents (bfd * abfd)
current = current->next)
{
struct internal_scnhdr section;
#ifdef COFF_IMAGE_WITH_PE
bfd_boolean is_reloc_section = FALSE;
#ifdef COFF_IMAGE_WITH_PE
if (strcmp (current->name, DOT_RELOC) == 0)
{
is_reloc_section = TRUE;
@@ -3729,9 +3789,11 @@ coff_write_object_contents (bfd * abfd)
#endif
if (current->lineno_count != 0)
haslinno = TRUE;
#ifdef COFF_IMAGE_WITH_PE
if ((current->flags & SEC_DEBUGGING) != 0
&& ! is_reloc_section)
hasdebug = TRUE;
#endif
#ifdef RS6000COFF_C
#ifndef XCOFF64
@@ -3893,7 +3955,7 @@ coff_write_object_contents (bfd * abfd)
bfd_size_type amt;
internal_f.f_nscns++;
strncpy (&(scnhdr.s_name[0]), current->name, 8);
memcpy (scnhdr.s_name, ".ovrflo", 8);
scnhdr.s_paddr = current->reloc_count;
scnhdr.s_vaddr = current->lineno_count;
scnhdr.s_size = 0;
@@ -4097,11 +4159,6 @@ coff_write_object_contents (bfd * abfd)
internal_a.magic = NMAGIC; /* Assume separate i/d. */
#endif
#ifdef MAXQ20MAGIC
#define __A_MAGIC_SET__
internal_a.magic = MAXQ20MAGIC;
#endif
#ifndef __A_MAGIC_SET__
#include "Your aouthdr magic number is not being set!"
#else
@@ -4505,7 +4562,7 @@ coff_slurp_line_table (bfd *abfd, asection *asect)
{
(*_bfd_error_handler)
(_("%B: warning: illegal symbol index %ld in line numbers"),
abfd, dst.l_addr.l_symndx);
abfd, (long) symndx);
symndx = 0;
warned = TRUE;
}
@@ -4743,6 +4800,10 @@ coff_slurp_symbol_table (bfd * abfd)
case C_THUMBSTAT: /* Thumb static. */
case C_THUMBLABEL: /* Thumb label. */
case C_THUMBSTATFUNC:/* Thumb static function. */
#endif
#ifdef RS6000COFF_C
case C_DWARF: /* A label in a dwarf section. */
case C_INFO: /* A label in a comment section. */
#endif
case C_LABEL: /* Label. */
if (src->u.syment.n_scnum == N_DEBUG)
@@ -4848,7 +4909,7 @@ coff_slurp_symbol_table (bfd * abfd)
to the symbol instead of the index. FIXME: This
should use a union. */
src->u.syment.n_value =
(long) (native_symbols + src->u.syment.n_value);
(long) (intptr_t) (native_symbols + src->u.syment.n_value);
dst->symbol.value = src->u.syment.n_value;
src->fix_value = 1;
break;
@@ -4890,6 +4951,11 @@ coff_slurp_symbol_table (bfd * abfd)
&& src->u.syment.n_value == 0
&& src->u.syment.n_scnum == 0)
break;
#ifdef RS6000COFF_C
/* XCOFF specific: deleted entry. */
if (src->u.syment.n_value == C_NULL_VALUE)
break;
#endif
/* Fall through. */
case C_EXTDEF: /* External definition. */
case C_ULABEL: /* Undefined label. */
@@ -5141,7 +5207,7 @@ coff_slurp_reloc_table (bfd * abfd, sec_ptr asect, asymbol ** symbols)
{
(*_bfd_error_handler)
(_("%B: warning: illegal symbol index %ld in relocs"),
abfd, dst.r_symndx);
abfd, (long) dst.r_symndx);
cache_ptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
ptr = NULL;
}
@@ -5167,6 +5233,7 @@ coff_slurp_reloc_table (bfd * abfd, sec_ptr asect, asymbol ** symbols)
/* Calculate any reloc addend by looking at the symbol. */
CALC_ADDEND (abfd, ptr, dst, cache_ptr);
(void) ptr;
cache_ptr->address -= asect->vma;
/* !! cache_ptr->section = NULL;*/
@@ -5326,6 +5393,8 @@ dummy_reloc16_extra_cases (bfd *abfd ATTRIBUTE_UNUSED,
#endif /* ! defined (coff_relocate_section) */
#define coff_bfd_link_just_syms _bfd_generic_link_just_syms
#define coff_bfd_copy_link_hash_symbol_type \
_bfd_generic_copy_link_hash_symbol_type
#define coff_bfd_link_split_section _bfd_generic_link_split_section
#ifndef coff_start_final_link
@@ -5600,6 +5669,10 @@ static bfd_coff_backend_data ticoff1_swap_table =
#define coff_bfd_gc_sections bfd_generic_gc_sections
#endif
#ifndef coff_bfd_lookup_section_flags
#define coff_bfd_lookup_section_flags bfd_generic_lookup_section_flags
#endif
#ifndef coff_bfd_merge_sections
#define coff_bfd_merge_sections bfd_generic_merge_sections
#endif
@@ -5614,7 +5687,7 @@ static bfd_coff_backend_data ticoff1_swap_table =
#ifndef coff_section_already_linked
#define coff_section_already_linked \
_bfd_generic_section_already_linked
_bfd_coff_section_already_linked
#endif
#ifndef coff_bfd_define_common_symbol
@@ -5636,6 +5709,7 @@ const bfd_target VAR = \
UNDER, /* Leading symbol underscore. */ \
'/', /* AR_pad_char. */ \
15, /* AR_max_namelen. */ \
0, /* match priority. */ \
\
/* Data conversion functions. */ \
bfd_getb64, bfd_getb_signed_64, bfd_putb64, \
@@ -5686,6 +5760,7 @@ const bfd_target VAR = \
UNDER, /* Leading symbol underscore. */ \
'/', /* AR_pad_char. */ \
15, /* AR_max_namelen. */ \
0, /* match priority. */ \
\
/* Data conversion functions. */ \
bfd_getb64, bfd_getb_signed_64, bfd_putb64, \
@@ -5736,6 +5811,7 @@ const bfd_target VAR = \
UNDER, /* Leading symbol underscore. */ \
'/', /* AR_pad_char. */ \
15, /* AR_max_namelen. */ \
0, /* match priority. */ \
\
/* Data conversion functions. */ \
bfd_getl64, bfd_getl_signed_64, bfd_putl64, \