[ARC] ARC_PC32 dynamic reloc incorrectly generated.
Fixed issue related to the generation of ARC_PC32 dynamic relocs when symbol is dynamic but still defined in a non shared object. bfd/ChangeLog: Cupertino Miranda <cmiranda@synopsys.com> elf32-arc.c (elf_arc_relocate_section): Small refactor and condition changes.
This commit is contained in:
parent
7ef0acc15e
commit
cd6402916f
|
@ -1,3 +1,8 @@
|
||||||
|
2018-06-08 Cupertino Miranda <cmiranda@synopsys.com>
|
||||||
|
|
||||||
|
* elf32-arc.c (elf_arc_relocate_section): Small refactor and condition
|
||||||
|
changes.
|
||||||
|
|
||||||
2017-06-08 Cupertino Miranda <cmiranda@synopsys.com>
|
2017-06-08 Cupertino Miranda <cmiranda@synopsys.com>
|
||||||
|
|
||||||
* config/tc-arc.c (md_undefined_symbol): Changed.
|
* config/tc-arc.c (md_undefined_symbol): Changed.
|
||||||
|
|
|
@ -1713,16 +1713,22 @@ elf_arc_relocate_section (bfd * output_bfd,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define IS_ARC_PCREL_TYPE(TYPE) \
|
||||||
|
( (TYPE == R_ARC_PC32) \
|
||||||
|
|| (TYPE == R_ARC_32_PCREL))
|
||||||
|
|
||||||
switch (r_type)
|
switch (r_type)
|
||||||
{
|
{
|
||||||
case R_ARC_32:
|
case R_ARC_32:
|
||||||
case R_ARC_32_ME:
|
case R_ARC_32_ME:
|
||||||
case R_ARC_PC32:
|
case R_ARC_PC32:
|
||||||
case R_ARC_32_PCREL:
|
case R_ARC_32_PCREL:
|
||||||
if ((bfd_link_pic (info))
|
if (bfd_link_pic (info)
|
||||||
&& ((r_type != R_ARC_PC32 && r_type != R_ARC_32_PCREL)
|
&& (!IS_ARC_PCREL_TYPE (r_type)
|
||||||
|| (h != NULL
|
|| (h != NULL
|
||||||
&& h->dynindx != -1
|
&& h->dynindx != -1
|
||||||
|
&& !h->def_regular
|
||||||
&& (!info->symbolic || !h->def_regular))))
|
&& (!info->symbolic || !h->def_regular))))
|
||||||
{
|
{
|
||||||
Elf_Internal_Rela outrel;
|
Elf_Internal_Rela outrel;
|
||||||
|
@ -1739,6 +1745,7 @@ elf_arc_relocate_section (bfd * output_bfd,
|
||||||
info,
|
info,
|
||||||
input_section,
|
input_section,
|
||||||
rel->r_offset);
|
rel->r_offset);
|
||||||
|
|
||||||
if (outrel.r_offset == (bfd_vma) -1)
|
if (outrel.r_offset == (bfd_vma) -1)
|
||||||
skip = TRUE;
|
skip = TRUE;
|
||||||
|
|
||||||
|
@ -1746,10 +1753,6 @@ elf_arc_relocate_section (bfd * output_bfd,
|
||||||
outrel.r_offset += (input_section->output_section->vma
|
outrel.r_offset += (input_section->output_section->vma
|
||||||
+ input_section->output_offset);
|
+ input_section->output_offset);
|
||||||
|
|
||||||
#define IS_ARC_PCREL_TYPE(TYPE) \
|
|
||||||
( (TYPE == R_ARC_PC32) \
|
|
||||||
|| (TYPE == R_ARC_32_PCREL))
|
|
||||||
|
|
||||||
if (skip)
|
if (skip)
|
||||||
{
|
{
|
||||||
memset (&outrel, 0, sizeof outrel);
|
memset (&outrel, 0, sizeof outrel);
|
||||||
|
@ -1757,10 +1760,10 @@ elf_arc_relocate_section (bfd * output_bfd,
|
||||||
}
|
}
|
||||||
else if (h != NULL
|
else if (h != NULL
|
||||||
&& h->dynindx != -1
|
&& h->dynindx != -1
|
||||||
&& ((IS_ARC_PCREL_TYPE (r_type))
|
&& (IS_ARC_PCREL_TYPE (r_type)
|
||||||
|| !(bfd_link_executable (info)
|
|| !(bfd_link_executable (info)
|
||||||
|| SYMBOLIC_BIND (info, h))
|
|| SYMBOLIC_BIND (info, h))
|
||||||
|| ! h->def_regular))
|
|| ! h->def_regular))
|
||||||
{
|
{
|
||||||
BFD_ASSERT (h != NULL);
|
BFD_ASSERT (h != NULL);
|
||||||
if ((input_section->flags & SEC_ALLOC) != 0)
|
if ((input_section->flags & SEC_ALLOC) != 0)
|
||||||
|
|
Loading…
Reference in New Issue