2001-02-01 Kazu Hirata <kazu@hxi.com>
* elf-m10300.c: Fix formatting.
This commit is contained in:
parent
0088edd2a0
commit
010ac81f2a
|
@ -1,3 +1,7 @@
|
||||||
|
2001-02-01 Kazu Hirata <kazu@hxi.com>
|
||||||
|
|
||||||
|
* elf-m10300.c: Fix formatting.
|
||||||
|
|
||||||
2001-01-30 Alan Modra <alan@linuxcare.com.au>
|
2001-01-30 Alan Modra <alan@linuxcare.com.au>
|
||||||
|
|
||||||
* elf64-hppa.c (elf64_hppa_elf_get_symbol_type): New function.
|
* elf64-hppa.c (elf64_hppa_elf_get_symbol_type): New function.
|
||||||
|
|
283
bfd/elf-m10300.c
283
bfd/elf-m10300.c
|
@ -1,5 +1,6 @@
|
||||||
/* Matsushita 10300 specific support for 32-bit ELF
|
/* Matsushita 10300 specific support for 32-bit ELF
|
||||||
Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
|
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of BFD, the Binary File Descriptor library.
|
This file is part of BFD, the Binary File Descriptor library.
|
||||||
|
|
||||||
|
@ -23,8 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||||
#include "elf-bfd.h"
|
#include "elf-bfd.h"
|
||||||
#include "elf/mn10300.h"
|
#include "elf/mn10300.h"
|
||||||
|
|
||||||
struct elf32_mn10300_link_hash_entry
|
struct elf32_mn10300_link_hash_entry {
|
||||||
{
|
|
||||||
/* The basic elf link hash table entry. */
|
/* The basic elf link hash table entry. */
|
||||||
struct elf_link_hash_entry root;
|
struct elf_link_hash_entry root;
|
||||||
|
|
||||||
|
@ -62,8 +62,7 @@ struct elf32_mn10300_link_hash_entry
|
||||||
/* We derive a hash table from the main elf linker hash table so
|
/* We derive a hash table from the main elf linker hash table so
|
||||||
we can store state variables and a secondary hash table without
|
we can store state variables and a secondary hash table without
|
||||||
resorting to global variables. */
|
resorting to global variables. */
|
||||||
struct elf32_mn10300_link_hash_table
|
struct elf32_mn10300_link_hash_table {
|
||||||
{
|
|
||||||
/* The main hash table. */
|
/* The main hash table. */
|
||||||
struct elf_link_hash_table root;
|
struct elf_link_hash_table root;
|
||||||
|
|
||||||
|
@ -119,8 +118,7 @@ static void compute_function_info
|
||||||
does absolutely nothing. */
|
does absolutely nothing. */
|
||||||
#define USE_RELA
|
#define USE_RELA
|
||||||
|
|
||||||
static reloc_howto_type elf_mn10300_howto_table[] =
|
static reloc_howto_type elf_mn10300_howto_table[] = {
|
||||||
{
|
|
||||||
/* Dummy relocation. Does nothing. */
|
/* Dummy relocation. Does nothing. */
|
||||||
HOWTO (R_MN10300_NONE,
|
HOWTO (R_MN10300_NONE,
|
||||||
0,
|
0,
|
||||||
|
@ -264,17 +262,14 @@ static reloc_howto_type elf_mn10300_howto_table[] =
|
||||||
0xffffff,
|
0xffffff,
|
||||||
0xffffff,
|
0xffffff,
|
||||||
false),
|
false),
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mn10300_reloc_map
|
struct mn10300_reloc_map {
|
||||||
{
|
|
||||||
bfd_reloc_code_real_type bfd_reloc_val;
|
bfd_reloc_code_real_type bfd_reloc_val;
|
||||||
unsigned char elf_reloc_val;
|
unsigned char elf_reloc_val;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct mn10300_reloc_map mn10300_reloc_map[] =
|
static const struct mn10300_reloc_map mn10300_reloc_map[] = {
|
||||||
{
|
|
||||||
{ BFD_RELOC_NONE, R_MN10300_NONE, },
|
{ BFD_RELOC_NONE, R_MN10300_NONE, },
|
||||||
{ BFD_RELOC_32, R_MN10300_32, },
|
{ BFD_RELOC_32, R_MN10300_32, },
|
||||||
{ BFD_RELOC_16, R_MN10300_16, },
|
{ BFD_RELOC_16, R_MN10300_16, },
|
||||||
|
@ -459,7 +454,7 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
|
||||||
case R_MN10300_24:
|
case R_MN10300_24:
|
||||||
value += addend;
|
value += addend;
|
||||||
|
|
||||||
if ((long)value > 0x7fffff || (long)value < -0x800000)
|
if ((long) value > 0x7fffff || (long) value < -0x800000)
|
||||||
return bfd_reloc_overflow;
|
return bfd_reloc_overflow;
|
||||||
|
|
||||||
bfd_put_8 (input_bfd, value & 0xff, hit_data);
|
bfd_put_8 (input_bfd, value & 0xff, hit_data);
|
||||||
|
@ -470,7 +465,7 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
|
||||||
case R_MN10300_16:
|
case R_MN10300_16:
|
||||||
value += addend;
|
value += addend;
|
||||||
|
|
||||||
if ((long)value > 0x7fff || (long)value < -0x8000)
|
if ((long) value > 0x7fff || (long) value < -0x8000)
|
||||||
return bfd_reloc_overflow;
|
return bfd_reloc_overflow;
|
||||||
|
|
||||||
bfd_put_16 (input_bfd, value, hit_data);
|
bfd_put_16 (input_bfd, value, hit_data);
|
||||||
|
@ -479,7 +474,7 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
|
||||||
case R_MN10300_8:
|
case R_MN10300_8:
|
||||||
value += addend;
|
value += addend;
|
||||||
|
|
||||||
if ((long)value > 0x7f || (long)value < -0x80)
|
if ((long) value > 0x7f || (long) value < -0x80)
|
||||||
return bfd_reloc_overflow;
|
return bfd_reloc_overflow;
|
||||||
|
|
||||||
bfd_put_8 (input_bfd, value, hit_data);
|
bfd_put_8 (input_bfd, value, hit_data);
|
||||||
|
@ -491,7 +486,7 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
|
||||||
value -= offset;
|
value -= offset;
|
||||||
value += addend;
|
value += addend;
|
||||||
|
|
||||||
if ((long)value > 0xff || (long)value < -0x100)
|
if ((long) value > 0xff || (long) value < -0x100)
|
||||||
return bfd_reloc_overflow;
|
return bfd_reloc_overflow;
|
||||||
|
|
||||||
bfd_put_8 (input_bfd, value, hit_data);
|
bfd_put_8 (input_bfd, value, hit_data);
|
||||||
|
@ -503,7 +498,7 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
|
||||||
value -= offset;
|
value -= offset;
|
||||||
value += addend;
|
value += addend;
|
||||||
|
|
||||||
if ((long)value > 0xffff || (long)value < -0x10000)
|
if ((long) value > 0xffff || (long) value < -0x10000)
|
||||||
return bfd_reloc_overflow;
|
return bfd_reloc_overflow;
|
||||||
|
|
||||||
bfd_put_16 (input_bfd, value, hit_data);
|
bfd_put_16 (input_bfd, value, hit_data);
|
||||||
|
@ -636,7 +631,7 @@ mn10300_elf_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||||
if (r != bfd_reloc_ok)
|
if (r != bfd_reloc_ok)
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
const char *msg = (const char *)0;
|
const char *msg = (const char *) 0;
|
||||||
|
|
||||||
if (h != NULL)
|
if (h != NULL)
|
||||||
name = h->root.root.root.string;
|
name = h->root.root.root.string;
|
||||||
|
@ -702,7 +697,7 @@ elf32_mn10300_finish_hash_table_entry (gen_entry, in_args)
|
||||||
struct elf32_mn10300_link_hash_entry *entry;
|
struct elf32_mn10300_link_hash_entry *entry;
|
||||||
unsigned int byte_count = 0;
|
unsigned int byte_count = 0;
|
||||||
|
|
||||||
entry = (struct elf32_mn10300_link_hash_entry *)gen_entry;
|
entry = (struct elf32_mn10300_link_hash_entry *) gen_entry;
|
||||||
|
|
||||||
/* If we already know we want to convert "call" to "calls" for calls
|
/* If we already know we want to convert "call" to "calls" for calls
|
||||||
to this symbol, then return now. */
|
to this symbol, then return now. */
|
||||||
|
@ -822,22 +817,22 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
/* We're going to need all the symbols for each bfd. */
|
/* We're going to need all the symbols for each bfd. */
|
||||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
||||||
|
|
||||||
/* Get cached copy if it exists. */
|
/* Get cached copy if it exists. */
|
||||||
if (symtab_hdr->contents != NULL)
|
if (symtab_hdr->contents != NULL)
|
||||||
extsyms = (Elf32_External_Sym *) symtab_hdr->contents;
|
extsyms = (Elf32_External_Sym *) symtab_hdr->contents;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Go get them off disk. */
|
/* Go get them off disk. */
|
||||||
extsyms = ((Elf32_External_Sym *)
|
extsyms = ((Elf32_External_Sym *)
|
||||||
bfd_malloc (symtab_hdr->sh_size));
|
bfd_malloc (symtab_hdr->sh_size));
|
||||||
if (extsyms == NULL)
|
if (extsyms == NULL)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
free_extsyms = extsyms;
|
free_extsyms = extsyms;
|
||||||
if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
|
if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
|
||||||
|| (bfd_read (extsyms, 1, symtab_hdr->sh_size, input_bfd)
|
|| (bfd_read (extsyms, 1, symtab_hdr->sh_size, input_bfd)
|
||||||
!= symtab_hdr->sh_size))
|
!= symtab_hdr->sh_size))
|
||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Iterate over each section in this bfd. */
|
/* Iterate over each section in this bfd. */
|
||||||
for (section = input_bfd->sections;
|
for (section = input_bfd->sections;
|
||||||
|
@ -856,7 +851,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
else if (section->_raw_size != 0)
|
else if (section->_raw_size != 0)
|
||||||
{
|
{
|
||||||
/* Go get them off disk. */
|
/* Go get them off disk. */
|
||||||
contents = (bfd_byte *)bfd_malloc (section->_raw_size);
|
contents = (bfd_byte *) bfd_malloc (section->_raw_size);
|
||||||
if (contents == NULL)
|
if (contents == NULL)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
free_contents = contents;
|
free_contents = contents;
|
||||||
|
@ -899,7 +894,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
r_type = ELF32_R_TYPE (irel->r_info);
|
r_type = ELF32_R_TYPE (irel->r_info);
|
||||||
r_index = ELF32_R_SYM (irel->r_info);
|
r_index = ELF32_R_SYM (irel->r_info);
|
||||||
|
|
||||||
if (r_type < 0 || r_type >= (int)R_MN10300_MAX)
|
if (r_type < 0 || r_type >= (int) R_MN10300_MAX)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
|
|
||||||
/* We need the name and hash table entry of the target
|
/* We need the name and hash table entry of the target
|
||||||
|
@ -944,7 +939,8 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
if (new_name == 0)
|
if (new_name == 0)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
|
|
||||||
sprintf (new_name, "%s_%08x", sym_name, (int)sym_sec);
|
sprintf (new_name, "%s_%08x",
|
||||||
|
sym_name, (int) sym_sec);
|
||||||
sym_name = new_name;
|
sym_name = new_name;
|
||||||
|
|
||||||
hash = (struct elf32_mn10300_link_hash_entry *)
|
hash = (struct elf32_mn10300_link_hash_entry *)
|
||||||
|
@ -1024,7 +1020,8 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
if (new_name == 0)
|
if (new_name == 0)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
|
|
||||||
sprintf (new_name, "%s_%08x", sym_name, (int)sym_sec);
|
sprintf (new_name, "%s_%08x",
|
||||||
|
sym_name, (int) sym_sec);
|
||||||
sym_name = new_name;
|
sym_name = new_name;
|
||||||
|
|
||||||
hash = (struct elf32_mn10300_link_hash_entry *)
|
hash = (struct elf32_mn10300_link_hash_entry *)
|
||||||
|
@ -1033,7 +1030,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
true, false);
|
true, false);
|
||||||
free (new_name);
|
free (new_name);
|
||||||
compute_function_info (input_bfd, hash,
|
compute_function_info (input_bfd, hash,
|
||||||
isym.st_value, contents);
|
isym.st_value, contents);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1118,22 +1115,22 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
/* We're going to need all the symbols for each bfd. */
|
/* We're going to need all the symbols for each bfd. */
|
||||||
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
|
||||||
|
|
||||||
/* Get cached copy if it exists. */
|
/* Get cached copy if it exists. */
|
||||||
if (symtab_hdr->contents != NULL)
|
if (symtab_hdr->contents != NULL)
|
||||||
extsyms = (Elf32_External_Sym *) symtab_hdr->contents;
|
extsyms = (Elf32_External_Sym *) symtab_hdr->contents;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Go get them off disk. */
|
/* Go get them off disk. */
|
||||||
extsyms = ((Elf32_External_Sym *)
|
extsyms = ((Elf32_External_Sym *)
|
||||||
bfd_malloc (symtab_hdr->sh_size));
|
bfd_malloc (symtab_hdr->sh_size));
|
||||||
if (extsyms == NULL)
|
if (extsyms == NULL)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
free_extsyms = extsyms;
|
free_extsyms = extsyms;
|
||||||
if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
|
if (bfd_seek (input_bfd, symtab_hdr->sh_offset, SEEK_SET) != 0
|
||||||
|| (bfd_read (extsyms, 1, symtab_hdr->sh_size, input_bfd)
|
|| (bfd_read (extsyms, 1, symtab_hdr->sh_size, input_bfd)
|
||||||
!= symtab_hdr->sh_size))
|
!= symtab_hdr->sh_size))
|
||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Walk over each section in this bfd. */
|
/* Walk over each section in this bfd. */
|
||||||
for (section = input_bfd->sections;
|
for (section = input_bfd->sections;
|
||||||
|
@ -1150,15 +1147,15 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
|
|
||||||
if (section->reloc_count != 0)
|
if (section->reloc_count != 0)
|
||||||
{
|
{
|
||||||
/* Get a copy of the native relocations. */
|
/* Get a copy of the native relocations. */
|
||||||
internal_relocs = (_bfd_elf32_link_read_relocs
|
internal_relocs = (_bfd_elf32_link_read_relocs
|
||||||
(input_bfd, section, (PTR) NULL,
|
(input_bfd, section, (PTR) NULL,
|
||||||
(Elf_Internal_Rela *) NULL,
|
(Elf_Internal_Rela *) NULL,
|
||||||
link_info->keep_memory));
|
link_info->keep_memory));
|
||||||
if (internal_relocs == NULL)
|
if (internal_relocs == NULL)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
if (! link_info->keep_memory)
|
if (! link_info->keep_memory)
|
||||||
free_relocs = internal_relocs;
|
free_relocs = internal_relocs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get cached copy of section contents if it exists. */
|
/* Get cached copy of section contents if it exists. */
|
||||||
|
@ -1167,7 +1164,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Go get them off disk. */
|
/* Go get them off disk. */
|
||||||
contents = (bfd_byte *)bfd_malloc (section->_raw_size);
|
contents = (bfd_byte *) bfd_malloc (section->_raw_size);
|
||||||
if (contents == NULL)
|
if (contents == NULL)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
free_contents = contents;
|
free_contents = contents;
|
||||||
|
@ -1218,7 +1215,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
new_name = bfd_malloc (strlen (sym_name) + 10);
|
new_name = bfd_malloc (strlen (sym_name) + 10);
|
||||||
if (new_name == 0)
|
if (new_name == 0)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
sprintf (new_name, "%s_%08x", sym_name, (int)sym_sec);
|
sprintf (new_name, "%s_%08x", sym_name, (int) sym_sec);
|
||||||
sym_name = new_name;
|
sym_name = new_name;
|
||||||
|
|
||||||
sym_hash = (struct elf32_mn10300_link_hash_entry *)
|
sym_hash = (struct elf32_mn10300_link_hash_entry *)
|
||||||
|
@ -1242,7 +1239,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
elf_section_data (section)->this_hdr.contents = contents;
|
elf_section_data (section)->this_hdr.contents = contents;
|
||||||
free_contents = NULL;
|
free_contents = NULL;
|
||||||
|
|
||||||
symtab_hdr->contents = (bfd_byte *)extsyms;
|
symtab_hdr->contents = (bfd_byte *) extsyms;
|
||||||
free_extsyms = NULL;
|
free_extsyms = NULL;
|
||||||
|
|
||||||
/* Count how many bytes we're going to delete. */
|
/* Count how many bytes we're going to delete. */
|
||||||
|
@ -1299,7 +1296,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
elf_section_data (section)->this_hdr.contents = contents;
|
elf_section_data (section)->this_hdr.contents = contents;
|
||||||
free_contents = NULL;
|
free_contents = NULL;
|
||||||
|
|
||||||
symtab_hdr->contents = (bfd_byte *)extsyms;
|
symtab_hdr->contents = (bfd_byte *) extsyms;
|
||||||
free_extsyms = NULL;
|
free_extsyms = NULL;
|
||||||
|
|
||||||
/* Count how many bytes we're going to delete. */
|
/* Count how many bytes we're going to delete. */
|
||||||
|
@ -1489,7 +1486,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
new_name = bfd_malloc (strlen (sym_name) + 10);
|
new_name = bfd_malloc (strlen (sym_name) + 10);
|
||||||
if (new_name == 0)
|
if (new_name == 0)
|
||||||
goto error_return;
|
goto error_return;
|
||||||
sprintf (new_name, "%s_%08x", sym_name, (int)sym_sec);
|
sprintf (new_name, "%s_%08x", sym_name, (int) sym_sec);
|
||||||
sym_name = new_name;
|
sym_name = new_name;
|
||||||
|
|
||||||
h = (struct elf32_mn10300_link_hash_entry *)
|
h = (struct elf32_mn10300_link_hash_entry *)
|
||||||
|
@ -1603,7 +1600,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
/* See if the value will fit in 16 bits, note the high value is
|
/* See if the value will fit in 16 bits, note the high value is
|
||||||
0x7fff + 2 as the target will be two bytes closer if we are
|
0x7fff + 2 as the target will be two bytes closer if we are
|
||||||
able to relax. */
|
able to relax. */
|
||||||
if ((long)value < 0x8001 && (long)value > -0x8000)
|
if ((long) value < 0x8001 && (long) value > -0x8000)
|
||||||
{
|
{
|
||||||
unsigned char code;
|
unsigned char code;
|
||||||
|
|
||||||
|
@ -1718,7 +1715,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
/* See if the value will fit in 8 bits, note the high value is
|
/* See if the value will fit in 8 bits, note the high value is
|
||||||
0x7f + 1 as the target will be one bytes closer if we are
|
0x7f + 1 as the target will be one bytes closer if we are
|
||||||
able to relax. */
|
able to relax. */
|
||||||
if ((long)value < 0x80 && (long)value > -0x80)
|
if ((long) value < 0x80 && (long) value > -0x80)
|
||||||
{
|
{
|
||||||
unsigned char code;
|
unsigned char code;
|
||||||
|
|
||||||
|
@ -1837,48 +1834,48 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
/* Reverse the condition of the first branch. */
|
/* Reverse the condition of the first branch. */
|
||||||
switch (code)
|
switch (code)
|
||||||
{
|
{
|
||||||
case 0xc8:
|
case 0xc8:
|
||||||
code = 0xc9;
|
code = 0xc9;
|
||||||
break;
|
break;
|
||||||
case 0xc9:
|
case 0xc9:
|
||||||
code = 0xc8;
|
code = 0xc8;
|
||||||
break;
|
break;
|
||||||
case 0xc0:
|
case 0xc0:
|
||||||
code = 0xc2;
|
code = 0xc2;
|
||||||
break;
|
break;
|
||||||
case 0xc2:
|
case 0xc2:
|
||||||
code = 0xc0;
|
code = 0xc0;
|
||||||
break;
|
break;
|
||||||
case 0xc3:
|
case 0xc3:
|
||||||
code = 0xc1;
|
code = 0xc1;
|
||||||
break;
|
break;
|
||||||
case 0xc1:
|
case 0xc1:
|
||||||
code = 0xc3;
|
code = 0xc3;
|
||||||
break;
|
break;
|
||||||
case 0xc4:
|
case 0xc4:
|
||||||
code = 0xc6;
|
code = 0xc6;
|
||||||
break;
|
break;
|
||||||
case 0xc6:
|
case 0xc6:
|
||||||
code = 0xc4;
|
code = 0xc4;
|
||||||
break;
|
break;
|
||||||
case 0xc7:
|
case 0xc7:
|
||||||
code = 0xc5;
|
code = 0xc5;
|
||||||
break;
|
break;
|
||||||
case 0xc5:
|
case 0xc5:
|
||||||
code = 0xc7;
|
code = 0xc7;
|
||||||
break;
|
break;
|
||||||
case 0xe8:
|
case 0xe8:
|
||||||
code = 0xe9;
|
code = 0xe9;
|
||||||
break;
|
break;
|
||||||
case 0x9d:
|
case 0x9d:
|
||||||
code = 0xe8;
|
code = 0xe8;
|
||||||
break;
|
break;
|
||||||
case 0xea:
|
case 0xea:
|
||||||
code = 0xeb;
|
code = 0xeb;
|
||||||
break;
|
break;
|
||||||
case 0xeb:
|
case 0xeb:
|
||||||
code = 0xea;
|
code = 0xea;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
|
bfd_put_8 (abfd, code, contents + irel->r_offset - 1);
|
||||||
|
|
||||||
|
@ -1908,7 +1905,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
value += irel->r_addend;
|
value += irel->r_addend;
|
||||||
|
|
||||||
/* See if the value will fit in 8 bits. */
|
/* See if the value will fit in 8 bits. */
|
||||||
if ((long)value < 0x7f && (long)value > -0x80)
|
if ((long) value < 0x7f && (long) value > -0x80)
|
||||||
{
|
{
|
||||||
unsigned char code;
|
unsigned char code;
|
||||||
|
|
||||||
|
@ -1920,8 +1917,8 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
|
|
||||||
if (code == 0xfd)
|
if (code == 0xfd)
|
||||||
{
|
{
|
||||||
/* Get the second opcode. */
|
/* Get the second opcode. */
|
||||||
code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
|
code = bfd_get_8 (abfd, contents + irel->r_offset - 2);
|
||||||
|
|
||||||
/* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
|
/* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
|
||||||
equivalent instructions exists. */
|
equivalent instructions exists. */
|
||||||
|
@ -1953,9 +1950,9 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
|
bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
|
||||||
|
|
||||||
/* Fix the relocation's type. */
|
/* Fix the relocation's type. */
|
||||||
irel->r_info
|
irel->r_info =
|
||||||
= ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
|
ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
|
||||||
R_MN10300_8);
|
R_MN10300_8);
|
||||||
|
|
||||||
/* Delete two bytes of data. */
|
/* Delete two bytes of data. */
|
||||||
if (!mn10300_elf_relax_delete_bytes (abfd, sec,
|
if (!mn10300_elf_relax_delete_bytes (abfd, sec,
|
||||||
|
@ -1964,12 +1961,11 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
|
|
||||||
/* That will change things, so, we should relax
|
/* That will change things, so, we should relax
|
||||||
again. Note that this is not required, and it
|
again. Note that this is not required, and it
|
||||||
may be slow. */
|
may be slow. */
|
||||||
*again = true;
|
*again = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1984,7 +1980,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
/* See if the value will fit in 24 bits.
|
/* See if the value will fit in 24 bits.
|
||||||
We allow any 16bit match here. We prune those we can't
|
We allow any 16bit match here. We prune those we can't
|
||||||
handle below. */
|
handle below. */
|
||||||
if ((long)value < 0x7fffff && (long)value > -0x800000)
|
if ((long) value < 0x7fffff && (long) value > -0x800000)
|
||||||
{
|
{
|
||||||
unsigned char code;
|
unsigned char code;
|
||||||
|
|
||||||
|
@ -2002,7 +1998,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
/* All the am33 32 -> 24 relaxing possibilities. */
|
/* All the am33 32 -> 24 relaxing possibilities. */
|
||||||
/* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
|
/* We can not relax 0x6b, 0x7b, 0x8b, 0x9b as no 24bit
|
||||||
equivalent instructions exists. */
|
equivalent instructions exists. */
|
||||||
if (code != 0x6b && code != 0x7b
|
if (code != 0x6b && code != 0x7b
|
||||||
&& code != 0x8b && code != 0x9b
|
&& code != 0x8b && code != 0x9b
|
||||||
&& ((code & 0x0f) == 0x09 || (code & 0x0f) == 0x08
|
&& ((code & 0x0f) == 0x09 || (code & 0x0f) == 0x08
|
||||||
|| (code & 0x0f) == 0x0a || (code & 0x0f) == 0x0b
|
|| (code & 0x0f) == 0x0a || (code & 0x0f) == 0x0b
|
||||||
|
@ -2030,9 +2026,9 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
|
bfd_put_8 (abfd, code, contents + irel->r_offset - 2);
|
||||||
|
|
||||||
/* Fix the relocation's type. */
|
/* Fix the relocation's type. */
|
||||||
irel->r_info
|
irel->r_info =
|
||||||
= ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
|
ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
|
||||||
R_MN10300_24);
|
R_MN10300_24);
|
||||||
|
|
||||||
/* Delete one byte of data. */
|
/* Delete one byte of data. */
|
||||||
if (!mn10300_elf_relax_delete_bytes (abfd, sec,
|
if (!mn10300_elf_relax_delete_bytes (abfd, sec,
|
||||||
|
@ -2041,19 +2037,18 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
|
|
||||||
/* That will change things, so, we should relax
|
/* That will change things, so, we should relax
|
||||||
again. Note that this is not required, and it
|
again. Note that this is not required, and it
|
||||||
may be slow. */
|
may be slow. */
|
||||||
*again = true;
|
*again = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See if the value will fit in 16 bits.
|
/* See if the value will fit in 16 bits.
|
||||||
We allow any 16bit match here. We prune those we can't
|
We allow any 16bit match here. We prune those we can't
|
||||||
handle below. */
|
handle below. */
|
||||||
if ((long)value < 0x7fff && (long)value > -0x8000)
|
if ((long) value < 0x7fff && (long) value > -0x8000)
|
||||||
{
|
{
|
||||||
unsigned char code;
|
unsigned char code;
|
||||||
|
|
||||||
|
@ -2356,7 +2351,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again)
|
||||||
|
|
||||||
/* Fix the relocation's type. */
|
/* Fix the relocation's type. */
|
||||||
irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
|
irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info),
|
||||||
R_MN10300_16);
|
R_MN10300_16);
|
||||||
|
|
||||||
/* Delete two bytes of data. */
|
/* Delete two bytes of data. */
|
||||||
if (!mn10300_elf_relax_delete_bytes (abfd, sec,
|
if (!mn10300_elf_relax_delete_bytes (abfd, sec,
|
||||||
|
@ -2872,12 +2867,12 @@ elf_mn10300_mach (flags)
|
||||||
{
|
{
|
||||||
switch (flags & EF_MN10300_MACH)
|
switch (flags & EF_MN10300_MACH)
|
||||||
{
|
{
|
||||||
case E_MN10300_MACH_MN10300:
|
case E_MN10300_MACH_MN10300:
|
||||||
default:
|
default:
|
||||||
return bfd_mach_mn10300;
|
return bfd_mach_mn10300;
|
||||||
|
|
||||||
case E_MN10300_MACH_AM33:
|
case E_MN10300_MACH_AM33:
|
||||||
return bfd_mach_am33;
|
return bfd_mach_am33;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2894,14 +2889,14 @@ _bfd_mn10300_elf_final_write_processing (abfd, linker)
|
||||||
|
|
||||||
switch (bfd_get_mach (abfd))
|
switch (bfd_get_mach (abfd))
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
case bfd_mach_mn10300:
|
case bfd_mach_mn10300:
|
||||||
val = E_MN10300_MACH_MN10300;
|
val = E_MN10300_MACH_MN10300;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case bfd_mach_am33:
|
case bfd_mach_am33:
|
||||||
val = E_MN10300_MACH_AM33;
|
val = E_MN10300_MACH_AM33;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
elf_elfheader (abfd)->e_flags &= ~ (EF_MN10300_MACH);
|
elf_elfheader (abfd)->e_flags &= ~ (EF_MN10300_MACH);
|
||||||
|
@ -2913,7 +2908,7 @@ _bfd_mn10300_elf_object_p (abfd)
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
{
|
{
|
||||||
bfd_default_set_arch_mach (abfd, bfd_arch_mn10300,
|
bfd_default_set_arch_mach (abfd, bfd_arch_mn10300,
|
||||||
elf_mn10300_mach (elf_elfheader (abfd)->e_flags));
|
elf_mn10300_mach (elf_elfheader (abfd)->e_flags));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue