projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update ARC instruction data-base.
[deliverable/binutils-gdb.git]
/
bfd
/
elf-m10300.c
diff --git
a/bfd/elf-m10300.c
b/bfd/elf-m10300.c
index 1dbb2f9b262842aa200786133a611499daaa755f..949f14aa018ad75de45bb006b75bab7ca26567e8 100644
(file)
--- a/
bfd/elf-m10300.c
+++ b/
bfd/elf-m10300.c
@@
-1,5
+1,5
@@
/* Matsushita 10300 specific support for 32-bit ELF
/* Matsushita 10300 specific support for 32-bit ELF
- Copyright (C) 1996-201
4
Free Software Foundation, Inc.
+ Copyright (C) 1996-201
6
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.
@@
-142,11
+142,11
@@
static reloc_howto_type elf_mn10300_howto_table[] =
/* Dummy relocation. Does nothing. */
HOWTO (R_MN10300_NONE,
0,
/* Dummy relocation. Does nothing. */
HOWTO (R_MN10300_NONE,
0,
-
2
,
-
16
,
+
3
,
+
0
,
FALSE,
0,
FALSE,
0,
- complain_overflow_
bitfield
,
+ complain_overflow_
dont
,
bfd_elf_generic_reloc,
"R_MN10300_NONE",
FALSE,
bfd_elf_generic_reloc,
"R_MN10300_NONE",
FALSE,
@@
-806,7
+806,13
@@
mn10300_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
unsigned int r_type;
r_type = ELF32_R_TYPE (dst->r_info);
unsigned int r_type;
r_type = ELF32_R_TYPE (dst->r_info);
- BFD_ASSERT (r_type < (unsigned int) R_MN10300_MAX);
+ if (r_type >= R_MN10300_MAX)
+ {
+ (*_bfd_error_handler) (_("%B: unrecognised MN10300 reloc number: %d"),
+ abfd, r_type);
+ bfd_set_error (bfd_error_bad_value);
+ r_type = R_MN10300_NONE;
+ }
cache_ptr->howto = elf_mn10300_howto_table + r_type;
}
cache_ptr->howto = elf_mn10300_howto_table + r_type;
}
@@
-824,7
+830,7
@@
elf_mn10300_tls_transition (struct bfd_link_info * info,
&& elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_IE)
return R_MN10300_TLS_GOTIE;
&& elf_mn10300_hash_entry (h)->tls_type == GOT_TLS_IE)
return R_MN10300_TLS_GOTIE;
- if (
info->shared
)
+ if (
bfd_link_pic (info)
)
return r_type;
if (! (sec->flags & SEC_CODE))
return r_type;
if (! (sec->flags & SEC_CODE))
@@
-1055,7
+1061,7
@@
mn10300_elf_check_relocs (bfd *abfd,
srelgot = NULL;
sreloc = NULL;
srelgot = NULL;
sreloc = NULL;
- if (
info->relocatable
)
+ if (
bfd_link_relocatable (info)
)
return TRUE;
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
return TRUE;
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
@@
-1147,7
+1153,7
@@
mn10300_elf_check_relocs (bfd *abfd,
case R_MN10300_TLS_IE:
case R_MN10300_TLS_GOTIE:
case R_MN10300_TLS_IE:
case R_MN10300_TLS_GOTIE:
- if (
info->shared
)
+ if (
bfd_link_pic (info)
)
info->flags |= DF_STATIC_TLS;
/* Fall through */
info->flags |= DF_STATIC_TLS;
/* Fall through */
@@
-1173,7
+1179,7
@@
mn10300_elf_check_relocs (bfd *abfd,
}
if (srelgot == NULL
}
if (srelgot == NULL
- && (h != NULL ||
info->shared
))
+ && (h != NULL ||
bfd_link_pic (info)
))
{
srelgot = bfd_get_linker_section (dynobj, ".rela.got");
if (srelgot == NULL)
{
srelgot = bfd_get_linker_section (dynobj, ".rela.got");
if (srelgot == NULL)
@@
-1262,7
+1268,7
@@
mn10300_elf_check_relocs (bfd *abfd,
local_got_offsets[r_symndx] = sgot->size;
local_got_offsets[r_symndx] = sgot->size;
- if (
info->shared
)
+ if (
bfd_link_pic (info)
)
{
/* If we are generating a shared object, we need to
output a R_MN10300_RELATIVE reloc so that the dynamic
{
/* If we are generating a shared object, we need to
output a R_MN10300_RELATIVE reloc so that the dynamic
@@
-1326,7
+1332,7
@@
mn10300_elf_check_relocs (bfd *abfd,
need_shared_relocs:
/* If we are creating a shared library, then we
need to copy the reloc into the shared library. */
need_shared_relocs:
/* If we are creating a shared library, then we
need to copy the reloc into the shared library. */
- if (
info->shared
+ if (
bfd_link_pic (info)
&& (sec->flags & SEC_ALLOC) != 0
/* Do not generate a dynamic reloc for a
reloc associated with a SYM_DIFF operation. */
&& (sec->flags & SEC_ALLOC) != 0
/* Do not generate a dynamic reloc for a
reloc associated with a SYM_DIFF operation. */
@@
-1459,7
+1465,7
@@
mn10300_elf_final_link_relocate (reloc_howto_type *howto,
case R_MN10300_GOTOFF32:
case R_MN10300_GOTOFF24:
case R_MN10300_GOTOFF16:
case R_MN10300_GOTOFF32:
case R_MN10300_GOTOFF24:
case R_MN10300_GOTOFF16:
- if (
info->shared
+ if (
bfd_link_pic (info)
&& (input_section->flags & SEC_ALLOC) != 0
&& h != NULL
&& ! SYMBOL_REFERENCES_LOCAL (info, h))
&& (input_section->flags & SEC_ALLOC) != 0
&& h != NULL
&& ! SYMBOL_REFERENCES_LOCAL (info, h))
@@
-1468,7
+1474,7
@@
mn10300_elf_final_link_relocate (reloc_howto_type *howto,
/* Issue 2052223:
Taking the address of a protected function in a shared library
is illegal. Issue an error message here. */
/* Issue 2052223:
Taking the address of a protected function in a shared library
is illegal. Issue an error message here. */
- if (
info->shared
+ if (
bfd_link_pic (info)
&& (input_section->flags & SEC_ALLOC) != 0
&& h != NULL
&& ELF_ST_VISIBILITY (h->other) == STV_PROTECTED
&& (input_section->flags & SEC_ALLOC) != 0
&& h != NULL
&& ELF_ST_VISIBILITY (h->other) == STV_PROTECTED
@@
-1526,7
+1532,7
@@
mn10300_elf_final_link_relocate (reloc_howto_type *howto,
return bfd_reloc_ok;
case R_MN10300_32:
return bfd_reloc_ok;
case R_MN10300_32:
- if (
info->shared
+ if (
bfd_link_pic (info)
/* Do not generate relocs when an R_MN10300_32 has been used
with an R_MN10300_SYM_DIFF to compute a difference of two
symbols. */
/* Do not generate relocs when an R_MN10300_32 has been used
with an R_MN10300_SYM_DIFF to compute a difference of two
symbols. */
@@
-1884,7
+1890,7
@@
mn10300_elf_final_link_relocate (reloc_howto_type *howto,
{
bfd_put_32 (output_bfd, value, sgot->contents + off);
{
bfd_put_32 (output_bfd, value, sgot->contents + off);
- if (
info->shared
)
+ if (
bfd_link_pic (info)
)
{
asection * srelgot;
Elf_Internal_Rela outrel;
{
asection * srelgot;
Elf_Internal_Rela outrel;
@@
-2085,7
+2091,7
@@
mn10300_elf_relocate_section (bfd *output_bfd,
/* _32 relocs in executables force _COPY relocs,
such that the address of the symbol ends up
being local. */
/* _32 relocs in executables force _COPY relocs,
such that the address of the symbol ends up
being local. */
- && !
info->executable
+ && !
bfd_link_executable (info)
&& !SYMBOL_REFERENCES_LOCAL (info, hh)
&& ((input_section->flags & SEC_ALLOC) != 0
/* DWARF will emit R_MN10300_32 relocations
&& !SYMBOL_REFERENCES_LOCAL (info, hh)
&& ((input_section->flags & SEC_ALLOC) != 0
/* DWARF will emit R_MN10300_32 relocations
@@
-2099,7
+2105,7
@@
mn10300_elf_relocate_section (bfd *output_bfd,
obscure cases sec->output_section will be NULL. */
relocation = 0;
obscure cases sec->output_section will be NULL. */
relocation = 0;
- else if (!
info->relocatable
&& unresolved_reloc
+ else if (!
bfd_link_relocatable (info)
&& unresolved_reloc
&& _bfd_elf_section_offset (output_bfd, info, input_section,
rel->r_offset) != (bfd_vma) -1)
&& _bfd_elf_section_offset (output_bfd, info, input_section,
rel->r_offset) != (bfd_vma) -1)
@@
-2116,7
+2122,7
@@
mn10300_elf_relocate_section (bfd *output_bfd,
RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
rel, 1, relend, howto, 0, contents);
RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
rel, 1, relend, howto, 0, contents);
- if (
info->relocatable
)
+ if (
bfd_link_relocatable (info)
)
continue;
r = mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
continue;
r = mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd,
@@
-2659,7
+2665,7
@@
mn10300_elf_relax_section (bfd *abfd,
asection *section = sec;
bfd_vma align_gap_adjustment;
asection *section = sec;
bfd_vma align_gap_adjustment;
- if (
link_info->relocatable
)
+ if (
bfd_link_relocatable (link_info)
)
(*link_info->callbacks->einfo)
(_("%P%F: --relax and -r may not be used together\n"));
(*link_info->callbacks->einfo)
(_("%P%F: --relax and -r may not be used together\n"));
@@
-3281,7
+3287,7
@@
mn10300_elf_relax_section (bfd *abfd,
/* We don't have to do anything for a relocatable link, if
this section does not have relocs, or if this is not a
code section. */
/* We don't have to do anything for a relocatable link, if
this section does not have relocs, or if this is not a
code section. */
- if (
link_info->relocatable
+ if (
bfd_link_relocatable (link_info)
|| (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)
@@
-4770,11
+4776,11
@@
static const bfd_byte elf_mn10300_pic_plt_entry[PIC_PLT_ENTRY_SIZE] =
/* Return size of the first PLT entry. */
#define elf_mn10300_sizeof_plt0(info) \
/* Return size of the first PLT entry. */
#define elf_mn10300_sizeof_plt0(info) \
- (
info->shared
? PIC_PLT_ENTRY_SIZE : PLT0_ENTRY_SIZE)
+ (
bfd_link_pic (info)
? PIC_PLT_ENTRY_SIZE : PLT0_ENTRY_SIZE)
/* Return size of a PLT entry. */
#define elf_mn10300_sizeof_plt(info) \
/* Return size of a PLT entry. */
#define elf_mn10300_sizeof_plt(info) \
- (
info->shared
? PIC_PLT_ENTRY_SIZE : PLT_ENTRY_SIZE)
+ (
bfd_link_pic (info)
? PIC_PLT_ENTRY_SIZE : PLT_ENTRY_SIZE)
/* Return offset of the PLT0 address in an absolute PLT entry. */
#define elf_mn10300_plt_plt0_offset(info) 16
/* Return offset of the PLT0 address in an absolute PLT entry. */
#define elf_mn10300_plt_plt0_offset(info) 16
@@
-4866,7
+4872,7
@@
_bfd_mn10300_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
be needed, we can discard it later. We will never need this
section when generating a shared object, since they do not use
copy relocs. */
be needed, we can discard it later. We will never need this
section when generating a shared object, since they do not use
copy relocs. */
- if (!
info->shared
)
+ if (!
bfd_link_pic (info)
)
{
s = bfd_make_section_anyway_with_flags (abfd,
(bed->default_use_rela_p
{
s = bfd_make_section_anyway_with_flags (abfd,
(bed->default_use_rela_p
@@
-4911,7
+4917,7
@@
_bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
if (h->type == STT_FUNC
|| h->needs_plt)
{
if (h->type == STT_FUNC
|| h->needs_plt)
{
- if (!
info->shared
+ if (!
bfd_link_pic (info)
&& !h->def_dynamic
&& !h->ref_dynamic)
{
&& !h->def_dynamic
&& !h->ref_dynamic)
{
@@
-4944,7
+4950,7
@@
_bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
location in the .plt. This is required to make function
pointers compare as equal between the normal executable and
the shared library. */
location in the .plt. This is required to make function
pointers compare as equal between the normal executable and
the shared library. */
- if (!
info->shared
+ if (!
bfd_link_pic (info)
&& !h->def_regular)
{
h->root.u.def.section = s;
&& !h->def_regular)
{
h->root.u.def.section = s;
@@
-4989,7
+4995,7
@@
_bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info,
only references to the symbol are via the global offset table.
For such cases we need not do anything here; the relocations will
be handled correctly by relocate_section. */
only references to the symbol are via the global offset table.
For such cases we need not do anything here; the relocations will
be handled correctly by relocate_section. */
- if (
info->shared
)
+ if (
bfd_link_pic (info)
)
return TRUE;
/* If there are no references to this symbol that do not use the
return TRUE;
/* If there are no references to this symbol that do not use the
@@
-5046,7
+5052,7
@@
_bfd_mn10300_elf_size_dynamic_sections (bfd * output_bfd,
if (elf_hash_table (info)->dynamic_sections_created)
{
/* Set the contents of the .interp section to the interpreter. */
if (elf_hash_table (info)->dynamic_sections_created)
{
/* Set the contents of the .interp section to the interpreter. */
- if (
info->executable
)
+ if (
bfd_link_executable (info)
)
{
s = bfd_get_linker_section (dynobj, ".interp");
BFD_ASSERT (s != NULL);
{
s = bfd_get_linker_section (dynobj, ".interp");
BFD_ASSERT (s != NULL);
@@
-5168,7
+5174,7
@@
_bfd_mn10300_elf_size_dynamic_sections (bfd * output_bfd,
but we must add the entries now so that we get the correct
size for the .dynamic section. The DT_DEBUG entry is filled
in by the dynamic linker and used by the debugger. */
but we must add the entries now so that we get the correct
size for the .dynamic section. The DT_DEBUG entry is filled
in by the dynamic linker and used by the debugger. */
- if (!
info->shared
)
+ if (!
bfd_link_pic (info)
)
{
if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0))
return FALSE;
{
if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0))
return FALSE;
@@
-5248,7
+5254,7
@@
_bfd_mn10300_elf_finish_dynamic_symbol (bfd * output_bfd,
got_offset = (plt_index + 3) * 4;
/* Fill in the entry in the procedure linkage table. */
got_offset = (plt_index + 3) * 4;
/* Fill in the entry in the procedure linkage table. */
- if (!
info->shared
)
+ if (!
bfd_link_pic (info)
)
{
memcpy (splt->contents + h->plt.offset, elf_mn10300_plt_entry,
elf_mn10300_sizeof_plt (info));
{
memcpy (splt->contents + h->plt.offset, elf_mn10300_plt_entry,
elf_mn10300_sizeof_plt (info));
@@
-5351,7
+5357,7
@@
_bfd_mn10300_elf_finish_dynamic_symbol (bfd * output_bfd,
the symbol was forced to be local because of a version file.
The entry in the global offset table will already have been
initialized in the relocate_section function. */
the symbol was forced to be local because of a version file.
The entry in the global offset table will already have been
initialized in the relocate_section function. */
- if (
info->shared
+ if (
bfd_link_pic (info)
&& (info->symbolic || h->dynindx == -1)
&& h->def_regular)
{
&& (info->symbolic || h->dynindx == -1)
&& h->def_regular)
{
@@
-5491,7
+5497,7
@@
_bfd_mn10300_elf_finish_dynamic_sections (bfd * output_bfd,
splt = htab->root.splt;
if (splt && splt->size > 0)
{
splt = htab->root.splt;
if (splt && splt->size > 0)
{
- if (
info->shared
)
+ if (
bfd_link_pic (info)
)
{
memcpy (splt->contents, elf_mn10300_pic_plt_entry,
elf_mn10300_sizeof_plt (info));
{
memcpy (splt->contents, elf_mn10300_pic_plt_entry,
elf_mn10300_sizeof_plt (info));
This page took
0.027718 seconds
and
4
git commands to generate.