* elf64-alpha.c: Fix formatting.
* elf64-hppa.c: Likewise.
* elf64-mips.c: Likewise.
2000-12-08 Kazu Hirata <kazu@hxi.com>
* coffgen.c: Fix formatting.
+ * elf-m10300.c: Likewise.
* elf32-i386.c: Likewise.
* elf32-i960.c: Likewise.
* elf32-m68k.c: Likewise.
* elf32-sh.c: Likewise.
* elf32-sparc.c: Likewise.
* elf32-v850.c: Likewise.
+ * elf64-alpha.c: Likewise.
+ * elf64-hppa.c: Likewise.
+ * elf64-mips.c: Likewise.
* elf64-sparc.c: Likewise.
- * elf-m10300.c: Likewise.
2000-12-07 Kazu Hirata <kazu@hxi.com>
#define NO_COFF_SYMBOLS
#define NO_COFF_LINENOS
-/* Get the ECOFF swapping routines. Needed for the debug information. */
+/* Get the ECOFF swapping routines. Needed for the debug information. */
#include "coff/internal.h"
#include "coff/sym.h"
#include "coff/symconst.h"
false), /* pcrel_offset */
/* The high bits of a 32-bit displacement to the starting address of the
- current section (the relocation target is ignored); the low bits are
+ current section (the relocation target is ignored); the low bits are
supplied in the subsequent R_ALPHA_IMMED_LO32 relocs. */
/* XXX: Not implemented. */
HOWTO (R_ALPHA_IMMED_SCN_HI32,
0, /* dst_mask */
false), /* pcrel_offset */
- /* Misc ELF relocations. */
+ /* Misc ELF relocations. */
/* A dynamic relocation to copy the target into our .dynbss section. */
/* Not generated, as all Alpha objects use PIC, so it is not needed. It
/* The BFD_RELOC_ALPHA_USER_* relocations are used by the assembler to process
the explicit !<reloc>!sequence relocations, and are mapped into the normal
- relocations at the end of processing. */
+ relocations at the end of processing. */
{BFD_RELOC_ALPHA_USER_LITERAL, R_ALPHA_LITERAL},
{BFD_RELOC_ALPHA_USER_LITUSE_BASE, R_ALPHA_LITUSE},
{BFD_RELOC_ALPHA_USER_LITUSE_BYTOFF, R_ALPHA_LITUSE},
cache_ptr->howto = &elf64_alpha_howto_table[r_type];
}
\f
-/* These functions do relaxation for Alpha ELF.
+/* These functions do relaxation for Alpha ELF.
Currently I'm only handling what I can do with existing compiler
and assembler support, which means no instructions are removed,
};
static Elf_Internal_Rela * elf64_alpha_relax_with_lituse
- PARAMS((struct alpha_relax_info *info, bfd_vma symval,
+ PARAMS((struct alpha_relax_info *info, bfd_vma symval,
Elf_Internal_Rela *irel, Elf_Internal_Rela *irelend));
static boolean elf64_alpha_relax_without_lituse
- PARAMS((struct alpha_relax_info *info, bfd_vma symval,
+ PARAMS((struct alpha_relax_info *info, bfd_vma symval,
Elf_Internal_Rela *irel));
static bfd_vma elf64_alpha_relax_opt_call
flags |= 1 << urel->r_addend;
}
- /* A little preparation for the loop... */
+ /* A little preparation for the loop... */
disp = symval - info->gp;
for (urel = irel+1, i = 0; i < count; ++i, ++urel)
if (fits16)
{
/* Take the op code and dest from this insn, take the base
- register from the literal insn. Leave the offset alone. */
+ register from the literal insn. Leave the offset alone. */
insn = (insn & 0xffe0ffff) | (lit_insn & 0x001f0000);
urel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info),
R_ALPHA_GPRELLOW);
{
Elf_Internal_Rela *xrel;
- /* Preserve branch prediction call stack when possible. */
+ /* Preserve branch prediction call stack when possible. */
if ((insn & INSN_JSR_MASK) == INSN_JSR)
insn = (OP_BSR << 26) | (insn & 0x03e00000);
else
insn = (OP_BR << 26) | (insn & 0x03e00000);
-
+
urel->r_info = ELF64_R_INFO (ELF64_R_SYM (irel->r_info),
R_ALPHA_BRADDR);
urel->r_addend = irel->r_addend;
/* Kill any HINT reloc that might exist for this insn. */
xrel = (elf64_alpha_find_reloc_at_ofs
- (info->relocs, info->relend, urel->r_offset,
+ (info->relocs, info->relend, urel->r_offset,
R_ALPHA_HINT));
if (xrel)
xrel->r_info = ELF64_R_INFO (0, R_ALPHA_NONE);
This does depend on every place a gp could be reloaded will
be, which currently happens for all code produced by gcc, but
not necessarily by hand-coded assembly, or if sibling calls
- are enabled in gcc.
+ are enabled in gcc.
Perhaps conditionalize this on a flag being set in the target
object file's header, and have gcc set it? */
return symval;
/* If the symbol is marked STD_GP, we are being told the function does
- a normal ldgp in the first two words. */
+ a normal ldgp in the first two words. */
else if ((info->other & STO_ALPHA_STD_GPLOAD) == STO_ALPHA_STD_GPLOAD)
;
/* Otherwise, we may be able to identify a GP load in the first two
words, which we can then skip. */
- else
+ else
{
Elf_Internal_Rela *tsec_relocs, *tsec_relend, *tsec_free, *gpdisp;
bfd_vma ofs;
- /* Load the relocations from the section that the target symbol is in. */
+ /* Load the relocations from the section that the target symbol is in. */
if (info->sec == info->tsec)
{
tsec_relocs = info->relocs;
/* Recover the symbol's offset within the section. */
ofs = (symval - info->tsec->output_section->vma
- info->tsec->output_offset);
-
+
/* Look for a GPDISP reloc. */
gpdisp = (elf64_alpha_find_reloc_at_ofs
(tsec_relocs, tsec_relend, ofs, R_ALPHA_GPDISP));
free (tsec_free);
}
- /* We've now determined that we can skip an initial gp load. Verify
+ /* We've now determined that we can skip an initial gp load. Verify
that the call and the target use the same gp. */
if (info->link_info->hash->creator != info->tsec->owner->xvec
|| info->gotobj != alpha_elf_tdata (info->tsec->owner)->gotobj)
Any such memory load insn may be substituted by a load directly
off the GP. This allows the memory load insn to be issued before
- the calculated GP register would otherwise be ready.
+ the calculated GP register would otherwise be ready.
Any such jsr insn can be replaced by a bsr if it is in range.
if (! link_info->keep_memory)
free_relocs = internal_relocs;
- memset(&info, 0, sizeof(info));
+ memset(&info, 0, sizeof (info));
info.abfd = abfd;
info.sec = sec;
info.link_info = link_info;
info.tsec = bfd_abs_section_ptr;
else if (isym.st_shndx == SHN_COMMON)
info.tsec = bfd_com_section_ptr;
- else
- continue; /* who knows. */
+ else
+ continue; /* who knows. */
info.h = NULL;
info.other = isym.st_other;
char *ext_hdr = NULL;
swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
- memset (debug, 0, sizeof(*debug));
+ memset (debug, 0, sizeof (*debug));
ext_hdr = (char *) bfd_malloc ((size_t) swap->external_hdr_size);
if (ext_hdr == NULL && swap->external_hdr_size != 0)
don't know whether we'll actually need a dynamic relocation
entry for this reloc. So make a record of it. Once we
find out if this thing needs dynamic relocation we'll
- expand the relocation sections by the appropriate amount. */
+ expand the relocation sections by the appropriate amount. */
struct alpha_elf_reloc_entry *rent;
|| relent->rtype == R_ALPHA_REFQUAD)
{
relent->srel->_raw_size +=
- sizeof(Elf64_External_Rela) * relent->count;
+ sizeof (Elf64_External_Rela) * relent->count;
}
dynobj = elf_hash_table(info)->dynobj;
i = alpha_elf_tdata(i)->got_link_next)
count += alpha_elf_tdata(i)->n_local_got_entries;
- srel->_raw_size += count * sizeof(Elf64_External_Rela);
+ srel->_raw_size += count * sizeof (Elf64_External_Rela);
}
}
/* else we're not dynamic and by definition we don't need such things. */
if (! bfd_elf64_add_dynamic_entry (info, DT_RELA, 0)
|| ! bfd_elf64_add_dynamic_entry (info, DT_RELASZ, 0)
|| ! bfd_elf64_add_dynamic_entry (info, DT_RELAENT,
- sizeof(Elf64_External_Rela)))
+ sizeof (Elf64_External_Rela)))
return false;
if (reltext)
in which case we have to adjust according to where the
section symbol winds up in the output section. */
- /* The symbol associated with GPDISP and LITUSE is
+ /* The symbol associated with GPDISP and LITUSE is
immaterial. Only the addend is significant. */
if (r_type == R_ALPHA_GPDISP || r_type == R_ALPHA_LITUSE)
continue;
case R_ALPHA_OP_PSUB:
case R_ALPHA_OP_PRSHIFT:
/* We hate these silly beasts. */
- abort();
+ abort ();
case R_ALPHA_LITERAL:
{
((Elf64_External_Rela *)
srelgot->contents)
+ srelgot->reloc_count++);
- BFD_ASSERT (sizeof(Elf64_External_Rela)
+ BFD_ASSERT (sizeof (Elf64_External_Rela)
* srelgot->reloc_count
<= srelgot->_cooked_size);
}
((Elf64_External_Rela *)
srel->contents)
+ srel->reloc_count++);
- BFD_ASSERT (sizeof(Elf64_External_Rela) * srel->reloc_count
+ BFD_ASSERT (sizeof (Elf64_External_Rela) * srel->reloc_count
<= srel->_cooked_size);
}
goto default_reloc;
((Elf64_External_Rela *)
srel->contents)
+ srel->reloc_count++);
- BFD_ASSERT (sizeof(Elf64_External_Rela) * srel->reloc_count
+ BFD_ASSERT (sizeof (Elf64_External_Rela) * srel->reloc_count
<= srel->_cooked_size);
}
bfd_elf64_swap_reloca_out (output_bfd, &outrel,
((Elf64_External_Rela *)srel->contents
+ srel->reloc_count++));
- BFD_ASSERT (sizeof(Elf64_External_Rela) * srel->reloc_count
+ BFD_ASSERT (sizeof (Elf64_External_Rela) * srel->reloc_count
<= srel->_cooked_size);
}
}
}
#endif
-
/* Build the external symbol information. */
einfo.abfd = abfd;
einfo.info = info;
\f
/* ECOFF swapping routines. These are used when dealing with the
.mdebug section, which is in the ECOFF debugging format. Copied
- from elf32-mips.c. */
+ from elf32-mips.c. */
static const struct ecoff_debug_swap
elf64_alpha_ecoff_debug_swap =
{
#define PLT_ENTRY_SIZE 0x10
#define DLT_ENTRY_SIZE 0x8
#define OPD_ENTRY_SIZE 0x20
-
+
#define ELF_DYNAMIC_INTERPRETER "/usr/lib/pa20_64/dld.sl"
/* The stub is supposed to load the target address and target's DP
boolean create, boolean copy));
static void elf64_hppa_dyn_hash_traverse
PARAMS ((struct elf64_hppa_dyn_hash_table *table,
- boolean (*func)(struct elf64_hppa_dyn_hash_entry *, PTR),
+ boolean (*func) (struct elf64_hppa_dyn_hash_entry *, PTR),
PTR info));
static const char *get_dyn_name
PARAMS ((asection *, struct elf_link_hash_entry *,
const Elf_Internal_Rela *, char **, size_t *));
-
/* This must follow the definitions of the various derived linker
hash tables and shared functions. */
#include "elf-hppa.h"
-
static boolean elf64_hppa_object_p
PARAMS ((bfd *));
static boolean elf64_hppa_finish_dynamic_symbol
PARAMS ((bfd *, struct bfd_link_info *,
struct elf_link_hash_entry *, Elf_Internal_Sym *));
-
+
static boolean elf64_hppa_finish_dynamic_sections
PARAMS ((bfd *, struct bfd_link_info *));
bfd *abfd ATTRIBUTE_UNUSED;
new_hash_entry_func new;
{
- memset (ht, 0, sizeof(*ht));
+ memset (ht, 0, sizeof (*ht));
return bfd_hash_table_init (&ht->root, new);
}
/* Initialize our local data. All zeros, and definitely easier
than setting 8 bit fields. */
- memset (ret, 0, sizeof(*ret));
+ memset (ret, 0, sizeof (*ret));
/* Call the allocation method of the superclass. */
ret = ((struct elf64_hppa_dyn_hash_entry *)
return true;
}
-
/* Construct a string for use in the elf64_hppa_dyn_hash_table. The
- name describes what was once potentially anonymous memory. We
+ name describes what was once potentially anonymous memory. We
allocate memory as necessary, possibly reusing PBUF/PLEN. */
static const char *
return true;
}
-/* Add a new entry to the list of dynamic relocations against DYN_H.
+/* Add a new entry to the list of dynamic relocations against DYN_H.
We use this to keep a record of all the FPTR relocations against a
particular symbol so that we can create FPTR relocations in the
/* If necessary, build a new table holding section symbols indices
for this BFD. This is disgusting. */
-
+
if (info->shared && hppa_info->section_syms_bfd != abfd)
{
unsigned long i;
}
else
sec_symndx = 0;
-
+
dlt = plt = stubs = NULL;
buf = NULL;
buf_len = 0;
/* FPTRs are not allocated by the dynamic linker for PA64, though
it is possible that will change in the future. */
-
+
/* This could be a local function that had its address taken, in
which case H will be NULL. */
if (h)
if (dyn_h->want_opd)
{
struct elf_link_hash_entry *h = dyn_h->h;
-
+
if (h)
while (h->root.type == bfd_link_hash_indirect
|| h->root.type == bfd_link_hash_warning)
Should contain dynamic IPLT (and EPLT?) relocations.
.opd:
- FPTRS
+ FPTRS
.rela.opd:
EPLT relocations for symbols exported from shared libraries. */
{
/* Restore the saved value and section index. */
sym->st_value = dyn_h->st_value;
- sym->st_shndx = dyn_h->st_shndx;
+ sym->st_shndx = dyn_h->st_shndx;
}
return true;
else
value = (h->root.u.def.value + h->root.u.def.section->vma);
- /* Fill in the entry in the procedure linkage table.
+ /* Fill in the entry in the procedure linkage table.
The format of a plt entry is
- <funcaddr> <__gp>.
+ <funcaddr> <__gp>.
plt_offset is the offset within the PLT section at which to
- install the PLT entry.
+ install the PLT entry.
We are modifying the in-memory PLT contents here, so we do not add
in the output_offset of the PLT section. */
/* Fix up the first ldd instruction.
We are modifying the contents of the STUB section in memory,
- so we do not need to include its output offset in this computation.
+ so we do not need to include its output offset in this computation.
Note the plt_offset value is the value of the PLT entry relative to
the start of the PLT section. These instructions will reference
gp_offset contains the offset of __gp within the PLT section. */
value = dyn_h->plt_offset - hppa_info->gp_offset;
-
+
insn = bfd_get_32 (stub->owner, stub->contents + dyn_h->stub_offset);
insn &= 0xffffc00e;
insn |= ((value & 0x2000) >> 13);
/* Fix up the second ldd instruction. */
value = dyn_h->plt_offset - hppa_info->gp_offset + 8;
-
+
insn = bfd_get_32 (stub->owner, stub->contents + dyn_h->stub_offset + 8);
insn &= 0xffffc00e;
insn |= ((value & 0x2000) >> 13);
{
bfd_vma value;
- /* The first two words of an .opd entry are zero.
+ /* The first two words of an .opd entry are zero.
We are modifying the contents of the OPD section in memory, so we
do not need to include its output offset in this computation. */
(if we did, the data in the .opd would reference itself rather
than the actual address of the function). Instead we have to use
a new dynamic symbol which has the same value as the original global
- function symbol.
+ function symbol.
We prefix the original symbol with a "." and use the new symbol in
the EPLT relocation. This new symbol has already been recorded in
bfd_vma value;
/* If we had an LTOFF_FPTR style relocation we want the DLT entry
- to point to the FPTR entry in the .opd section.
+ to point to the FPTR entry in the .opd section.
We include the OPD's output offset in this computation as
we are referring to an absolute address in the resulting
= _bfd_elf_link_lookup_local_dynindx (info, dyn_h->owner,
dyn_h->sym_indx);
-
/* Create a dynamic relocation for this entry. Do include the output
offset of the DLT entry since we need an absolute address in the
resulting object file. */
break;
}
- /* Create a dynamic relocation for this entry.
+ /* Create a dynamic relocation for this entry.
We need the output offset for the reloc's section because
we are creating an absolute address in the resulting object
the .opd entry. At least that seems sensible until you
realize there's no local dynamic symbols we can use for that
purpose. Thus the hair in the check_relocs routine.
-
+
We use a section symbol recorded by check_relocs as the
base symbol for the relocation. The addend is the difference
between the section symbol and the address of the .opd entry. */
/* Compute the difference between the start of the section
with the relocation and the opd entry. */
value -= value2;
-
+
/* The result becomes the addend of the relocation. */
rel.r_addend = value;
elf64_hppa_finalize_dlt,
info);
-
sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
if (elf_hash_table (info)->dynamic_sections_created)
return true;
}
-
/* Return the number of additional phdrs we will need.
The generic ELF code only creates PT_PHDRs for executables. The HP
- dynamic linker requires PT_PHDRs for dynamic libraries too.
+ dynamic linker requires PT_PHDRs for dynamic libraries too.
This routine indicates that the backend needs one additional program
header for that case.
specific backend.
The generic ELF code only creates PT_PHDRs for executables. The HP
- dynamic linker requires PT_PHDRs for dynamic libraries too.
+ dynamic linker requires PT_PHDRs for dynamic libraries too.
This allocates the PT_PHDR and initializes it in a manner suitable
- for the HP linker.
+ for the HP linker.
Note we do not have access to the link info structure here, so we have
to guess whether or not we are building a shared library based on the
#define elf_backend_link_output_symbol_hook \
elf64_hppa_link_output_symbol_hook
-
#define elf_backend_want_got_plt 0
#define elf_backend_plt_readonly 0
#define elf_backend_want_plt_sym 0
0, /* dst_mask */
false), /* pcrel_offset */
- /* Protected jump conversion. This is an optimization hint. No
+ /* Protected jump conversion. This is an optimization hint. No
relocation is required for correctness. */
HOWTO (R_MIPS_JALR, /* type */
0, /* rightshift */
0, /* dst_mask */
false), /* pcrel_offset */
- /* Protected jump conversion. This is an optimization hint. No
+ /* Protected jump conversion. This is an optimization hint. No
relocation is required for correctness. */
HOWTO (R_MIPS_JALR, /* type */
0, /* rightshift */
{
Elf64_Mips_Internal_Rel mirel;
- mips_elf64_swap_reloc_in (abfd,
+ mips_elf64_swap_reloc_in (abfd,
(const Elf64_Mips_External_Rel *) src,
&mirel);
{
Elf64_Mips_Internal_Rela mirela;
- mips_elf64_swap_reloca_in (abfd,
+ mips_elf64_swap_reloca_in (abfd,
(const Elf64_Mips_External_Rela *) src,
&mirela);
mirel.r_ssym = STN_UNDEF;
mirel.r_type3 = R_MIPS_NONE;
- mips_elf64_swap_reloc_out (abfd, &mirel,
+ mips_elf64_swap_reloc_out (abfd, &mirel,
(Elf64_Mips_External_Rel *) dst);
}
mirela.r_ssym = STN_UNDEF;
mirela.r_type3 = R_MIPS_NONE;
- mips_elf64_swap_reloca_out (abfd, &mirela,
+ mips_elf64_swap_reloca_out (abfd, &mirela,
(Elf64_Mips_External_Rela *) dst);
}
#define elf_backend_plt_header_size 0
#define elf_backend_may_use_rel_p 1
-/* We don't set bfd_elf64_bfd_is_local_label_name because the 32-bit
+/* We don't set bfd_elf64_bfd_is_local_label_name because the 32-bit
MIPS-specific function only applies to IRIX5, which had no 64-bit
ABI. */
#define bfd_elf64_find_nearest_line _bfd_mips_elf_find_nearest_line