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
/
elf32-tic6x.c
diff --git
a/bfd/elf32-tic6x.c
b/bfd/elf32-tic6x.c
index 8381cfa76430830c37928a4e930b455c3f3356fa..0ca1e7ad518092a4c031ca23dcaa5d0d44643b78 100644
(file)
--- a/
bfd/elf32-tic6x.c
+++ b/
bfd/elf32-tic6x.c
@@
-1,5
+1,5
@@
/* 32-bit ELF support for TI C6X
/* 32-bit ELF support for TI C6X
- Copyright (C) 2010-201
4
Free Software Foundation, Inc.
+ Copyright (C) 2010-201
6
Free Software Foundation, Inc.
Contributed by Joseph Myers <joseph@codesourcery.com>
Bernd Schmidt <bernds@codesourcery.com>
Contributed by Joseph Myers <joseph@codesourcery.com>
Bernd Schmidt <bernds@codesourcery.com>
@@
-152,7
+152,7
@@
static reloc_howto_type elf32_tic6x_howto_table[] =
{
HOWTO (R_C6000_NONE, /* type */
0, /* rightshift */
{
HOWTO (R_C6000_NONE, /* type */
0, /* rightshift */
-
0
, /* size (0 = byte, 1 = short, 2 = long) */
+
3
, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
@@
-820,7
+820,7
@@
static reloc_howto_type elf32_tic6x_howto_table_rel[] =
{
HOWTO (R_C6000_NONE, /* type */
0, /* rightshift */
{
HOWTO (R_C6000_NONE, /* type */
0, /* rightshift */
-
0
, /* size (0 = byte, 1 = short, 2 = long) */
+
3
, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
@@
-1591,7
+1591,7
@@
elf32_tic6x_link_hash_table_create (bfd *abfd)
static bfd_boolean
elf32_tic6x_final_link (bfd *abfd, struct bfd_link_info *info)
{
static bfd_boolean
elf32_tic6x_final_link (bfd *abfd, struct bfd_link_info *info)
{
- if (
info->shared
)
+ if (
bfd_link_pic (info)
)
{
obj_attribute *out_attr;
out_attr = elf_known_obj_attributes_proc (abfd);
{
obj_attribute *out_attr;
out_attr = elf_known_obj_attributes_proc (abfd);
@@
-1661,11
+1661,11
@@
elf32_tic6x_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info)
return FALSE;
htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
return FALSE;
htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
- if (!
info->shared
)
+ if (!
bfd_link_pic (info)
)
htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
if (!htab->sdynbss
htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
if (!htab->sdynbss
- || (!
info->shared
&& !htab->srelbss))
+ || (!
bfd_link_pic (info)
&& !htab->srelbss))
abort ();
return TRUE;
abort ();
return TRUE;
@@
-1761,7
+1761,7
@@
elf32_tic6x_finish_dynamic_symbol (bfd * output_bfd,
it up. */
if ((h->dynindx == -1
it up. */
if ((h->dynindx == -1
- && !((h->forced_local ||
info->executable
)
+ && !((h->forced_local ||
bfd_link_executable (info)
)
&& h->def_regular
&& h->type == STT_GNU_IFUNC))
|| plt == NULL
&& h->def_regular
&& h->type == STT_GNU_IFUNC))
|| plt == NULL
@@
-1848,8
+1848,8
@@
elf32_tic6x_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
- && (
info->symbolic
+ if (
bfd_link_pic (info)
+ && (
SYMBOLIC_BIND (info, h)
|| h->dynindx == -1 || h->forced_local) && h->def_regular)
{
asection *s = h->root.u.def.section;
|| h->dynindx == -1 || h->forced_local) && h->def_regular)
{
asection *s = h->root.u.def.section;
@@
-1993,7
+1993,7
@@
elf32_tic6x_gc_sweep_hook (bfd *abfd,
bfd_signed_vma *local_got_refcounts;
const Elf_Internal_Rela *rel, *relend;
bfd_signed_vma *local_got_refcounts;
const Elf_Internal_Rela *rel, *relend;
- if (
info->relocatable
)
+ if (
bfd_link_relocatable (info)
)
return TRUE;
htab = elf32_tic6x_hash_table (info);
return TRUE;
htab = elf32_tic6x_hash_table (info);
@@
-2128,7
+2128,7
@@
elf32_tic6x_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
@@
-2168,7
+2168,7
@@
elf32_tic6x_adjust_dynamic_symbol (struct bfd_link_info *info,
s = htab->sdynbss;
s = htab->sdynbss;
- return _bfd_elf_adjust_dynamic_copy (h, s);
+ return _bfd_elf_adjust_dynamic_copy (
info,
h, s);
}
static bfd_boolean
}
static bfd_boolean
@@
-2321,7
+2321,7
@@
elf32_tic6x_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)
)
{
if (is_rel
&& sym != NULL
{
if (is_rel
&& sym != NULL
@@
-2403,7
+2403,7
@@
elf32_tic6x_relocate_section (bfd *output_bfd,
case R_C6000_DSBT_INDEX:
relocation = elf32_tic6x_hash_table (info)->params.dsbt_index;
case R_C6000_DSBT_INDEX:
relocation = elf32_tic6x_hash_table (info)->params.dsbt_index;
- if (!
info->shared
|| relocation != 0)
+ if (!
bfd_link_pic (info)
|| relocation != 0)
break;
/* fall through */
break;
/* fall through */
@@
-2416,7
+2416,7
@@
elf32_tic6x_relocate_section (bfd *output_bfd,
/* When generating a shared object or relocatable executable, these
relocations are copied into the output file to be resolved at
run time. */
/* When generating a shared object or relocatable executable, these
relocations are copied into the output file to be resolved at
run time. */
- if ((
info->shared
|| elf32_tic6x_using_dsbt (output_bfd))
+ if ((
bfd_link_pic (info)
|| elf32_tic6x_using_dsbt (output_bfd))
&& (input_section->flags & SEC_ALLOC)
&& (h == NULL
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
&& (input_section->flags & SEC_ALLOC)
&& (h == NULL
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
@@
-2448,8
+2448,8
@@
elf32_tic6x_relocate_section (bfd *output_bfd,
memset (&outrel, 0, sizeof outrel);
else if (h != NULL
&& h->dynindx != -1
memset (&outrel, 0, sizeof outrel);
else if (h != NULL
&& h->dynindx != -1
- && (!
info->shared
- || !
info->symbolic
+ && (!
bfd_link_pic (info)
+ || !
SYMBOLIC_BIND (info, h)
|| !h->def_regular))
{
outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
|| !h->def_regular))
{
outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
@@
-2544,8
+2544,10
@@
elf32_tic6x_relocate_section (bfd *output_bfd,
off = h->got.offset;
dyn = htab->elf.dynamic_sections_created;
off = h->got.offset;
dyn = htab->elf.dynamic_sections_created;
- if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
- || (info->shared
+ if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
+ bfd_link_pic (info),
+ h)
+ || (bfd_link_pic (info)
&& SYMBOL_REFERENCES_LOCAL (info, h))
|| (ELF_ST_VISIBILITY (h->other)
&& h->root.type == bfd_link_hash_undefweak))
&& SYMBOL_REFERENCES_LOCAL (info, h))
|| (ELF_ST_VISIBILITY (h->other)
&& h->root.type == bfd_link_hash_undefweak))
@@
-2570,7
+2572,8
@@
elf32_tic6x_relocate_section (bfd *output_bfd,
htab->elf.sgot->contents + off);
h->got.offset |= 1;
htab->elf.sgot->contents + off);
h->got.offset |= 1;
- if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared,
+ if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
+ bfd_link_pic (info),
h)
&& !(ELF_ST_VISIBILITY (h->other)
&& h->root.type == bfd_link_hash_undefweak))
h)
&& !(ELF_ST_VISIBILITY (h->other)
&& h->root.type == bfd_link_hash_undefweak))
@@
-2598,7
+2601,7
@@
elf32_tic6x_relocate_section (bfd *output_bfd,
bfd_put_32 (output_bfd, relocation,
htab->elf.sgot->contents + off);
bfd_put_32 (output_bfd, relocation,
htab->elf.sgot->contents + off);
- if (
info->shared
|| elf32_tic6x_using_dsbt (output_bfd))
+ if (
bfd_link_pic (info)
|| elf32_tic6x_using_dsbt (output_bfd))
elf32_tic6x_make_got_dynreloc (output_bfd, htab, sec, off);
local_got_offsets[r_symndx] |= 1;
elf32_tic6x_make_got_dynreloc (output_bfd, htab, sec, off);
local_got_offsets[r_symndx] |= 1;
@@
-2778,7
+2781,7
@@
elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info,
const Elf_Internal_Rela *rel_end;
asection *sreloc;
const Elf_Internal_Rela *rel_end;
asection *sreloc;
- if (
info->relocatable
)
+ if (
bfd_link_relocatable (info)
)
return TRUE;
htab = elf32_tic6x_hash_table (info);
return TRUE;
htab = elf32_tic6x_hash_table (info);
@@
-2787,7
+2790,7
@@
elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info,
/* Create dynamic sections for relocatable executables so that we can
copy relocations. */
/* Create dynamic sections for relocatable executables so that we can
copy relocations. */
- if ((
info->shared
|| elf32_tic6x_using_dsbt (abfd))
+ if ((
bfd_link_pic (info)
|| elf32_tic6x_using_dsbt (abfd))
&& ! htab->elf.dynamic_sections_created)
{
if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
&& ! htab->elf.dynamic_sections_created)
{
if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
@@
-2902,7
+2905,7
@@
elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info,
store the number of R_C6000_DSBT_INDEX relocs in the
pc_count field, and potentially discard the extra space
in elf32_tic6x_allocate_dynrelocs. */
store the number of R_C6000_DSBT_INDEX relocs in the
pc_count field, and potentially discard the extra space
in elf32_tic6x_allocate_dynrelocs. */
- if (!
info->shared
)
+ if (!
bfd_link_pic (info)
)
break;
/* fall through */
break;
/* fall through */
@@
-2933,7
+2936,7
@@
elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info,
may need to keep relocations for symbols satisfied by a
dynamic library if we manage to avoid copy relocs for the
symbol. */
may need to keep relocations for symbols satisfied by a
dynamic library if we manage to avoid copy relocs for the
symbol. */
- if ((
info->shared
|| elf32_tic6x_using_dsbt (abfd))
+ if ((
bfd_link_pic (info)
|| elf32_tic6x_using_dsbt (abfd))
&& (sec->flags & SEC_ALLOC) != 0)
{
struct elf_dyn_relocs *p;
&& (sec->flags & SEC_ALLOC) != 0)
{
struct elf_dyn_relocs *p;
@@
-3006,7
+3009,7
@@
elf32_tic6x_check_relocs (bfd *abfd, struct bfd_link_info *info,
case R_C6000_SBR_H16_B:
case R_C6000_SBR_H16_H:
case R_C6000_SBR_H16_W:
case R_C6000_SBR_H16_B:
case R_C6000_SBR_H16_H:
case R_C6000_SBR_H16_W:
- if (h != NULL &&
info->executable
)
+ if (h != NULL &&
bfd_link_executable (info)
)
{
/* For B14-relative addresses, we might need a copy
reloc. */
{
/* For B14-relative addresses, we might need a copy
reloc. */
@@
-3130,7
+3133,7
@@
elf32_tic6x_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
return FALSE;
}
return FALSE;
}
- if (
info->shared
+ if (
bfd_link_pic (info)
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
{
asection *s = htab->elf.splt;
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h))
{
asection *s = htab->elf.splt;
@@
-3147,7
+3150,7
@@
elf32_tic6x_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
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
&& !h->def_regular)
+ if (!
bfd_link_pic (info)
&& !h->def_regular)
{
h->root.u.def.section = s;
h->root.u.def.value = h->plt.offset;
{
h->root.u.def.section = s;
h->root.u.def.value = h->plt.offset;
@@
-3202,7
+3205,7
@@
elf32_tic6x_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
/* Discard relocs on undefined weak syms with non-default
visibility. */
/* Discard relocs on undefined weak syms with non-default
visibility. */
- if (
info->shared
|| elf32_tic6x_using_dsbt (htab->obfd))
+ if (
bfd_link_pic (info)
|| elf32_tic6x_using_dsbt (htab->obfd))
{
/* We use the pc_count field to hold the number of
R_C6000_DSBT_INDEX relocs. */
{
/* We use the pc_count field to hold the number of
R_C6000_DSBT_INDEX relocs. */
@@
-3297,7
+3300,7
@@
elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
if (htab->elf.dynamic_sections_created)
{
/* Set the contents of the .interp section to the interpreter. */
if (htab->elf.dynamic_sections_created)
{
/* Set the contents of the .interp section to the interpreter. */
- if (
info->executable
)
+ if (
bfd_link_executable (info) && !info->nointerp
)
{
s = bfd_get_linker_section (dynobj, ".interp");
if (s == NULL)
{
s = bfd_get_linker_section (dynobj, ".interp");
if (s == NULL)
@@
-3360,7
+3363,7
@@
elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
*local_got = s->size;
s->size += 4;
*local_got = s->size;
s->size += 4;
- if (
info->shared
|| elf32_tic6x_using_dsbt (output_bfd))
+ if (
bfd_link_pic (info)
|| elf32_tic6x_using_dsbt (output_bfd))
{
srel->size += sizeof (Elf32_External_Rela);
}
{
srel->size += sizeof (Elf32_External_Rela);
}
@@
-3459,7
+3462,7
@@
elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
#define add_dynamic_entry(TAG, VAL) \
_bfd_elf_add_dynamic_entry (info, TAG, VAL)
#define add_dynamic_entry(TAG, VAL) \
_bfd_elf_add_dynamic_entry (info, TAG, VAL)
- if (
info->executable
)
+ if (
bfd_link_executable (info)
)
{
if (!add_dynamic_entry (DT_DEBUG, 0))
return FALSE;
{
if (!add_dynamic_entry (DT_DEBUG, 0))
return FALSE;
@@
-3511,7
+3514,7
@@
elf32_tic6x_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
static bfd_boolean
elf32_tic6x_always_size_sections (bfd *output_bfd, struct bfd_link_info *info)
{
static bfd_boolean
elf32_tic6x_always_size_sections (bfd *output_bfd, struct bfd_link_info *info)
{
- if (elf32_tic6x_using_dsbt (output_bfd) && !
info->relocatable
+ if (elf32_tic6x_using_dsbt (output_bfd) && !
bfd_link_relocatable (info)
&& !bfd_elf_stack_segment_size (output_bfd, info,
"__stacksize", DEFAULT_STACK_SIZE))
return FALSE;
&& !bfd_elf_stack_segment_size (output_bfd, info,
"__stacksize", DEFAULT_STACK_SIZE))
return FALSE;
This page took
0.02828 seconds
and
4
git commands to generate.