mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-25 13:09:48 +00:00
* elf32-hppa.c (elf32_hppa_relocate_section): Handle indirect and
warning symbols correctly. * elf32-i386.c (elf_i386_relocate_section): Likewise. * elf32-m68k.c (elf_m68k_relocate_section): Likewise. * elf32-mips.c (mips_elf_relocate_section): Likewise. * elf32-ppc.c (ppc_elf_relocate_section): Likewise. * elf32-sparc.c (elf32_sparc_relocate_section): Likewise. * elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
This commit is contained in:
parent
0e6f2f82d2
commit
cf5138e388
@ -1,5 +1,14 @@
|
||||
Tue Jan 30 12:09:04 1996 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
* elf32-hppa.c (elf32_hppa_relocate_section): Handle indirect and
|
||||
warning symbols correctly.
|
||||
* elf32-i386.c (elf_i386_relocate_section): Likewise.
|
||||
* elf32-m68k.c (elf_m68k_relocate_section): Likewise.
|
||||
* elf32-mips.c (mips_elf_relocate_section): Likewise.
|
||||
* elf32-ppc.c (ppc_elf_relocate_section): Likewise.
|
||||
* elf32-sparc.c (elf32_sparc_relocate_section): Likewise.
|
||||
* elf64-sparc.c (sparc64_elf_relocate_section): Likewise.
|
||||
|
||||
* syms.c (_bfd_stab_section_find_nearest_line): Add casts to avoid
|
||||
warnings.
|
||||
|
||||
|
@ -832,6 +832,9 @@ elf32_hppa_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||
|
||||
indx = r_symndx - symtab_hdr->sh_info;
|
||||
h = elf_sym_hashes (input_bfd)[indx];
|
||||
while (h->root.type == bfd_link_hash_indirect
|
||||
|| h->root.type == bfd_link_hash_warning)
|
||||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||
if (h->root.type == bfd_link_hash_defined
|
||||
|| h->root.type == bfd_link_hash_defweak)
|
||||
{
|
||||
@ -1348,12 +1351,9 @@ elf32_hppa_bfd_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
len = strlen (sym_name) + 1;
|
||||
if (is_local)
|
||||
len += 9;
|
||||
new_name = malloc (len);
|
||||
new_name = bfd_malloc (len);
|
||||
if (!new_name)
|
||||
{
|
||||
bfd_set_error (bfd_error_no_memory);
|
||||
return bfd_reloc_notsupported;
|
||||
}
|
||||
return bfd_reloc_notsupported;
|
||||
strcpy (new_name, sym_name);
|
||||
|
||||
/* Local symbols have unique IDs. */
|
||||
@ -1395,12 +1395,9 @@ elf32_hppa_bfd_final_link_relocate (howto, input_bfd, output_bfd,
|
||||
|
||||
len = strlen (new_name);
|
||||
len += 23;
|
||||
stub_name = malloc (len);
|
||||
stub_name = bfd_malloc (len);
|
||||
if (!stub_name)
|
||||
{
|
||||
bfd_set_error (bfd_error_no_memory);
|
||||
return bfd_reloc_notsupported;
|
||||
}
|
||||
return bfd_reloc_notsupported;
|
||||
elf32_hppa_name_of_stub (caller_args, callee_args,
|
||||
location, value, stub_name);
|
||||
strcat (stub_name, new_name);
|
||||
@ -1679,12 +1676,9 @@ elf32_hppa_link_output_symbol_hook (abfd, info, name, sym, section)
|
||||
if (ELF_ST_BIND (sym->st_info) == STB_LOCAL)
|
||||
len += 9;
|
||||
|
||||
new_name = malloc (len);
|
||||
new_name = bfd_malloc (len);
|
||||
if (new_name == NULL)
|
||||
{
|
||||
bfd_set_error (bfd_error_no_memory);
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
|
||||
strcpy (new_name, name);
|
||||
if (ELF_ST_BIND (sym->st_info) == STB_LOCAL)
|
||||
@ -1931,12 +1925,9 @@ elf32_hppa_read_symext_info (input_bfd, symtab_hdr, args_hash_table, local_syms)
|
||||
return true;
|
||||
}
|
||||
|
||||
contents = (bfd_byte *) malloc ((size_t) symextn_sec->_raw_size);
|
||||
contents = (bfd_byte *) bfd_malloc ((size_t) symextn_sec->_raw_size);
|
||||
if (contents == NULL)
|
||||
{
|
||||
bfd_set_error (bfd_error_no_memory);
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
|
||||
/* How gross. We turn off SEC_HAS_CONTENTS for the input symbol extension
|
||||
sections to keep the generic ELF/BFD code from trying to do anything
|
||||
@ -1994,10 +1985,9 @@ elf32_hppa_read_symext_info (input_bfd, symtab_hdr, args_hash_table, local_syms)
|
||||
symtab_hdr->sh_link,
|
||||
local_syms[current_index].st_name);
|
||||
len = strlen (sym_name) + 10;
|
||||
new_name = malloc (len);
|
||||
new_name = bfd_malloc (len);
|
||||
if (new_name == NULL)
|
||||
{
|
||||
bfd_set_error (bfd_error_no_memory);
|
||||
free (contents);
|
||||
return false;
|
||||
}
|
||||
@ -2519,12 +2509,9 @@ elf32_hppa_size_stubs (stub_bfd, output_bfd, link_info)
|
||||
|
||||
/* Create and initialize the stub hash table. */
|
||||
stub_hash_table = ((struct elf32_hppa_stub_hash_table *)
|
||||
malloc (sizeof (struct elf32_hppa_stub_hash_table)));
|
||||
bfd_malloc (sizeof (struct elf32_hppa_stub_hash_table)));
|
||||
if (!stub_hash_table)
|
||||
{
|
||||
bfd_set_error (bfd_error_no_memory);
|
||||
goto error_return;
|
||||
}
|
||||
goto error_return;
|
||||
|
||||
if (!elf32_hppa_stub_hash_table_init (stub_hash_table, stub_bfd,
|
||||
elf32_hppa_stub_hash_newfunc))
|
||||
@ -2532,12 +2519,9 @@ elf32_hppa_size_stubs (stub_bfd, output_bfd, link_info)
|
||||
|
||||
/* Likewise for the argument location hash table. */
|
||||
args_hash_table = ((struct elf32_hppa_args_hash_table *)
|
||||
malloc (sizeof (struct elf32_hppa_args_hash_table)));
|
||||
bfd_malloc (sizeof (struct elf32_hppa_args_hash_table)));
|
||||
if (!args_hash_table)
|
||||
{
|
||||
bfd_set_error (bfd_error_no_memory);
|
||||
goto error_return;
|
||||
}
|
||||
goto error_return;
|
||||
|
||||
if (!elf32_hppa_args_hash_table_init (args_hash_table,
|
||||
elf32_hppa_args_hash_newfunc))
|
||||
@ -2557,12 +2541,10 @@ elf32_hppa_size_stubs (stub_bfd, output_bfd, link_info)
|
||||
we need to read in the local symbols in parallel and save them for
|
||||
later use; so hold pointers to the local symbols in an array. */
|
||||
all_local_syms
|
||||
= (Elf_Internal_Sym **) malloc (sizeof (Elf_Internal_Sym *) * bfd_count);
|
||||
= (Elf_Internal_Sym **) bfd_malloc (sizeof (Elf_Internal_Sym *)
|
||||
* bfd_count);
|
||||
if (all_local_syms == NULL)
|
||||
{
|
||||
bfd_set_error (bfd_error_no_memory);
|
||||
goto error_return;
|
||||
}
|
||||
goto error_return;
|
||||
memset (all_local_syms, 0, sizeof (Elf_Internal_Sym *) * bfd_count);
|
||||
|
||||
/* Walk over all the input BFDs adding entries to the args hash table
|
||||
@ -2579,11 +2561,10 @@ elf32_hppa_size_stubs (stub_bfd, output_bfd, link_info)
|
||||
/* We need an array of the local symbols attached to the input bfd.
|
||||
Unfortunately, we're going to have to read & swap them in. */
|
||||
local_syms
|
||||
= (Elf_Internal_Sym *)malloc (symtab_hdr->sh_info
|
||||
* sizeof (Elf_Internal_Sym));
|
||||
= (Elf_Internal_Sym *) bfd_malloc (symtab_hdr->sh_info
|
||||
* sizeof (Elf_Internal_Sym));
|
||||
if (local_syms == NULL)
|
||||
{
|
||||
bfd_set_error (bfd_error_no_memory);
|
||||
for (i = 0; i < bfd_count; i++)
|
||||
if (all_local_syms[i])
|
||||
free (all_local_syms[i]);
|
||||
@ -2593,11 +2574,10 @@ elf32_hppa_size_stubs (stub_bfd, output_bfd, link_info)
|
||||
all_local_syms[index] = local_syms;
|
||||
|
||||
ext_syms
|
||||
= (Elf32_External_Sym *)malloc (symtab_hdr->sh_info
|
||||
* sizeof (Elf32_External_Sym));
|
||||
= (Elf32_External_Sym *) bfd_malloc (symtab_hdr->sh_info
|
||||
* sizeof (Elf32_External_Sym));
|
||||
if (ext_syms == NULL)
|
||||
{
|
||||
bfd_set_error (bfd_error_no_memory);
|
||||
for (i = 0; i < bfd_count; i++)
|
||||
if (all_local_syms[i])
|
||||
free (all_local_syms[i]);
|
||||
@ -2682,10 +2662,11 @@ elf32_hppa_size_stubs (stub_bfd, output_bfd, link_info)
|
||||
|
||||
/* Allocate space for the external relocations. */
|
||||
external_relocs
|
||||
= (Elf32_External_Rela *) malloc (section->reloc_count * sizeof (Elf32_External_Rela));
|
||||
= ((Elf32_External_Rela *)
|
||||
bfd_malloc (section->reloc_count
|
||||
* sizeof (Elf32_External_Rela)));
|
||||
if (external_relocs == NULL)
|
||||
{
|
||||
bfd_set_error (bfd_error_no_memory);
|
||||
for (i = 0; i < bfd_count; i++)
|
||||
if (all_local_syms[i])
|
||||
free (all_local_syms[i]);
|
||||
@ -2695,10 +2676,10 @@ elf32_hppa_size_stubs (stub_bfd, output_bfd, link_info)
|
||||
|
||||
/* Likewise for the internal relocations. */
|
||||
internal_relocs
|
||||
= (Elf_Internal_Rela *) malloc (section->reloc_count * sizeof (Elf_Internal_Rela));
|
||||
= ((Elf_Internal_Rela *)
|
||||
bfd_malloc (section->reloc_count * sizeof (Elf_Internal_Rela)));
|
||||
if (internal_relocs == NULL)
|
||||
{
|
||||
bfd_set_error (bfd_error_no_memory);
|
||||
free (external_relocs);
|
||||
for (i = 0; i < bfd_count; i++)
|
||||
if (all_local_syms[i])
|
||||
@ -2795,10 +2776,9 @@ elf32_hppa_size_stubs (stub_bfd, output_bfd, link_info)
|
||||
|
||||
/* Tack on an ID so we can uniquely identify this local
|
||||
symbol in the stub or arg info hash tables. */
|
||||
new_name = malloc (strlen (sym_name) + 10);
|
||||
new_name = bfd_malloc (strlen (sym_name) + 10);
|
||||
if (new_name == 0)
|
||||
{
|
||||
bfd_set_error (bfd_error_bad_value);
|
||||
free (internal_relocs);
|
||||
for (i = 0; i < bfd_count; i++)
|
||||
if (all_local_syms[i])
|
||||
@ -2882,11 +2862,9 @@ elf32_hppa_size_stubs (stub_bfd, output_bfd, link_info)
|
||||
len = strlen (sym_name);
|
||||
len += 23;
|
||||
|
||||
stub_name = malloc (len);
|
||||
stub_name = bfd_malloc (len);
|
||||
if (!stub_name)
|
||||
{
|
||||
bfd_set_error (bfd_error_no_memory);
|
||||
|
||||
/* Because sym_name was mallocd above for local
|
||||
symbols. */
|
||||
if (r_index < symtab_hdr->sh_info)
|
||||
|
@ -902,6 +902,9 @@ elf_i386_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||
else
|
||||
{
|
||||
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
|
||||
while (h->root.type == bfd_link_hash_indirect
|
||||
|| h->root.type == bfd_link_hash_warning)
|
||||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||
if (h->root.type == bfd_link_hash_defined
|
||||
|| h->root.type == bfd_link_hash_defweak)
|
||||
{
|
||||
|
@ -873,6 +873,9 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||
else
|
||||
{
|
||||
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
|
||||
while (h->root.type == bfd_link_hash_indirect
|
||||
|| h->root.type == bfd_link_hash_warning)
|
||||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||
if (h->root.type == bfd_link_hash_defined
|
||||
|| h->root.type == bfd_link_hash_defweak)
|
||||
{
|
||||
|
@ -437,7 +437,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
|
||||
false), /* pcrel_offset */
|
||||
|
||||
/* Like R_PPC_ADDR16_HA, but referring to the GOT table entry for
|
||||
the symbol. FIXME: Not supported. */
|
||||
the symbol. */
|
||||
HOWTO (R_PPC_GOT16_HA, /* type */
|
||||
0, /* rightshift */
|
||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
@ -678,7 +678,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
|
||||
false), /* pcrel_offset */
|
||||
|
||||
/* A sign-extended 16 bit value relative to _SDA_BASE_, for use with
|
||||
small data items. FIXME: Not supported. */
|
||||
small data items. */
|
||||
HOWTO (R_PPC_SDAREL16, /* type */
|
||||
0, /* rightshift */
|
||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
@ -693,7 +693,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
|
||||
0xffff, /* dst_mask */
|
||||
false), /* pcrel_offset */
|
||||
|
||||
/* 32-bit section relative relocation. FIXME: not supported. */
|
||||
/* 32-bit section relative relocation. */
|
||||
HOWTO (R_PPC_SECTOFF, /* type */
|
||||
0, /* rightshift */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
@ -708,7 +708,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
|
||||
0, /* dst_mask */
|
||||
true), /* pcrel_offset */
|
||||
|
||||
/* 16-bit lower half section relative relocation. FIXME: not supported. */
|
||||
/* 16-bit lower half section relative relocation. */
|
||||
HOWTO (R_PPC_SECTOFF_LO, /* type */
|
||||
0, /* rightshift */
|
||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
@ -723,7 +723,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
|
||||
0xffff, /* dst_mask */
|
||||
false), /* pcrel_offset */
|
||||
|
||||
/* 16-bit upper half section relative relocation. FIXME: not supported. */
|
||||
/* 16-bit upper half section relative relocation. */
|
||||
HOWTO (R_PPC_SECTOFF_HI, /* type */
|
||||
16, /* rightshift */
|
||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
@ -738,7 +738,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
|
||||
0xffff, /* dst_mask */
|
||||
false), /* pcrel_offset */
|
||||
|
||||
/* 16-bit upper half adjusted section relative relocation. FIXME: not supported. */
|
||||
/* 16-bit upper half adjusted section relative relocation. */
|
||||
HOWTO (R_PPC_SECTOFF_HA, /* type */
|
||||
0, /* rightshift */
|
||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
@ -868,7 +868,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
|
||||
false), /* pcrel_offset */
|
||||
|
||||
/* A sign-extended 16 bit value relative to _SDA2_BASE_, for use with
|
||||
small data items. FIXME: Not supported. */
|
||||
small data items. */
|
||||
HOWTO (R_PPC_EMB_SDA2REL, /* type */
|
||||
0, /* rightshift */
|
||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
@ -888,7 +888,7 @@ static reloc_howto_type ppc_elf_howto_raw[] =
|
||||
field with the appropriate register (0, 2, or 13). */
|
||||
HOWTO (R_PPC_EMB_SDA21, /* type */
|
||||
0, /* rightshift */
|
||||
1, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
2, /* size (0 = byte, 1 = short, 2 = long) */
|
||||
16, /* bitsize */
|
||||
false, /* pc_relative */
|
||||
0, /* bitpos */
|
||||
@ -2137,6 +2137,9 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||
else
|
||||
{
|
||||
h = sym_hashes[r_symndx - symtab_hdr->sh_info];
|
||||
while (h->root.type == bfd_link_hash_indirect
|
||||
|| h->root.type == bfd_link_hash_warning)
|
||||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||
sym_name = h->root.root.string;
|
||||
if (h->root.type == bfd_link_hash_defined
|
||||
|| h->root.type == bfd_link_hash_defweak)
|
||||
@ -2343,9 +2346,9 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||
|
||||
if (r_type == R_PPC_EMB_SDA21)
|
||||
{ /* fill in register field */
|
||||
insn = bfd_get_32 (output_bfd, contents + offset - 2);
|
||||
insn = bfd_get_32 (output_bfd, contents + offset);
|
||||
insn = (insn & ~RA_REGISTER_MASK) | (reg << RA_REGISTER_SHIFT);
|
||||
bfd_put_32 (output_bfd, insn, contents + offset - 2);
|
||||
bfd_put_32 (output_bfd, insn, contents + offset);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user