summaryrefslogtreecommitdiffstats
path: root/contrib/binutils/bfd/elf32-ppc.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/binutils/bfd/elf32-ppc.c')
-rw-r--r--contrib/binutils/bfd/elf32-ppc.c454
1 files changed, 220 insertions, 234 deletions
diff --git a/contrib/binutils/bfd/elf32-ppc.c b/contrib/binutils/bfd/elf32-ppc.c
index b405fea..d3152ce 100644
--- a/contrib/binutils/bfd/elf32-ppc.c
+++ b/contrib/binutils/bfd/elf32-ppc.c
@@ -32,7 +32,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#define USE_RELA /* we want RELA relocations, not REL */
-
static reloc_howto_type *ppc_elf_reloc_type_lookup
PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
static void ppc_elf_info_to_howto
@@ -124,11 +123,27 @@ static boolean ppc_elf_finish_dynamic_sections PARAMS ((bfd *, struct bfd_link_i
/* The number of single-slot PLT entries (the rest use two slots). */
#define PLT_NUM_SINGLE_ENTRIES 8192
+/* Will references to this symbol always reference the symbol
+ in this object? */
+#define SYMBOL_REFERENCES_LOCAL(INFO, H) \
+ ((! INFO->shared \
+ || INFO->symbolic \
+ || H->dynindx == -1 \
+ || ELF_ST_VISIBILITY (H->other) == STV_INTERNAL \
+ || ELF_ST_VISIBILITY (H->other) == STV_HIDDEN) \
+ && (H->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
+
+/* Will _calls_ to this symbol always call the version in this object? */
+#define SYMBOL_CALLS_LOCAL(INFO, H) \
+ ((! INFO->shared \
+ || INFO->symbolic \
+ || H->dynindx == -1 \
+ || ELF_ST_VISIBILITY (H->other) != STV_DEFAULT) \
+ && (H->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) != 0)
-static reloc_howto_type *ppc_elf_howto_table[ (int)R_PPC_max ];
+static reloc_howto_type *ppc_elf_howto_table[(int) R_PPC_max];
-static reloc_howto_type ppc_elf_howto_raw[] =
-{
+static reloc_howto_type ppc_elf_howto_raw[] = {
/* This reloc does nothing. */
HOWTO (R_PPC_NONE, /* type */
0, /* rightshift */
@@ -221,7 +236,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
false), /* pcrel_offset */
/* The high order 16 bits of an address, plus 1 if the contents of
- the low 16 bits, treated as a signed number, is negative. */
+ the low 16 bits, treated as a signed number, is negative. */
HOWTO (R_PPC_ADDR16_HA, /* type */
16, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
@@ -254,7 +269,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
/* An absolute 16 bit branch, for which bit 10 should be set to
indicate that the branch is expected to be taken. The lower two
- bits must be zero. */
+ bits must be zero. */
HOWTO (R_PPC_ADDR14_BRTAKEN, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@@ -286,7 +301,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
0xfffc, /* dst_mask */
false), /* pcrel_offset */
- /* A relative 26 bit branch; the lower two bits must be zero. */
+ /* A relative 26 bit branch; the lower two bits must be zero. */
HOWTO (R_PPC_REL24, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@@ -301,7 +316,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
0x3fffffc, /* dst_mask */
true), /* pcrel_offset */
- /* A relative 16 bit branch; the lower two bits must be zero. */
+ /* A relative 16 bit branch; the lower two bits must be zero. */
HOWTO (R_PPC_REL14, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@@ -316,7 +331,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
0xfffc, /* dst_mask */
true), /* pcrel_offset */
- /* A relative 16 bit branch. Bit 10 should be set to indicate that
+ /* A relative 16 bit branch. Bit 10 should be set to indicate that
the branch is expected to be taken. The lower two bits must be
zero. */
HOWTO (R_PPC_REL14_BRTAKEN, /* type */
@@ -333,7 +348,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
0xfffc, /* dst_mask */
true), /* pcrel_offset */
- /* A relative 16 bit branch. Bit 10 should be set to indicate that
+ /* A relative 16 bit branch. Bit 10 should be set to indicate that
the branch is not expected to be taken. The lower two bits must
be zero. */
HOWTO (R_PPC_REL14_BRNTAKEN, /* type */
@@ -560,7 +575,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
true), /* pcrel_offset */
/* 32-bit relocation to the symbol's procedure linkage table.
- FIXME: not supported. */
+ FIXME: not supported. */
HOWTO (R_PPC_PLT32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@@ -576,7 +591,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
false), /* pcrel_offset */
/* 32-bit PC relative relocation to the symbol's procedure linkage table.
- FIXME: not supported. */
+ FIXME: not supported. */
HOWTO (R_PPC_PLTREL32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@@ -655,7 +670,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
0xffff, /* dst_mask */
false), /* pcrel_offset */
- /* 32-bit section relative relocation. */
+ /* 32-bit section relative relocation. */
HOWTO (R_PPC_SECTOFF, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
@@ -670,7 +685,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
0, /* dst_mask */
true), /* pcrel_offset */
- /* 16-bit lower half section relative relocation. */
+ /* 16-bit lower half section relative relocation. */
HOWTO (R_PPC_SECTOFF_LO, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
@@ -685,7 +700,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
0xffff, /* dst_mask */
false), /* pcrel_offset */
- /* 16-bit upper half section relative relocation. */
+ /* 16-bit upper half section relative relocation. */
HOWTO (R_PPC_SECTOFF_HI, /* type */
16, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
@@ -700,7 +715,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
0xffff, /* dst_mask */
false), /* pcrel_offset */
- /* 16-bit upper half adjusted section relative relocation. */
+ /* 16-bit upper half adjusted section relative relocation. */
HOWTO (R_PPC_SECTOFF_HA, /* type */
16, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
@@ -931,7 +946,6 @@ static reloc_howto_type ppc_elf_howto_raw[] =
0xffff, /* dst_mask */
false), /* pcrel_offset */
};
-
/* Initialize the ppc_elf_howto_table, so that linear accesses can be done. */
@@ -943,11 +957,10 @@ ppc_elf_howto_init ()
for (i = 0; i < sizeof (ppc_elf_howto_raw) / sizeof (ppc_elf_howto_raw[0]); i++)
{
type = ppc_elf_howto_raw[i].type;
- BFD_ASSERT (type < sizeof(ppc_elf_howto_table) / sizeof(ppc_elf_howto_table[0]));
+ BFD_ASSERT (type < sizeof (ppc_elf_howto_table) / sizeof (ppc_elf_howto_table[0]));
ppc_elf_howto_table[type] = &ppc_elf_howto_raw[i];
}
}
-
/* This function handles relaxing for the PPC with option --mpc860c0[=<n>].
@@ -959,7 +972,7 @@ ppc_elf_howto_init ()
3/ The branch is taken.
4/ The branch is located in the last 5 words of a page.
(The EOP limit is 5 by default but may be specified as any value from 1-10.)
-
+
Our software solution is to detect these problematic branches in a
linker pass and modify them as follows:
1/ Unconditional branches - Since these are always predicted taken,
@@ -975,22 +988,22 @@ ppc_elf_howto_init ()
static int
ppc_elf_sort_rela (arg1, arg2)
- const void *arg1;
- const void *arg2;
+ const void *arg1;
+ const void *arg2;
{
const Elf_Internal_Rela **rela1 = (const Elf_Internal_Rela**) arg1;
const Elf_Internal_Rela **rela2 = (const Elf_Internal_Rela**) arg2;
- /* Sort by offset. */
+ /* Sort by offset. */
return ((*rela1)->r_offset - (*rela2)->r_offset);
}
static boolean
ppc_elf_relax_section (abfd, isec, link_info, again)
- bfd *abfd;
- asection *isec;
- struct bfd_link_info *link_info;
- boolean *again;
+ bfd *abfd;
+ asection *isec;
+ struct bfd_link_info *link_info;
+ boolean *again;
{
#define PAGESIZE 0x1000
@@ -1001,7 +1014,7 @@ ppc_elf_relax_section (abfd, isec, link_info, again)
Elf_Internal_Rela **rela_comb = NULL;
int comb_curr, comb_count;
- /* We never have to do this more than once per input section. */
+ /* We never have to do this more than once per input section. */
*again = false;
/* If needed, initialize this section's cooked size. */
@@ -1009,13 +1022,13 @@ ppc_elf_relax_section (abfd, isec, link_info, again)
isec->_cooked_size = isec->_raw_size;
/* We're only interested in text sections which overlap the
- troublesome area at the end of a page. */
+ troublesome area at the end of a page. */
if (link_info->mpc860c0 && (isec->flags & SEC_CODE) && isec->_cooked_size)
{
bfd_vma dot, end_page, end_section;
boolean section_modified;
- /* Get the section contents. */
+ /* Get the section contents. */
/* Get cached copy if it exists. */
if (elf_section_data (isec)->this_hdr.contents != NULL)
contents = elf_section_data (isec)->this_hdr.contents;
@@ -1024,42 +1037,42 @@ ppc_elf_relax_section (abfd, isec, link_info, again)
/* Go get them off disk. */
contents = (bfd_byte *) bfd_malloc (isec->_raw_size);
if (contents == NULL)
- goto error_return;
+ goto error_return;
free_contents = contents;
if (! bfd_get_section_contents (abfd, isec, contents,
(file_ptr) 0, isec->_raw_size))
- goto error_return;
+ goto error_return;
}
comb_curr = 0;
comb_count = 0;
if (isec->reloc_count)
- {
+ {
unsigned n;
/* Get a copy of the native relocations. */
internal_relocs = _bfd_elf32_link_read_relocs (
- abfd, isec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
+ abfd, isec, (PTR) NULL, (Elf_Internal_Rela *) NULL,
link_info->keep_memory);
if (internal_relocs == NULL)
goto error_return;
if (! link_info->keep_memory)
free_relocs = internal_relocs;
-
- /* Setup a faster access method for the reloc info we need. */
+
+ /* Setup a faster access method for the reloc info we need. */
rela_comb = (Elf_Internal_Rela**)
- bfd_malloc (isec->reloc_count*sizeof(Elf_Internal_Rela*));
+ bfd_malloc (isec->reloc_count*sizeof (Elf_Internal_Rela*));
if (rela_comb == NULL)
goto error_return;
- for (n=0; n<isec->reloc_count; ++n)
+ for (n = 0; n < isec->reloc_count; ++n)
{
long r_type;
-
+
r_type = ELF32_R_TYPE (internal_relocs[n].r_info);
- if (r_type < 0 || r_type >= (int)R_PPC_max)
+ if (r_type < 0 || r_type >= (int) R_PPC_max)
goto error_return;
-
+
/* Prologue constants are sometimes present in the ".text"
sections and they can be identified by their associated relocation.
We don't want to process those words and some others which
@@ -1067,37 +1080,37 @@ ppc_elf_relax_section (abfd, isec, link_info, again)
conditional branches will have a relocation so we will
only ignore words that 1) have a reloc, and 2) the reloc
is not applicable to a conditional branch.
- The array rela_comb is built here for use in the EOP scan loop. */
+ The array rela_comb is built here for use in the EOP scan loop. */
switch (r_type)
{
case R_PPC_ADDR14_BRNTAKEN: /* absolute, predicted not taken */
- case R_PPC_REL14: /* relative cond. br. */
+ case R_PPC_REL14: /* relative cond. br. */
case R_PPC_REL14_BRNTAKEN: /* rel. cond. br., predicted not taken */
- /* We should check the instruction. */
+ /* We should check the instruction. */
break;
default:
- /* The word is not a conditional branch - ignore it. */
+ /* The word is not a conditional branch - ignore it. */
rela_comb[comb_count++] = &internal_relocs[n];
break;
}
}
if (comb_count > 1)
- qsort (rela_comb, (size_t) comb_count, sizeof (int), ppc_elf_sort_rela);
- }
+ qsort (rela_comb, (size_t) comb_count, sizeof (int), ppc_elf_sort_rela);
+ }
- /* Enumerate each EOP region that overlaps this section. */
+ /* Enumerate each EOP region that overlaps this section. */
end_section = isec->vma + isec->_cooked_size;
dot = end_page = (isec->vma | (PAGESIZE - 1)) + 1;
dot -= link_info->mpc860c0;
section_modified = false;
if (dot < isec->vma) /* Increment the start position if this section */
- dot = isec->vma; /* begins in the middle of its first EOP region. */
+ dot = isec->vma; /* begins in the middle of its first EOP region. */
for (;
dot < end_section;
dot += PAGESIZE, end_page += PAGESIZE)
{
- /* Check each word in this EOP region. */
+ /* Check each word in this EOP region. */
for (; dot < end_page; dot += 4)
{
bfd_vma isec_offset;
@@ -1105,7 +1118,7 @@ ppc_elf_relax_section (abfd, isec, link_info, again)
boolean skip, modified;
/* Don't process this word if there is a relocation for it and
- the relocation indicates the word is not a conditional branch. */
+ the relocation indicates the word is not a conditional branch. */
skip = false;
isec_offset = dot - isec->vma;
for (; comb_curr<comb_count; ++comb_curr)
@@ -1121,7 +1134,7 @@ ppc_elf_relax_section (abfd, isec, link_info, again)
}
if (skip) continue;
- /* Check the current word for a problematic conditional branch. */
+ /* Check the current word for a problematic conditional branch. */
#define BO0(insn) ((insn) & 0x02000000)
#define BO2(insn) ((insn) & 0x00800000)
#define BO4(insn) ((insn) & 0x00200000)
@@ -1134,7 +1147,7 @@ ppc_elf_relax_section (abfd, isec, link_info, again)
{
bfd_vma target;
/* This branch is predicted as "normal".
- If this is a forward branch, it is problematic. */
+ If this is a forward branch, it is problematic. */
target = insn & 0x0000Fffc; /*extract*/
target = (target ^ 0x8000) - 0x8000; /*sign extend*/
@@ -1155,7 +1168,7 @@ ppc_elf_relax_section (abfd, isec, link_info, again)
/* This branch is predicted as not-taken.
If this is a forward branch, it is problematic.
Since we can't tell statically if it will branch forward,
- always set the prediction bit. */
+ always set the prediction bit. */
insn |= 0x00200000; /* set the prediction bit */
modified = true;
}
@@ -1168,7 +1181,7 @@ ppc_elf_relax_section (abfd, isec, link_info, again)
/* This branch is predicted as not-taken.
If this is a forward branch, it is problematic.
Since we can't tell statically if it will branch forward,
- always set the prediction bit. */
+ always set the prediction bit. */
insn |= 0x00200000; /* set the prediction bit */
modified = true;
}
@@ -1225,7 +1238,6 @@ error_return:
free (free_contents);
return false;
}
-
static reloc_howto_type *
ppc_elf_reloc_type_lookup (abfd, code)
@@ -1235,13 +1247,13 @@ ppc_elf_reloc_type_lookup (abfd, code)
enum elf_ppc_reloc_type ppc_reloc = R_PPC_NONE;
if (!ppc_elf_howto_table[R_PPC_ADDR32])
- /* Initialize howto table if needed */
+ /* Initialize howto table if needed. */
ppc_elf_howto_init ();
- switch ((int)code)
+ switch ((int) code)
{
default:
- return (reloc_howto_type *)NULL;
+ return (reloc_howto_type *) NULL;
case BFD_RELOC_NONE: ppc_reloc = R_PPC_NONE; break;
case BFD_RELOC_32: ppc_reloc = R_PPC_ADDR32; break;
@@ -1298,7 +1310,7 @@ ppc_elf_reloc_type_lookup (abfd, code)
case BFD_RELOC_VTABLE_ENTRY: ppc_reloc = R_PPC_GNU_VTENTRY; break;
}
- return ppc_elf_howto_table[ (int)ppc_reloc ];
+ return ppc_elf_howto_table[(int) ppc_reloc];
};
/* Set the howto pointer for a PowerPC ELF reloc. */
@@ -1309,7 +1321,8 @@ ppc_elf_info_to_howto (abfd, cache_ptr, dst)
arelent *cache_ptr;
Elf32_Internal_Rela *dst;
{
- if (!ppc_elf_howto_table[ R_PPC_ADDR32 ]) /* Initialize howto table if needed */
+ if (!ppc_elf_howto_table[R_PPC_ADDR32])
+ /* Initialize howto table if needed. */
ppc_elf_howto_init ();
BFD_ASSERT (ELF32_R_TYPE (dst->r_info) < (unsigned int) R_PPC_max);
@@ -1354,7 +1367,7 @@ ppc_elf_addr16_ha_reloc (abfd, reloc_entry, symbol, data, input_section,
return bfd_reloc_continue;
}
-/* Function to set whether a module needs the -mrelocatable bit set. */
+/* Function to set whether a module needs the -mrelocatable bit set. */
static boolean
ppc_elf_set_private_flags (abfd, flags)
@@ -1399,21 +1412,8 @@ ppc_elf_merge_private_bfd_data (ibfd, obfd)
boolean error;
/* Check if we have the same endianess */
- if (ibfd->xvec->byteorder != obfd->xvec->byteorder
- && obfd->xvec->byteorder != BFD_ENDIAN_UNKNOWN)
- {
- const char *msg;
-
- if (bfd_big_endian (ibfd))
- msg = _("%s: compiled for a big endian system and target is little endian");
- else
- msg = _("%s: compiled for a little endian system and target is big endian");
-
- (*_bfd_error_handler) (msg, bfd_get_filename (ibfd));
-
- bfd_set_error (bfd_error_wrong_format);
- return false;
- }
+ if (_bfd_generic_verify_endian_match (ibfd, obfd) == false)
+ return false;
if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
@@ -1475,7 +1475,7 @@ ppc_elf_merge_private_bfd_data (ibfd, obfd)
error = true;
(*_bfd_error_handler)
(_("%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
- bfd_get_filename (ibfd), (long)new_flags, (long)old_flags);
+ bfd_get_filename (ibfd), (long) new_flags, (long) old_flags);
}
if (error)
@@ -1487,7 +1487,6 @@ ppc_elf_merge_private_bfd_data (ibfd, obfd)
return true;
}
-
/* Handle a PowerPC specific section when reading an object file. This
is called when elfcode.h finds a section with an unknown type. */
@@ -1515,7 +1514,6 @@ ppc_elf_section_from_shdr (abfd, hdr, name)
bfd_set_section_flags (abfd, newsect, flags);
return true;
}
-
/* Set up any other section flags and such that may be necessary. */
@@ -1533,7 +1531,6 @@ ppc_elf_fake_sections (abfd, shdr, asect)
return true;
}
-
/* Create a special linker section */
static elf_linker_section_t *
@@ -1577,10 +1574,10 @@ ppc_elf_create_linker_section (abfd, info, which)
default:
(*_bfd_error_handler) (_("%s: Unknown special linker type %d"),
bfd_get_filename (abfd),
- (int)which);
+ (int) which);
bfd_set_error (bfd_error_bad_value);
- return (elf_linker_section_t *)0;
+ return (elf_linker_section_t *) 0;
case LINKER_SECTION_SDATA: /* .sdata/.sbss section */
defaults.name = ".sdata";
@@ -1605,10 +1602,9 @@ ppc_elf_create_linker_section (abfd, info, which)
return lsect;
}
-
-/* If we have a non-zero sized .sbss2 or .PPC.EMB.sbss0 sections, we need to bump up
- the number of section headers. */
+/* If we have a non-zero sized .sbss2 or .PPC.EMB.sbss0 sections, we
+ need to bump up the number of section headers. */
static int
ppc_elf_additional_program_headers (abfd)
@@ -1634,7 +1630,7 @@ ppc_elf_additional_program_headers (abfd)
return ret;
}
-/* Modify the segment map if needed */
+/* Modify the segment map if needed. */
static boolean
ppc_elf_modify_segment_map (abfd)
@@ -1655,7 +1651,7 @@ ppc_elf_create_dynamic_sections (abfd, info)
register asection *s;
flagword flags;
- if (!_bfd_elf_create_dynamic_sections(abfd, info))
+ if (!_bfd_elf_create_dynamic_sections (abfd, info))
return false;
flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
@@ -1708,7 +1704,6 @@ ppc_elf_adjust_dynamic_symbol (info, h)
&& (h->elf_link_hash_flags
& ELF_LINK_HASH_DEF_REGULAR) == 0)));
-
/* If this is a function, put it in the procedure linkage table. We
will fill in the contents of the procedure linkage table later,
when we know the address of the .got section. */
@@ -1716,9 +1711,7 @@ ppc_elf_adjust_dynamic_symbol (info, h)
|| (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
{
if (! elf_hash_table (info)->dynamic_sections_created
- || ((!info->shared || info->symbolic || h->dynindx == -1)
- && (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_REGULAR) != 0)
+ || SYMBOL_CALLS_LOCAL (info, h)
|| (info->shared && h->plt.refcount <= 0))
{
/* A PLT entry is not required/allowed when:
@@ -1726,9 +1719,8 @@ ppc_elf_adjust_dynamic_symbol (info, h)
1. We are not using ld.so; because then the PLT entry
can't be set up, so we can't use one.
- 2. We know for certain that a symbol is defined in
- this object, because this object is the application,
- is linked with -Bsymbolic, or because the symbol is local.
+ 2. We know for certain that a call to this symbol
+ will go to this object.
3. GC has rendered the entry unused.
Note, however, that in an executable all references to the
@@ -1877,7 +1869,6 @@ ppc_elf_adjust_dynamic_symbol (info, h)
return true;
}
-
/* Set the sizes of the dynamic sections. */
@@ -1919,10 +1910,10 @@ ppc_elf_size_dynamic_sections (output_bfd, info)
stripped from the output file below. */
static char *rela_sections[] = { ".rela.got", ".rela.sdata",
".rela.sdata2", ".rela.sbss",
- (char *)0 };
+ (char *) 0 };
char **p;
- for (p = rela_sections; *p != (char *)0; p++)
+ for (p = rela_sections; *p != (char *) 0; p++)
{
s = bfd_get_section_by_name (dynobj, *p);
if (s != NULL)
@@ -1984,7 +1975,7 @@ ppc_elf_size_dynamic_sections (output_bfd, info)
asection *target;
const char *outname;
- /* Remember whether there are any relocation sections. */
+ /* Remember whether there are any relocation sections. */
relocs = true;
/* If this relocation section applies to a read only
@@ -2057,12 +2048,12 @@ ppc_elf_size_dynamic_sections (output_bfd, info)
{
if (! bfd_elf32_add_dynamic_entry (info, DT_TEXTREL, 0))
return false;
+ info->flags |= DF_TEXTREL;
}
}
return true;
}
-
/* Look through the relocs for a section during the first phase, and
allocate space in the global offset table or procedure linkage
@@ -2106,7 +2097,6 @@ ppc_elf_check_relocs (abfd, info, sec, relocs)
return false;
}
-
if ((sdata2 = elf_linker_section (abfd, LINKER_SECTION_SDATA2)) == NULL)
{
sdata2 = ppc_elf_create_linker_section (abfd, info, LINKER_SECTION_SDATA2);
@@ -2119,7 +2109,7 @@ ppc_elf_check_relocs (abfd, info, sec, relocs)
local_got_refcounts = elf_local_got_refcounts (abfd);
sym_hashes = elf_sym_hashes (abfd);
- sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof(Elf32_External_Sym);
+ sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof (Elf32_External_Sym);
if (!elf_bad_symtab (abfd))
sym_hashes_end -= symtab_hdr->sh_info;
@@ -2250,7 +2240,7 @@ ppc_elf_check_relocs (abfd, info, sec, relocs)
((*_bfd_error_handler)
(_("%s: relocation %s cannot be used when making a shared object"),
bfd_get_filename (abfd), "R_PPC_EMB_SDAI16"));
- return false;
+ return false;
}
if (srelgot == NULL && (h != NULL || info->shared))
@@ -2319,7 +2309,7 @@ ppc_elf_check_relocs (abfd, info, sec, relocs)
((*_bfd_error_handler)
(_("%s: relocation %s cannot be used when making a shared object"),
bfd_get_filename (abfd),
- ppc_elf_howto_table[(int)ELF32_R_TYPE (rel->r_info)]->name));
+ ppc_elf_howto_table[(int) ELF32_R_TYPE (rel->r_info)]->name));
return false;
}
break;
@@ -2397,7 +2387,8 @@ ppc_elf_check_relocs (abfd, info, sec, relocs)
case R_PPC_REL14_BRNTAKEN:
case R_PPC_REL32:
if (h == NULL
- || strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0)
+ || strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0
+ || SYMBOL_REFERENCES_LOCAL (info, h))
break;
/* fall through */
@@ -2540,7 +2531,7 @@ ppc_elf_gc_sweep_hook (abfd, info, sec, relocs)
if (h->got.refcount > 0)
h->got.refcount--;
}
- else
+ else if (local_got_refcounts != NULL)
{
if (local_got_refcounts[r_symndx] > 0)
local_got_refcounts[r_symndx]--;
@@ -2571,7 +2562,6 @@ ppc_elf_gc_sweep_hook (abfd, info, sec, relocs)
/* Hook called by the linker routine which adds symbols from an object
file. We use it to put .comm items in .sbss, and not .bss. */
-/*ARGSUSED*/
static boolean
ppc_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
bfd *abfd;
@@ -2623,7 +2613,6 @@ ppc_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
return true;
}
-
/* Finish up dynamic symbol handling. We set the contents of various
dynamic sections here. */
@@ -2691,7 +2680,7 @@ ppc_elf_finish_dynamic_symbol (output_bfd, info, h, sym)
Otherwise, the PLT entry would provide a definition for
the symbol even if the symbol wasn't defined anywhere,
and so the symbol would never be NULL. */
- if ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK)
+ if ((h->elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR_NONWEAK)
== 0)
sym->st_value = 0;
}
@@ -2719,8 +2708,7 @@ ppc_elf_finish_dynamic_symbol (output_bfd, info, h, sym)
the global offset table will already have been initialized in
the relocate_section function. */
if (info->shared
- && (info->symbolic || h->dynindx == -1)
- && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR))
+ && SYMBOL_REFERENCES_LOCAL (info, h))
{
rela.r_info = ELF32_R_INFO (0, R_PPC_RELATIVE);
rela.r_addend = (h->root.u.def.value
@@ -2729,7 +2717,7 @@ ppc_elf_finish_dynamic_symbol (output_bfd, info, h, sym)
}
else
{
- BFD_ASSERT((h->got.offset & 1) == 0);
+ BFD_ASSERT ((h->got.offset & 1) == 0);
bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset);
rela.r_info = ELF32_R_INFO (h->dynindx, R_PPC_GLOB_DAT);
rela.r_addend = 0;
@@ -2785,7 +2773,6 @@ ppc_elf_finish_dynamic_symbol (output_bfd, info, h, sym)
return true;
}
-
/* Finish up the dynamic sections. */
@@ -2873,7 +2860,6 @@ ppc_elf_finish_dynamic_sections (output_bfd, info)
return true;
}
-
/* The RELOCATE_SECTION function is called by the ELF backend linker
to handle the relocations for a section.
@@ -2934,11 +2920,12 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
fprintf (stderr, "ppc_elf_relocate_section called for %s section %s, %ld relocations%s\n",
bfd_get_filename (input_bfd),
bfd_section_name(input_bfd, input_section),
- (long)input_section->reloc_count,
+ (long) input_section->reloc_count,
(info->relocateable) ? " (relocatable)" : "");
#endif
- if (!ppc_elf_howto_table[ R_PPC_ADDR32 ]) /* Initialize howto table if needed */
+ if (!ppc_elf_howto_table[R_PPC_ADDR32])
+ /* Initialize howto table if needed. */
ppc_elf_howto_init ();
local_got_offsets = elf_local_got_offsets (input_bfd);
@@ -2956,27 +2943,29 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
bfd_vma offset = rel->r_offset;
bfd_vma addend = rel->r_addend;
bfd_reloc_status_type r = bfd_reloc_other;
- Elf_Internal_Sym *sym = (Elf_Internal_Sym *)0;
- asection *sec = (asection *)0;
- struct elf_link_hash_entry *h = (struct elf_link_hash_entry *)0;
- const char *sym_name = (const char *)0;
+ Elf_Internal_Sym *sym = (Elf_Internal_Sym *) 0;
+ asection *sec = (asection *) 0;
+ struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) 0;
+ const char *sym_name = (const char *) 0;
reloc_howto_type *howto;
unsigned long r_symndx;
bfd_vma relocation;
+ int will_become_local;
/* Unknown relocation handling */
- if ((unsigned)r_type >= (unsigned)R_PPC_max || !ppc_elf_howto_table[(int)r_type])
+ if ((unsigned) r_type >= (unsigned) R_PPC_max
+ || !ppc_elf_howto_table[(int) r_type])
{
(*_bfd_error_handler) (_("%s: unknown relocation type %d"),
bfd_get_filename (input_bfd),
- (int)r_type);
+ (int) r_type);
bfd_set_error (bfd_error_bad_value);
ret = false;
continue;
}
- howto = ppc_elf_howto_table[(int)r_type];
+ howto = ppc_elf_howto_table[(int) r_type];
r_symndx = ELF32_R_SYM (rel->r_info);
if (info->relocateable)
@@ -2988,7 +2977,7 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
if (r_symndx < symtab_hdr->sh_info)
{
sym = local_syms + r_symndx;
- if ((unsigned)ELF_ST_TYPE (sym->st_info) == STT_SECTION)
+ if ((unsigned) ELF_ST_TYPE (sym->st_info) == STT_SECTION)
{
sec = local_sections[r_symndx];
addend = rel->r_addend += sec->output_offset + sym->st_value;
@@ -2998,10 +2987,10 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
#ifdef DEBUG
fprintf (stderr, "\ttype = %s (%d), symbol index = %ld, offset = %ld, addend = %ld\n",
howto->name,
- (int)r_type,
+ (int) r_type,
r_symndx,
- (long)offset,
- (long)addend);
+ (long) offset,
+ (long) addend);
#endif
continue;
}
@@ -3016,6 +3005,8 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
relocation = (sec->output_section->vma
+ sec->output_offset
+ sym->st_value);
+ /* Relocs to local symbols are always resolved. */
+ will_become_local = 1;
}
else
{
@@ -3024,11 +3015,17 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
|| h->root.type == bfd_link_hash_warning)
h = (struct elf_link_hash_entry *) h->root.u.i.link;
sym_name = h->root.root.string;
+
+ /* Can this relocation be resolved immediately? */
+ will_become_local = SYMBOL_REFERENCES_LOCAL (info, h);
+
if (h->root.type == bfd_link_hash_defined
|| h->root.type == bfd_link_hash_defweak)
{
sec = h->root.u.def.section;
- if ((r_type == R_PPC_PLT32
+ if (((r_type == R_PPC_PLT32
+ || r_type == R_PPC_PLTREL24)
+ && splt != NULL
&& h->plt.offset != (bfd_vma) -1)
|| (r_type == R_PPC_LOCAL24PC
&& sec->output_section == NULL)
@@ -3037,20 +3034,17 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
|| r_type == R_PPC_GOT16_HI
|| r_type == R_PPC_GOT16_HA)
&& elf_hash_table (info)->dynamic_sections_created
- && (! info->shared
- || (! info->symbolic && h->dynindx != -1)
- || (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_REGULAR) == 0))
+ && (! info->shared || ! will_become_local))
|| (info->shared
- && ((! info->symbolic && h->dynindx != -1)
- || (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_REGULAR) == 0)
+ && ! will_become_local
&& ((input_section->flags & SEC_ALLOC) != 0
/* Testing SEC_DEBUGGING here may be wrong.
It's here to avoid a crash when
generating a shared library with DWARF
debugging information. */
- || (input_section->flags & SEC_DEBUGGING) != 0)
+ || ((input_section->flags & SEC_DEBUGGING) != 0
+ && (h->elf_link_hash_flags
+ & ELF_LINK_HASH_DEF_DYNAMIC) != 0))
&& (r_type == R_PPC_ADDR32
|| r_type == R_PPC_ADDR24
|| r_type == R_PPC_ADDR16
@@ -3060,7 +3054,6 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
|| r_type == R_PPC_ADDR14
|| r_type == R_PPC_ADDR14_BRTAKEN
|| r_type == R_PPC_ADDR14_BRNTAKEN
- || r_type == R_PPC_PLTREL24
|| r_type == R_PPC_COPY
|| r_type == R_PPC_GLOB_DAT
|| r_type == R_PPC_JMP_SLOT
@@ -3094,13 +3087,13 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
relocation = 0;
}
else if (sec->output_section == NULL)
- {
+ {
(*_bfd_error_handler)
(_("%s: warning: unresolvable relocation against symbol `%s' from %s section"),
bfd_get_filename (input_bfd), h->root.root.string,
bfd_get_section_name (input_bfd, input_section));
relocation = 0;
- }
+ }
else
relocation = (h->root.u.def.value
+ sec->output_section->vma
@@ -3108,13 +3101,12 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
}
else if (h->root.type == bfd_link_hash_undefweak)
relocation = 0;
- else if (info->shared && !info->symbolic
- && !info->no_undefined
+ else if (info->shared && !info->symbolic && !info->no_undefined
&& ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
relocation = 0;
else
{
- if (! (*info->callbacks->undefined_symbol)(info,
+ if (! (*info->callbacks->undefined_symbol) (info,
h->root.root.string,
input_bfd,
input_section,
@@ -3127,19 +3119,19 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
}
}
- switch ((int)r_type)
+ switch ((int) r_type)
{
default:
(*_bfd_error_handler) (_("%s: unknown relocation type %d for symbol %s"),
bfd_get_filename (input_bfd),
- (int)r_type, sym_name);
+ (int) r_type, sym_name);
bfd_set_error (bfd_error_bad_value);
ret = false;
continue;
/* Relocations that need no special processing. */
- case (int)R_PPC_LOCAL24PC:
+ case (int) R_PPC_LOCAL24PC:
/* It makes no sense to point a local relocation
at a symbol not in this object. */
if (h != NULL
@@ -3160,28 +3152,29 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
/* Relocations that may need to be propagated if this is a shared
object. */
- case (int)R_PPC_REL24:
- case (int)R_PPC_REL32:
- case (int)R_PPC_REL14:
+ case (int) R_PPC_REL24:
+ case (int) R_PPC_REL32:
+ case (int) R_PPC_REL14:
/* If these relocations are not to a named symbol, they can be
handled right here, no need to bother the dynamic linker. */
if (h == NULL
- || strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0)
+ || strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0
+ || SYMBOL_REFERENCES_LOCAL (info, h))
break;
/* fall through */
/* Relocations that always need to be propagated if this is a shared
object. */
- case (int)R_PPC_NONE:
- case (int)R_PPC_ADDR32:
- case (int)R_PPC_ADDR24:
- case (int)R_PPC_ADDR16:
- case (int)R_PPC_ADDR16_LO:
- case (int)R_PPC_ADDR16_HI:
- case (int)R_PPC_ADDR16_HA:
- case (int)R_PPC_ADDR14:
- case (int)R_PPC_UADDR32:
- case (int)R_PPC_UADDR16:
+ case (int) R_PPC_NONE:
+ case (int) R_PPC_ADDR32:
+ case (int) R_PPC_ADDR24:
+ case (int) R_PPC_ADDR16:
+ case (int) R_PPC_ADDR16_LO:
+ case (int) R_PPC_ADDR16_HI:
+ case (int) R_PPC_ADDR16_HA:
+ case (int) R_PPC_ADDR14:
+ case (int) R_PPC_UADDR32:
+ case (int) R_PPC_UADDR16:
if (info->shared)
{
Elf_Internal_Rela outrel;
@@ -3241,12 +3234,8 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
memset (&outrel, 0, sizeof outrel);
/* h->dynindx may be -1 if this symbol was marked to
become local. */
- else if (h != NULL
- && ((! info->symbolic && h->dynindx != -1)
- || (h->elf_link_hash_flags
- & ELF_LINK_HASH_DEF_REGULAR) == 0))
+ else if (! will_become_local)
{
- BFD_ASSERT (h->dynindx != -1);
outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
outrel.r_addend = rel->r_addend;
}
@@ -3283,11 +3272,11 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
osec = sec->output_section;
indx = elf_section_data (osec)->dynindx;
- BFD_ASSERT(indx > 0);
+ BFD_ASSERT (indx > 0);
#ifdef DEBUG
if (indx <= 0)
{
- printf("indx=%d section=%s flags=%08x name=%s\n",
+ printf ("indx=%d section=%s flags=%08x name=%s\n",
indx, osec->name, osec->flags,
h->root.root.string);
}
@@ -3328,8 +3317,8 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
break;
/* branch taken prediction relocations */
- case (int)R_PPC_ADDR14_BRTAKEN:
- case (int)R_PPC_REL14_BRTAKEN:
+ case (int) R_PPC_ADDR14_BRTAKEN:
+ case (int) R_PPC_REL14_BRTAKEN:
insn = bfd_get_32 (output_bfd, contents + offset);
if ((relocation - offset) & 0x8000)
insn &= ~BRANCH_PREDICT_BIT;
@@ -3339,8 +3328,8 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
break;
/* branch not taken predicition relocations */
- case (int)R_PPC_ADDR14_BRNTAKEN:
- case (int)R_PPC_REL14_BRNTAKEN:
+ case (int) R_PPC_ADDR14_BRNTAKEN:
+ case (int) R_PPC_REL14_BRNTAKEN:
insn = bfd_get_32 (output_bfd, contents + offset);
if ((relocation - offset) & 0x8000)
insn |= BRANCH_PREDICT_BIT;
@@ -3350,10 +3339,10 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
break;
/* GOT16 relocations */
- case (int)R_PPC_GOT16:
- case (int)R_PPC_GOT16_LO:
- case (int)R_PPC_GOT16_HI:
- case (int)R_PPC_GOT16_HA:
+ case (int) R_PPC_GOT16:
+ case (int) R_PPC_GOT16_LO:
+ case (int) R_PPC_GOT16_HI:
+ case (int) R_PPC_GOT16_HA:
/* Relocation is to the entry for this symbol in the global
offset table. */
BFD_ASSERT (sgot != NULL);
@@ -3367,8 +3356,7 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
if (! elf_hash_table (info)->dynamic_sections_created
|| (info->shared
- && (info->symbolic || h->dynindx == -1)
- && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
+ && SYMBOL_REFERENCES_LOCAL (info, h)))
{
/* This is actually a static link, or it is a
-Bsymbolic link and the symbol is defined
@@ -3441,7 +3429,7 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
break;
/* Indirect .sdata relocation */
- case (int)R_PPC_EMB_SDAI16:
+ case (int) R_PPC_EMB_SDAI16:
BFD_ASSERT (sdata != NULL);
relocation = bfd_elf32_finish_pointer_linker_section (output_bfd, input_bfd, info,
sdata, h, relocation, rel,
@@ -3449,7 +3437,7 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
break;
/* Indirect .sdata2 relocation */
- case (int)R_PPC_EMB_SDA2I16:
+ case (int) R_PPC_EMB_SDA2I16:
BFD_ASSERT (sdata2 != NULL);
relocation = bfd_elf32_finish_pointer_linker_section (output_bfd, input_bfd, info,
sdata2, h, relocation, rel,
@@ -3460,8 +3448,8 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
section, not the actual VMA. This is appropriate when generating
an embedded ELF object, for which the .got section acts like the
AIX .toc section. */
- case (int)R_PPC_TOC16: /* phony GOT16 relocations */
- BFD_ASSERT (sec != (asection *)0);
+ case (int) R_PPC_TOC16: /* phony GOT16 relocations */
+ BFD_ASSERT (sec != (asection *) 0);
BFD_ASSERT (bfd_is_und_section (sec)
|| strcmp (bfd_get_section_name (abfd, sec), ".got") == 0
|| strcmp (bfd_get_section_name (abfd, sec), ".cgot") == 0)
@@ -3469,7 +3457,7 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
addend -= sec->output_section->vma + sec->output_offset + 0x8000;
break;
- case (int)R_PPC_PLTREL24:
+ case (int) R_PPC_PLTREL24:
/* Relocation is to the entry for this symbol in the
procedure linkage table. */
BFD_ASSERT (h != NULL);
@@ -3486,14 +3474,14 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
relocation = (splt->output_section->vma
+ splt->output_offset
+ h->plt.offset);
- break;
+ break;
/* relocate against _SDA_BASE_ */
- case (int)R_PPC_SDAREL16:
+ case (int) R_PPC_SDAREL16:
{
const char *name;
- BFD_ASSERT (sec != (asection *)0);
+ BFD_ASSERT (sec != (asection *) 0);
name = bfd_get_section_name (abfd, sec->output_section);
if (strcmp (name, ".sdata") != 0
&& strcmp (name, ".sbss") != 0)
@@ -3501,7 +3489,7 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
(*_bfd_error_handler) (_("%s: The target (%s) of a %s relocation is in the wrong output section (%s)"),
bfd_get_filename (input_bfd),
sym_name,
- ppc_elf_howto_table[ (int)r_type ]->name,
+ ppc_elf_howto_table[(int) r_type]->name,
name);
}
addend -= (sdata->sym_hash->root.u.def.value
@@ -3510,22 +3498,21 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
}
break;
-
/* relocate against _SDA2_BASE_ */
- case (int)R_PPC_EMB_SDA2REL:
+ case (int) R_PPC_EMB_SDA2REL:
{
const char *name;
- BFD_ASSERT (sec != (asection *)0);
+ BFD_ASSERT (sec != (asection *) 0);
name = bfd_get_section_name (abfd, sec->output_section);
if (strcmp (name, ".sdata2") != 0 && strcmp (name, ".sbss2") != 0)
{
(*_bfd_error_handler) (_("%s: The target (%s) of a %s relocation is in the wrong output section (%s)"),
bfd_get_filename (input_bfd),
sym_name,
- ppc_elf_howto_table[ (int)r_type ]->name,
+ ppc_elf_howto_table[(int) r_type]->name,
name);
-
+
bfd_set_error (bfd_error_bad_value);
ret = false;
continue;
@@ -3536,15 +3523,14 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
}
break;
-
/* relocate against either _SDA_BASE_, _SDA2_BASE_, or 0 */
- case (int)R_PPC_EMB_SDA21:
- case (int)R_PPC_EMB_RELSDA:
+ case (int) R_PPC_EMB_SDA21:
+ case (int) R_PPC_EMB_RELSDA:
{
const char *name;
int reg;
- BFD_ASSERT (sec != (asection *)0);
+ BFD_ASSERT (sec != (asection *) 0);
name = bfd_get_section_name (abfd, sec->output_section);
if (strcmp (name, ".sdata") == 0 || strcmp (name, ".sbss") == 0)
{
@@ -3554,7 +3540,8 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
+ sdata->sym_hash->root.u.def.section->output_offset);
}
- else if (strcmp (name, ".sdata2") == 0 || strcmp (name, ".sbss2") == 0)
+ else if (strcmp (name, ".sdata2") == 0
+ || strcmp (name, ".sbss2") == 0)
{
reg = 2;
addend -= (sdata2->sym_hash->root.u.def.value
@@ -3562,7 +3549,8 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
+ sdata2->sym_hash->root.u.def.section->output_offset);
}
- else if (strcmp (name, ".PPC.EMB.sdata0") == 0 || strcmp (name, ".PPC.EMB.sbss0") == 0)
+ else if (strcmp (name, ".PPC.EMB.sdata0") == 0
+ || strcmp (name, ".PPC.EMB.sbss0") == 0)
{
reg = 0;
}
@@ -3572,7 +3560,7 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
(*_bfd_error_handler) (_("%s: The target (%s) of a %s relocation is in the wrong output section (%s)"),
bfd_get_filename (input_bfd),
sym_name,
- ppc_elf_howto_table[ (int)r_type ]->name,
+ ppc_elf_howto_table[(int) r_type]->name,
name);
bfd_set_error (bfd_error_bad_value);
@@ -3590,75 +3578,74 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
break;
/* Relocate against the beginning of the section */
- case (int)R_PPC_SECTOFF:
- case (int)R_PPC_SECTOFF_LO:
- case (int)R_PPC_SECTOFF_HI:
- BFD_ASSERT (sec != (asection *)0);
+ case (int) R_PPC_SECTOFF:
+ case (int) R_PPC_SECTOFF_LO:
+ case (int) R_PPC_SECTOFF_HI:
+ BFD_ASSERT (sec != (asection *) 0);
addend -= sec->output_section->vma;
break;
- case (int)R_PPC_SECTOFF_HA:
- BFD_ASSERT (sec != (asection *)0);
+ case (int) R_PPC_SECTOFF_HA:
+ BFD_ASSERT (sec != (asection *) 0);
addend -= sec->output_section->vma;
addend += ((relocation + addend) & 0x8000) << 1;
break;
/* Negative relocations */
- case (int)R_PPC_EMB_NADDR32:
- case (int)R_PPC_EMB_NADDR16:
- case (int)R_PPC_EMB_NADDR16_LO:
- case (int)R_PPC_EMB_NADDR16_HI:
- addend -= 2*relocation;
+ case (int) R_PPC_EMB_NADDR32:
+ case (int) R_PPC_EMB_NADDR16:
+ case (int) R_PPC_EMB_NADDR16_LO:
+ case (int) R_PPC_EMB_NADDR16_HI:
+ addend -= 2 * relocation;
break;
- case (int)R_PPC_EMB_NADDR16_HA:
- addend -= 2*relocation;
+ case (int) R_PPC_EMB_NADDR16_HA:
+ addend -= 2 * relocation;
addend += ((relocation + addend) & 0x8000) << 1;
break;
/* NOP relocation that prevents garbage collecting linkers from omitting a
reference. */
- case (int)R_PPC_EMB_MRKREF:
+ case (int) R_PPC_EMB_MRKREF:
continue;
- case (int)R_PPC_COPY:
- case (int)R_PPC_GLOB_DAT:
- case (int)R_PPC_JMP_SLOT:
- case (int)R_PPC_RELATIVE:
- case (int)R_PPC_PLT32:
- case (int)R_PPC_PLTREL32:
- case (int)R_PPC_PLT16_LO:
- case (int)R_PPC_PLT16_HI:
- case (int)R_PPC_PLT16_HA:
- case (int)R_PPC_EMB_RELSEC16:
- case (int)R_PPC_EMB_RELST_LO:
- case (int)R_PPC_EMB_RELST_HI:
- case (int)R_PPC_EMB_RELST_HA:
- case (int)R_PPC_EMB_BIT_FLD:
+ case (int) R_PPC_COPY:
+ case (int) R_PPC_GLOB_DAT:
+ case (int) R_PPC_JMP_SLOT:
+ case (int) R_PPC_RELATIVE:
+ case (int) R_PPC_PLT32:
+ case (int) R_PPC_PLTREL32:
+ case (int) R_PPC_PLT16_LO:
+ case (int) R_PPC_PLT16_HI:
+ case (int) R_PPC_PLT16_HA:
+ case (int) R_PPC_EMB_RELSEC16:
+ case (int) R_PPC_EMB_RELST_LO:
+ case (int) R_PPC_EMB_RELST_HI:
+ case (int) R_PPC_EMB_RELST_HA:
+ case (int) R_PPC_EMB_BIT_FLD:
(*_bfd_error_handler) (_("%s: Relocation %s is not yet supported for symbol %s."),
bfd_get_filename (input_bfd),
- ppc_elf_howto_table[ (int)r_type ]->name,
+ ppc_elf_howto_table[(int) r_type]->name,
sym_name);
bfd_set_error (bfd_error_invalid_operation);
ret = false;
continue;
- case (int)R_PPC_GNU_VTINHERIT:
- case (int)R_PPC_GNU_VTENTRY:
+ case (int) R_PPC_GNU_VTINHERIT:
+ case (int) R_PPC_GNU_VTENTRY:
/* These are no-ops in the end. */
continue;
}
-
#ifdef DEBUG
fprintf (stderr, "\ttype = %s (%d), name = %s, symbol index = %ld, offset = %ld, addend = %ld\n",
howto->name,
- (int)r_type,
+ (int) r_type,
sym_name,
r_symndx,
- (long)offset,
- (long)addend);
+ (long) offset,
+ (long) addend);
#endif
r = _bfd_final_link_relocate (howto,
@@ -3702,7 +3689,7 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
name = bfd_section_name (input_bfd, sec);
}
- if (! (*info->callbacks->reloc_overflow)(info,
+ if (! (*info->callbacks->reloc_overflow) (info,
name,
howto->name,
(bfd_vma) 0,
@@ -3721,7 +3708,6 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
return ret;
}
-
#define TARGET_LITTLE_SYM bfd_elf32_powerpcle_vec
#define TARGET_LITTLE_NAME "elf32-powerpcle"
OpenPOWER on IntegriCloud