projects
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Automatic date update in version.in
[binutils-gdb.git]
/
bfd
/
elf-m10200.c
diff --git
a/bfd/elf-m10200.c
b/bfd/elf-m10200.c
index aef1b526a5a0e0efdb3a5af5d31e4770e049df0c..bd5368edf72479f2991614d28510ccc54c17f8a7 100644
(file)
--- a/
bfd/elf-m10200.c
+++ b/
bfd/elf-m10200.c
@@
-1,5
+1,5
@@
/* Matsushita 10200 specific support for 32-bit ELF
/* Matsushita 10200 specific support for 32-bit ELF
- Copyright (C) 1996-20
17
Free Software Foundation, Inc.
+ Copyright (C) 1996-20
22
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,9
+23,9
@@
#include "libbfd.h"
#include "elf-bfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
-static b
fd_boolean
+static b
ool
mn10200_elf_relax_delete_bytes (bfd *, asection *, bfd_vma, int);
mn10200_elf_relax_delete_bytes (bfd *, asection *, bfd_vma, int);
-static b
fd_boolean
+static b
ool
mn10200_elf_symbol_address_p (bfd *, asection *, Elf_Internal_Sym *, bfd_vma);
enum reloc_type
mn10200_elf_symbol_address_p (bfd *, asection *, Elf_Internal_Sym *, bfd_vma);
enum reloc_type
@@
-48,114
+48,114
@@
static reloc_howto_type elf_mn10200_howto_table[] =
0,
3,
0,
0,
3,
0,
-
FALSE
,
+
false
,
0,
complain_overflow_dont,
bfd_elf_generic_reloc,
"R_MN10200_NONE",
0,
complain_overflow_dont,
bfd_elf_generic_reloc,
"R_MN10200_NONE",
-
FALSE
,
+
false
,
0,
0,
0,
0,
-
FALSE
),
+
false
),
/* Standard 32 bit reloc. */
HOWTO (R_MN10200_32,
0,
2,
32,
/* Standard 32 bit reloc. */
HOWTO (R_MN10200_32,
0,
2,
32,
-
FALSE
,
+
false
,
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_32",
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_32",
-
FALSE
,
+
false
,
0xffffffff,
0xffffffff,
0xffffffff,
0xffffffff,
-
FALSE
),
+
false
),
/* Standard 16 bit reloc. */
HOWTO (R_MN10200_16,
0,
1,
16,
/* Standard 16 bit reloc. */
HOWTO (R_MN10200_16,
0,
1,
16,
-
FALSE
,
+
false
,
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_16",
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_16",
-
FALSE
,
+
false
,
0xffff,
0xffff,
0xffff,
0xffff,
-
FALSE
),
+
false
),
/* Standard 8 bit reloc. */
HOWTO (R_MN10200_8,
0,
0,
8,
/* Standard 8 bit reloc. */
HOWTO (R_MN10200_8,
0,
0,
8,
-
FALSE
,
+
false
,
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_8",
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_8",
-
FALSE
,
+
false
,
0xff,
0xff,
0xff,
0xff,
-
FALSE
),
+
false
),
/* Standard 24 bit reloc. */
HOWTO (R_MN10200_24,
0,
2,
24,
/* Standard 24 bit reloc. */
HOWTO (R_MN10200_24,
0,
2,
24,
-
FALSE
,
+
false
,
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_24",
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_24",
-
FALSE
,
+
false
,
0xffffff,
0xffffff,
0xffffff,
0xffffff,
-
FALSE
),
+
false
),
/* Simple 8 pc-relative reloc. */
HOWTO (R_MN10200_PCREL8,
0,
0,
8,
/* Simple 8 pc-relative reloc. */
HOWTO (R_MN10200_PCREL8,
0,
0,
8,
-
TRUE
,
+
true
,
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_PCREL8",
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_PCREL8",
-
FALSE
,
+
false
,
0xff,
0xff,
0xff,
0xff,
-
TRUE
),
+
true
),
/* Simple 16 pc-relative reloc. */
HOWTO (R_MN10200_PCREL16,
0,
1,
16,
/* Simple 16 pc-relative reloc. */
HOWTO (R_MN10200_PCREL16,
0,
1,
16,
-
TRUE
,
+
true
,
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_PCREL16",
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_PCREL16",
-
FALSE
,
+
false
,
0xffff,
0xffff,
0xffff,
0xffff,
-
TRUE
),
+
true
),
/* Simple 32bit pc-relative reloc with a 1 byte adjustment
to get the pc-relative offset correct. */
HOWTO (R_MN10200_PCREL24,
0,
2,
24,
/* Simple 32bit pc-relative reloc with a 1 byte adjustment
to get the pc-relative offset correct. */
HOWTO (R_MN10200_PCREL24,
0,
2,
24,
-
TRUE
,
+
true
,
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_PCREL24",
0,
complain_overflow_bitfield,
bfd_elf_generic_reloc,
"R_MN10200_PCREL24",
-
FALSE
,
+
false
,
0xffffff,
0xffffff,
0xffffff,
0xffffff,
-
TRUE
),
+
true
),
};
struct mn10200_reloc_map
};
struct mn10200_reloc_map
@@
-212,16
+212,25
@@
bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
/* Set the howto pointer for an MN10200 ELF reloc. */
/* Set the howto pointer for an MN10200 ELF reloc. */
-static
void
-mn10200_info_to_howto (bfd *abfd
ATTRIBUTE_UNUSED
,
+static
bool
+mn10200_info_to_howto (bfd *abfd,
arelent *cache_ptr,
Elf_Internal_Rela *dst)
{
unsigned int r_type;
r_type = ELF32_R_TYPE (dst->r_info);
arelent *cache_ptr,
Elf_Internal_Rela *dst)
{
unsigned int r_type;
r_type = ELF32_R_TYPE (dst->r_info);
- BFD_ASSERT (r_type < (unsigned int) R_MN10200_MAX);
+ if (r_type >= (unsigned int) R_MN10200_MAX)
+ {
+ /* xgettext:c-format */
+ _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+ abfd, r_type);
+ bfd_set_error (bfd_error_bad_value);
+ return false;
+ }
+
cache_ptr->howto = &elf_mn10200_howto_table[r_type];
cache_ptr->howto = &elf_mn10200_howto_table[r_type];
+ return cache_ptr->howto != NULL;
}
/* Perform a relocation as part of a final link. */
}
/* Perform a relocation as part of a final link. */
@@
-326,7
+335,7
@@
mn10200_elf_final_link_relocate (reloc_howto_type *howto,
}
\f
/* Relocate an MN10200 ELF section. */
}
\f
/* Relocate an MN10200 ELF section. */
-static
bfd_boolean
+static
int
mn10200_elf_relocate_section (bfd *output_bfd,
struct bfd_link_info *info,
bfd *input_bfd,
mn10200_elf_relocate_section (bfd *output_bfd,
struct bfd_link_info *info,
bfd *input_bfd,
@@
-371,7
+380,7
@@
mn10200_elf_relocate_section (bfd *output_bfd,
}
else
{
}
else
{
- b
fd_boolean
unresolved_reloc, warned, ignored;
+ b
ool
unresolved_reloc, warned, ignored;
RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
r_symndx, symtab_hdr, sym_hashes,
RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
r_symndx, symtab_hdr, sym_hashes,
@@
-404,7
+413,7
@@
mn10200_elf_relocate_section (bfd *output_bfd,
name = (bfd_elf_string_from_elf_section
(input_bfd, symtab_hdr->sh_link, sym->st_name));
if (name == NULL || *name == '\0')
name = (bfd_elf_string_from_elf_section
(input_bfd, symtab_hdr->sh_link, sym->st_name));
if (name == NULL || *name == '\0')
- name = bfd_section_name (
input_bfd,
sec);
+ name = bfd_section_name (sec);
}
switch (r)
}
switch (r)
@@
-418,7
+427,7
@@
mn10200_elf_relocate_section (bfd *output_bfd,
case bfd_reloc_undefined:
(*info->callbacks->undefined_symbol) (info, name, input_bfd,
input_section,
case bfd_reloc_undefined:
(*info->callbacks->undefined_symbol) (info, name, input_bfd,
input_section,
- rel->r_offset,
TRUE
);
+ rel->r_offset,
true
);
break;
case bfd_reloc_outofrange:
break;
case bfd_reloc_outofrange:
@@
-445,12
+454,12
@@
mn10200_elf_relocate_section (bfd *output_bfd,
}
}
}
}
- return
TRUE
;
+ return
true
;
}
/* Delete some bytes from a section while relaxing. */
}
/* Delete some bytes from a section while relaxing. */
-static b
fd_boolean
+static b
ool
mn10200_elf_relax_delete_bytes (bfd *abfd, asection *sec,
bfd_vma addr, int count)
{
mn10200_elf_relax_delete_bytes (bfd *abfd, asection *sec,
bfd_vma addr, int count)
{
@@
-517,7
+526,7
@@
mn10200_elf_relax_delete_bytes (bfd *abfd, asection *sec,
}
}
}
}
- return
TRUE
;
+ return
true
;
}
/* This function handles relaxing for the mn10200.
}
/* This function handles relaxing for the mn10200.
@@
-549,11
+558,11
@@
mn10200_elf_relax_delete_bytes (bfd *abfd, asection *sec,
We don't handle imm16->imm8 or d16->d8 as they're very rare
and somewhat more difficult to support. */
We don't handle imm16->imm8 or d16->d8 as they're very rare
and somewhat more difficult to support. */
-static b
fd_boolean
+static b
ool
mn10200_elf_relax_section (bfd *abfd,
asection *sec,
struct bfd_link_info *link_info,
mn10200_elf_relax_section (bfd *abfd,
asection *sec,
struct bfd_link_info *link_info,
- b
fd_boolean
*again)
+ b
ool
*again)
{
Elf_Internal_Shdr *symtab_hdr;
Elf_Internal_Rela *internal_relocs;
{
Elf_Internal_Shdr *symtab_hdr;
Elf_Internal_Rela *internal_relocs;
@@
-562,7
+571,7
@@
mn10200_elf_relax_section (bfd *abfd,
Elf_Internal_Sym *isymbuf = NULL;
/* Assume nothing changes. */
Elf_Internal_Sym *isymbuf = NULL;
/* Assume nothing changes. */
- *again =
FALSE
;
+ *again =
false
;
/* We don't have to do anything for a relocatable link, if
this section does not have relocs, or if this is not a
/* We don't have to do anything for a relocatable link, if
this section does not have relocs, or if this is not a
@@
-571,7
+580,7
@@
mn10200_elf_relax_section (bfd *abfd,
|| (sec->flags & SEC_RELOC) == 0
|| sec->reloc_count == 0
|| (sec->flags & SEC_CODE) == 0)
|| (sec->flags & SEC_RELOC) == 0
|| sec->reloc_count == 0
|| (sec->flags & SEC_CODE) == 0)
- return
TRUE
;
+ return
true
;
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@
-721,7
+730,7
@@
mn10200_elf_relax_section (bfd *abfd,
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
- *again =
TRUE
;
+ *again =
true
;
}
}
}
}
@@
-768,7
+777,7
@@
mn10200_elf_relax_section (bfd *abfd,
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
- *again =
TRUE
;
+ *again =
true
;
}
}
}
}
@@
-786,14
+795,8
@@
mn10200_elf_relax_section (bfd *abfd,
if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10200_PCREL8)
{
Elf_Internal_Rela *nrel;
if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10200_PCREL8)
{
Elf_Internal_Rela *nrel;
- bfd_vma value = symval;
unsigned char code;
unsigned char code;
- /* Deal with pc-relative gunk. */
- value -= (sec->output_section->vma + sec->output_offset);
- value -= (irel->r_offset + 1);
- value += irel->r_addend;
-
/* Do nothing if this reloc is the last byte in the section. */
if (irel->r_offset == sec->size)
continue;
/* Do nothing if this reloc is the last byte in the section. */
if (irel->r_offset == sec->size)
continue;
@@
-921,7
+924,7
@@
mn10200_elf_relax_section (bfd *abfd,
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
- *again =
TRUE
;
+ *again =
true
;
}
/* Try to turn a 24bit immediate, displacement or absolute address
}
/* Try to turn a 24bit immediate, displacement or absolute address
@@
-984,7
+987,7
@@
mn10200_elf_relax_section (bfd *abfd,
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
- *again =
TRUE
;
+ *again =
true
;
break;
/* mov imm24,an -> mov imm16,an
break;
/* mov imm24,an -> mov imm16,an
@@
-1035,7
+1038,7
@@
mn10200_elf_relax_section (bfd *abfd,
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
- *again =
TRUE
;
+ *again =
true
;
break;
/* cmp imm24,dn -> cmp imm16,dn
break;
/* cmp imm24,dn -> cmp imm16,dn
@@
-1136,7
+1139,7
@@
mn10200_elf_relax_section (bfd *abfd,
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
- *again =
TRUE
;
+ *again =
true
;
break;
/* movb (abs24),dn ->movbu (abs16),dn extxb bn */
break;
/* movb (abs24),dn ->movbu (abs16),dn extxb bn */
@@
-1167,7
+1170,7
@@
mn10200_elf_relax_section (bfd *abfd,
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
/* That will change things, so, we should relax again.
Note that this is not required, and it may be slow. */
- *again =
TRUE
;
+ *again =
true
;
break;
}
}
break;
}
}
@@
-1198,29
+1201,25
@@
mn10200_elf_relax_section (bfd *abfd,
}
}
}
}
- if (internal_relocs != NULL
- && elf_section_data (sec)->relocs != internal_relocs)
+ if (elf_section_data (sec)->relocs != internal_relocs)
free (internal_relocs);
free (internal_relocs);
- return
TRUE
;
+ return
true
;
error_return:
error_return:
- if (isymbuf != NULL
- && symtab_hdr->contents != (unsigned char *) isymbuf)
+ if (symtab_hdr->contents != (unsigned char *) isymbuf)
free (isymbuf);
free (isymbuf);
- if (contents != NULL
- && elf_section_data (sec)->this_hdr.contents != contents)
+ if (elf_section_data (sec)->this_hdr.contents != contents)
free (contents);
free (contents);
- if (internal_relocs != NULL
- && elf_section_data (sec)->relocs != internal_relocs)
+ if (elf_section_data (sec)->relocs != internal_relocs)
free (internal_relocs);
free (internal_relocs);
- return
FALSE
;
+ return
false
;
}
/* Return TRUE if a symbol exists at the given address, else return
FALSE. */
}
/* Return TRUE if a symbol exists at the given address, else return
FALSE. */
-static b
fd_boolean
+static b
ool
mn10200_elf_symbol_address_p (bfd *abfd,
asection *sec,
Elf_Internal_Sym *isym,
mn10200_elf_symbol_address_p (bfd *abfd,
asection *sec,
Elf_Internal_Sym *isym,
@@
-1241,7
+1240,7
@@
mn10200_elf_symbol_address_p (bfd *abfd,
{
if (isym->st_shndx == sec_shndx
&& isym->st_value == addr)
{
if (isym->st_shndx == sec_shndx
&& isym->st_value == addr)
- return
TRUE
;
+ return
true
;
}
symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
}
symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
@@
-1255,10
+1254,10
@@
mn10200_elf_symbol_address_p (bfd *abfd,
|| sym_hash->root.type == bfd_link_hash_defweak)
&& sym_hash->root.u.def.section == sec
&& sym_hash->root.u.def.value == addr)
|| sym_hash->root.type == bfd_link_hash_defweak)
&& sym_hash->root.u.def.section == sec
&& sym_hash->root.u.def.value == addr)
- return
TRUE
;
+ return
true
;
}
}
- return
FALSE
;
+ return
false
;
}
/* This is a version of bfd_generic_get_relocated_section_contents
}
/* This is a version of bfd_generic_get_relocated_section_contents
@@
-1269,7
+1268,7
@@
mn10200_elf_get_relocated_section_contents (bfd *output_bfd,
struct bfd_link_info *link_info,
struct bfd_link_order *link_order,
bfd_byte *data,
struct bfd_link_info *link_info,
struct bfd_link_order *link_order,
bfd_byte *data,
- b
fd_boolean
relocatable,
+ b
ool
relocatable,
asymbol **symbols)
{
Elf_Internal_Shdr *symtab_hdr;
asymbol **symbols)
{
Elf_Internal_Shdr *symtab_hdr;
@@
-1303,7
+1302,7
@@
mn10200_elf_get_relocated_section_contents (bfd *output_bfd,
internal_relocs = (_bfd_elf_link_read_relocs
(input_bfd, input_section, NULL,
internal_relocs = (_bfd_elf_link_read_relocs
(input_bfd, input_section, NULL,
- (Elf_Internal_Rela *) NULL,
FALSE
));
+ (Elf_Internal_Rela *) NULL,
false
));
if (internal_relocs == NULL)
goto error_return;
if (internal_relocs == NULL)
goto error_return;
@@
-1346,10
+1345,8
@@
mn10200_elf_get_relocated_section_contents (bfd *output_bfd,
isymbuf, sections))
goto error_return;
isymbuf, sections))
goto error_return;
- if (sections != NULL)
- free (sections);
- if (isymbuf != NULL
- && symtab_hdr->contents != (unsigned char *) isymbuf)
+ free (sections);
+ if (symtab_hdr->contents != (unsigned char *) isymbuf)
free (isymbuf);
if (elf_section_data (input_section)->relocs != internal_relocs)
free (internal_relocs);
free (isymbuf);
if (elf_section_data (input_section)->relocs != internal_relocs)
free (internal_relocs);
@@
-1358,13
+1355,10
@@
mn10200_elf_get_relocated_section_contents (bfd *output_bfd,
return data;
error_return:
return data;
error_return:
- if (sections != NULL)
- free (sections);
- if (isymbuf != NULL
- && symtab_hdr->contents != (unsigned char *) isymbuf)
+ free (sections);
+ if (symtab_hdr->contents != (unsigned char *) isymbuf)
free (isymbuf);
free (isymbuf);
- if (internal_relocs != NULL
- && elf_section_data (input_section)->relocs != internal_relocs)
+ if (elf_section_data (input_section)->relocs != internal_relocs)
free (internal_relocs);
return NULL;
}
free (internal_relocs);
return NULL;
}
@@
-1378,7
+1372,7
@@
mn10200_elf_get_relocated_section_contents (bfd *output_bfd,
#define elf_backend_rela_normal 1
#define elf_info_to_howto mn10200_info_to_howto
#define elf_backend_rela_normal 1
#define elf_info_to_howto mn10200_info_to_howto
-#define elf_info_to_howto_rel
0
+#define elf_info_to_howto_rel
NULL
#define elf_backend_relocate_section mn10200_elf_relocate_section
#define bfd_elf32_bfd_relax_section mn10200_elf_relax_section
#define bfd_elf32_bfd_get_relocated_section_contents \
#define elf_backend_relocate_section mn10200_elf_relocate_section
#define bfd_elf32_bfd_relax_section mn10200_elf_relax_section
#define bfd_elf32_bfd_get_relocated_section_contents \