* [PATCH] Support for ARM ABS32_NOI and REL32_NOI relocations
@ 2006-08-25 0:20 Mark Shinwell
2006-09-06 10:08 ` Mark Shinwell
2006-09-06 10:32 ` Richard Earnshaw
0 siblings, 2 replies; 3+ messages in thread
From: Mark Shinwell @ 2006-08-25 0:20 UTC (permalink / raw)
To: binutils
[-- Attachment #1: Type: text/plain, Size: 456 bytes --]
This one provides bfd support for the ARM ABS32_NOI and REL32_NOI
relocations. No regressions on arm-none-linux-gnueabi.
OK?
Mark
--
2006-08-24 Mark Shinwell <shinwell@codesourcery.com>
bfd/
* elf32-arm.c (elf32_arm_final_link_relocate): Add cases
for R_ARM_ABS32_NOI and R_ARM_REL32_NOI.
(elf32_arm_gc_sweep_hook): Likewise.
(elf32_arm_check_relocs): Likewise.
(allocate_dynrelocs): Likewise.
[-- Attachment #2: relocs-noi.patch --]
[-- Type: text/plain, Size: 5422 bytes --]
Index: bfd/elf32-arm.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-arm.c,v
retrieving revision 1.87
diff -U3 -p -r1.87 elf32-arm.c
--- bfd/elf32-arm.c 22 Aug 2006 13:18:03 -0000 1.87
+++ bfd/elf32-arm.c 24 Aug 2006 15:28:50 -0000
@@ -3626,7 +3626,9 @@ elf32_arm_final_link_relocate (reloc_how
case R_ARM_PC24:
case R_ARM_ABS32:
+ case R_ARM_ABS32_NOI:
case R_ARM_REL32:
+ case R_ARM_REL32_NOI:
case R_ARM_CALL:
case R_ARM_JUMP24:
case R_ARM_XPC25:
@@ -3642,7 +3644,8 @@ elf32_arm_final_link_relocate (reloc_how
will use the symbol's value, which may point to a PLT entry, but we
don't need to handle that here. If we created a PLT entry, all
branches in this object should go to it. */
- if ((r_type != R_ARM_ABS32 && r_type != R_ARM_REL32)
+ if ((r_type != R_ARM_ABS32 && r_type != R_ARM_REL32
+ && r_type != R_ARM_ABS32_NOI && r_type != R_ARM_REL32_NOI)
&& h != NULL
&& splt != NULL
&& h->plt.offset != (bfd_vma) -1)
@@ -3666,7 +3669,7 @@ elf32_arm_final_link_relocate (reloc_how
run time. */
if ((info->shared || globals->root.is_relocatable_executable)
&& (input_section->flags & SEC_ALLOC)
- && (r_type != R_ARM_REL32
+ && ((r_type != R_ARM_REL32 && r_type != R_ARM_REL32_NOI)
|| !SYMBOL_CALLS_LOCAL (info, h))
&& (h == NULL
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
@@ -3880,6 +3883,10 @@ elf32_arm_final_link_relocate (reloc_how
value |= 1;
break;
+ case R_ARM_ABS32_NOI:
+ value += addend;
+ break;
+
case R_ARM_REL32:
value += addend;
if (sym_flags == STT_ARM_TFUNC)
@@ -3888,6 +3895,12 @@ elf32_arm_final_link_relocate (reloc_how
+ input_section->output_offset + rel->r_offset);
break;
+ case R_ARM_REL32_NOI:
+ value += addend;
+ value -= (input_section->output_section->vma
+ + input_section->output_offset + rel->r_offset);
+ break;
+
case R_ARM_PREL31:
value -= (input_section->output_section->vma
+ input_section->output_offset + rel->r_offset);
@@ -6712,7 +6725,9 @@ elf32_arm_gc_sweep_hook (bfd *
break;
case R_ARM_ABS32:
+ case R_ARM_ABS32_NOI:
case R_ARM_REL32:
+ case R_ARM_REL32_NOI:
case R_ARM_PC24:
case R_ARM_PLT32:
case R_ARM_CALL:
@@ -6745,14 +6760,17 @@ elf32_arm_gc_sweep_hook (bfd *
}
if (r_type == R_ARM_ABS32
- || r_type == R_ARM_REL32)
+ || r_type == R_ARM_REL32
+ || r_type == R_ARM_ABS32_NOI
+ || r_type == R_ARM_REL32_NOI)
{
for (pp = &eh->relocs_copied; (p = *pp) != NULL;
pp = &p->next)
if (p->section == sec)
{
p->count -= 1;
- if (ELF32_R_TYPE (rel->r_info) == R_ARM_REL32)
+ if (ELF32_R_TYPE (rel->r_info) == R_ARM_REL32
+ || ELF32_R_TYPE (rel->r_info) == R_ARM_REL32_NOI)
p->pc_count -= 1;
if (p->count == 0)
*pp = p->next;
@@ -6930,7 +6948,9 @@ elf32_arm_check_relocs (bfd *abfd, struc
/* Fall through */
case R_ARM_ABS32:
+ case R_ARM_ABS32_NOI:
case R_ARM_REL32:
+ case R_ARM_REL32_NOI:
case R_ARM_PC24:
case R_ARM_PLT32:
case R_ARM_CALL:
@@ -6961,7 +6981,10 @@ elf32_arm_check_relocs (bfd *abfd, struc
refers to is in a different object. We can't tell for
sure yet, because something later might force the
symbol local. */
- if (r_type != R_ARM_ABS32 && r_type != R_ARM_REL32)
+ if (r_type != R_ARM_ABS32
+ && r_type != R_ARM_REL32
+ && r_type != R_ARM_ABS32_NOI
+ && r_type != R_ARM_REL32_NOI)
h->needs_plt = 1;
/* If we create a PLT entry, this relocation will reference
@@ -6986,7 +7009,7 @@ elf32_arm_check_relocs (bfd *abfd, struc
relocs_copied field of the hash table entry. */
if ((info->shared || htab->root.is_relocatable_executable)
&& (sec->flags & SEC_ALLOC) != 0
- && (r_type == R_ARM_ABS32
+ && ((r_type == R_ARM_ABS32 || r_type == R_ARM_ABS32_NOI)
|| (h != NULL && ! h->needs_plt
&& (! info->symbolic || ! h->def_regular))))
{
@@ -7070,7 +7093,7 @@ elf32_arm_check_relocs (bfd *abfd, struc
p->pc_count = 0;
}
- if (r_type == R_ARM_REL32)
+ if (r_type == R_ARM_REL32 || r_type == R_ARM_REL32_NOI)
p->pc_count += 1;
p->count += 1;
}
@@ -7605,12 +7628,12 @@ allocate_dynrelocs (struct elf_link_hash
if (info->shared || htab->root.is_relocatable_executable)
{
- /* The only reloc that uses pc_count is R_ARM_REL32, which will
- appear on something like ".long foo - .". We want calls to
- protected symbols to resolve directly to the function rather
- than going via the plt. If people want function pointer
- comparisons to work as expected then they should avoid
- writing assembly like ".long foo - .". */
+ /* The only reloc thats uses pc_count are R_ARM_REL32 and
+ R_ARM_REL32_NOI, which will appear on something like
+ ".long foo - .". We want calls to protected symbols to resolve
+ directly to the function rather than going via the plt. If people
+ want function pointer comparisons to work as expected then they
+ should avoid writing assembly like ".long foo - .". */
if (SYMBOL_CALLS_LOCAL (info, h))
{
struct elf32_arm_relocs_copied **pp;
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Support for ARM ABS32_NOI and REL32_NOI relocations
2006-08-25 0:20 [PATCH] Support for ARM ABS32_NOI and REL32_NOI relocations Mark Shinwell
@ 2006-09-06 10:08 ` Mark Shinwell
2006-09-06 10:32 ` Richard Earnshaw
1 sibling, 0 replies; 3+ messages in thread
From: Mark Shinwell @ 2006-09-06 10:08 UTC (permalink / raw)
To: binutils
Mark Shinwell wrote:
> This one provides bfd support for the ARM ABS32_NOI and REL32_NOI
> relocations. No regressions on arm-none-linux-gnueabi.
Ping, please.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Support for ARM ABS32_NOI and REL32_NOI relocations
2006-08-25 0:20 [PATCH] Support for ARM ABS32_NOI and REL32_NOI relocations Mark Shinwell
2006-09-06 10:08 ` Mark Shinwell
@ 2006-09-06 10:32 ` Richard Earnshaw
1 sibling, 0 replies; 3+ messages in thread
From: Richard Earnshaw @ 2006-09-06 10:32 UTC (permalink / raw)
To: Mark Shinwell; +Cc: binutils
On Thu, 2006-08-24 at 16:38, Mark Shinwell wrote:
> This one provides bfd support for the ARM ABS32_NOI and REL32_NOI
> relocations. No regressions on arm-none-linux-gnueabi.
>
> OK?
>
> Mark
>
> --
>
> 2006-08-24 Mark Shinwell <shinwell@codesourcery.com>
>
> bfd/
> * elf32-arm.c (elf32_arm_final_link_relocate): Add cases
> for R_ARM_ABS32_NOI and R_ARM_REL32_NOI.
> (elf32_arm_gc_sweep_hook): Likewise.
> (elf32_arm_check_relocs): Likewise.
> (allocate_dynrelocs): Likewise.
OK,
R.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-09-06 10:32 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-08-25 0:20 [PATCH] Support for ARM ABS32_NOI and REL32_NOI relocations Mark Shinwell
2006-09-06 10:08 ` Mark Shinwell
2006-09-06 10:32 ` Richard Earnshaw
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).