mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 18:08:24 +08:00
* elf32-hppa.c (elf32_hppa_bfd_link_link_relocate): Use the right
type field (there are two!) when checking to see if $global$ is defined.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
Fri Jun 16 00:07:25 1995 Jeff Law (law@snake.cs.utah.edu)
|
||||||
|
|
||||||
|
* elf32-hppa.c (elf32_hppa_bfd_link_link_relocate): Use the right
|
||||||
|
type field (there are two!) when checking to see if $global$ is
|
||||||
|
defined.
|
||||||
|
|
||||||
Thu Jun 15 14:03:47 1995 Stan Shebs <shebs@andros.cygnus.com>
|
Thu Jun 15 14:03:47 1995 Stan Shebs <shebs@andros.cygnus.com>
|
||||||
|
|
||||||
* bfd-in.h, bfd-in2.h (bfd_boolean): Rename bfd_true, bfd_false
|
* bfd-in.h, bfd-in2.h (bfd_boolean): Rename bfd_true, bfd_false
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* BFD back-end for HP PA-RISC ELF files.
|
/* BFD back-end for HP PA-RISC ELF files.
|
||||||
Copyright (C) 1990, 91, 92, 93, 94 Free Software Foundation, Inc.
|
Copyright (C) 1990, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
|
||||||
|
|
||||||
Written by
|
Written by
|
||||||
|
|
||||||
@ -209,7 +209,7 @@ static unsigned long hppa_elf_relocate_insn
|
|||||||
static bfd_reloc_status_type hppa_elf_reloc
|
static bfd_reloc_status_type hppa_elf_reloc
|
||||||
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd*, char **));
|
PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd*, char **));
|
||||||
|
|
||||||
static CONST reloc_howto_type * elf_hppa_reloc_type_lookup
|
static reloc_howto_type * elf_hppa_reloc_type_lookup
|
||||||
PARAMS ((bfd *, bfd_reloc_code_real_type));
|
PARAMS ((bfd *, bfd_reloc_code_real_type));
|
||||||
|
|
||||||
static boolean elf32_hppa_set_section_contents
|
static boolean elf32_hppa_set_section_contents
|
||||||
@ -241,7 +241,7 @@ static boolean elf32_hppa_add_symbol_hook
|
|||||||
const char **, flagword *, asection **, bfd_vma *));
|
const char **, flagword *, asection **, bfd_vma *));
|
||||||
|
|
||||||
static bfd_reloc_status_type elf32_hppa_bfd_final_link_relocate
|
static bfd_reloc_status_type elf32_hppa_bfd_final_link_relocate
|
||||||
PARAMS ((const reloc_howto_type *, bfd *, bfd *, asection *,
|
PARAMS ((reloc_howto_type *, bfd *, bfd *, asection *,
|
||||||
bfd_byte *, bfd_vma, bfd_vma, bfd_vma, struct bfd_link_info *,
|
bfd_byte *, bfd_vma, bfd_vma, bfd_vma, struct bfd_link_info *,
|
||||||
asection *, const char *, int));
|
asection *, const char *, int));
|
||||||
|
|
||||||
@ -784,7 +784,7 @@ elf32_hppa_relocate_section (output_bfd, info, input_bfd, input_section,
|
|||||||
for (; rel < relend; rel++)
|
for (; rel < relend; rel++)
|
||||||
{
|
{
|
||||||
int r_type;
|
int r_type;
|
||||||
const reloc_howto_type *howto;
|
reloc_howto_type *howto;
|
||||||
long r_symndx;
|
long r_symndx;
|
||||||
struct elf_link_hash_entry *h;
|
struct elf_link_hash_entry *h;
|
||||||
Elf_Internal_Sym *sym;
|
Elf_Internal_Sym *sym;
|
||||||
@ -841,14 +841,15 @@ elf32_hppa_relocate_section (output_bfd, info, input_bfd, input_section,
|
|||||||
|
|
||||||
indx = r_symndx - symtab_hdr->sh_info;
|
indx = r_symndx - symtab_hdr->sh_info;
|
||||||
h = elf_sym_hashes (input_bfd)[indx];
|
h = elf_sym_hashes (input_bfd)[indx];
|
||||||
if (h->root.type == bfd_link_hash_defined)
|
if (h->root.type == bfd_link_hash_defined
|
||||||
|
|| h->root.type == bfd_link_hash_defweak)
|
||||||
{
|
{
|
||||||
sym_sec = h->root.u.def.section;
|
sym_sec = h->root.u.def.section;
|
||||||
relocation = (h->root.u.def.value
|
relocation = (h->root.u.def.value
|
||||||
+ sym_sec->output_offset
|
+ sym_sec->output_offset
|
||||||
+ sym_sec->output_section->vma);
|
+ sym_sec->output_section->vma);
|
||||||
}
|
}
|
||||||
else if (h->root.type == bfd_link_hash_weak)
|
else if (h->root.type == bfd_link_hash_undefweak)
|
||||||
relocation = 0;
|
relocation = 0;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -890,6 +891,16 @@ elf32_hppa_relocate_section (output_bfd, info, input_bfd, input_section,
|
|||||||
{
|
{
|
||||||
switch (r)
|
switch (r)
|
||||||
{
|
{
|
||||||
|
/* This can happen for DP relative relocs if $global$ is
|
||||||
|
undefined. This is a panic situation so we don't try
|
||||||
|
to continue. */
|
||||||
|
case bfd_reloc_undefined:
|
||||||
|
case bfd_reloc_notsupported:
|
||||||
|
if (!((*info->callbacks->undefined_symbol)
|
||||||
|
(info, "$global$", input_bfd,
|
||||||
|
input_section, rel->r_offset)))
|
||||||
|
return false;
|
||||||
|
return false;
|
||||||
case bfd_reloc_dangerous:
|
case bfd_reloc_dangerous:
|
||||||
{
|
{
|
||||||
/* We use this return value to indicate that we performed
|
/* We use this return value to indicate that we performed
|
||||||
@ -1215,7 +1226,7 @@ static bfd_reloc_status_type
|
|||||||
elf32_hppa_bfd_final_link_relocate (howto, input_bfd, output_bfd,
|
elf32_hppa_bfd_final_link_relocate (howto, input_bfd, output_bfd,
|
||||||
input_section, contents, offset, value,
|
input_section, contents, offset, value,
|
||||||
addend, info, sym_sec, sym_name, is_local)
|
addend, info, sym_sec, sym_name, is_local)
|
||||||
const reloc_howto_type *howto;
|
reloc_howto_type *howto;
|
||||||
bfd *input_bfd;
|
bfd *input_bfd;
|
||||||
bfd *output_bfd;
|
bfd *output_bfd;
|
||||||
asection *input_section;
|
asection *input_section;
|
||||||
@ -1252,6 +1263,11 @@ elf32_hppa_bfd_final_link_relocate (howto, input_bfd, output_bfd,
|
|||||||
if (h == NULL)
|
if (h == NULL)
|
||||||
return bfd_reloc_notsupported;
|
return bfd_reloc_notsupported;
|
||||||
|
|
||||||
|
/* If $global$ isn't a defined symbol, then we're still in deep
|
||||||
|
trouble. */
|
||||||
|
if (h->root.type != bfd_link_hash_defined)
|
||||||
|
return bfd_reloc_undefined;
|
||||||
|
|
||||||
sec = h->root.u.def.section;
|
sec = h->root.u.def.section;
|
||||||
elf32_hppa_hash_table (info)->global_value = (h->root.u.def.value
|
elf32_hppa_hash_table (info)->global_value = (h->root.u.def.value
|
||||||
+ sec->output_section->vma
|
+ sec->output_section->vma
|
||||||
@ -1525,7 +1541,7 @@ do_basic_type_1:
|
|||||||
/* Return the address of the howto table entry to perform the CODE
|
/* Return the address of the howto table entry to perform the CODE
|
||||||
relocation for an ARCH machine. */
|
relocation for an ARCH machine. */
|
||||||
|
|
||||||
static CONST reloc_howto_type *
|
static reloc_howto_type *
|
||||||
elf_hppa_reloc_type_lookup (abfd, code)
|
elf_hppa_reloc_type_lookup (abfd, code)
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
bfd_reloc_code_real_type code;
|
bfd_reloc_code_real_type code;
|
||||||
@ -2815,7 +2831,8 @@ elf32_hppa_size_stubs (stub_bfd, output_bfd, link_info)
|
|||||||
|
|
||||||
index = r_index - symtab_hdr->sh_info;
|
index = r_index - symtab_hdr->sh_info;
|
||||||
hash = elf_sym_hashes (input_bfd)[index];
|
hash = elf_sym_hashes (input_bfd)[index];
|
||||||
if (hash->root.type == bfd_link_hash_defined)
|
if (hash->root.type == bfd_link_hash_defined
|
||||||
|
|| hash->root.type == bfd_link_hash_defweak)
|
||||||
{
|
{
|
||||||
sym_sec = hash->root.u.def.section;
|
sym_sec = hash->root.u.def.section;
|
||||||
sym_name = hash->root.root.string;
|
sym_name = hash->root.root.string;
|
||||||
|
Reference in New Issue
Block a user