summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2006-05-01 16:27:16 +0000
committerPaul Brook <paul@codesourcery.com>2006-05-01 16:27:16 +0000
commite3e35c2f5033c079f43a3a40265119e925b6a4db (patch)
tree4d31ec02d569cc1f957c21bc1e917da346d3ae83
parent1ee3a877effbd6d7da58c8f3e8e6418109a98363 (diff)
downloadgdb-e3e35c2f5033c079f43a3a40265119e925b6a4db.tar.gz
2006-05-01 Paul Brook <paul@codesourcery.com>
* bfd/elf32-arm.c (elf32_arm_final_link_relocate): Set thumb funciton bit for R_ARM_REL32. * gas/config/tc-arm.c (arm_optimize_expr): New function. * gas/config/tc-arm.h (md_optimize_expr): Define (arm_optimize_expr): Add prototype. (TC_FORCE_RELOCATION_SUB_SAME): Define. * ld/testsuite/ld-arm/arm-elf.exp: Add thumb-rel32. * ld/testsuite/ld-arm/thumb-rel32.d: New test. * ld/testsuite/ld-arm/thumb-rel32.s: New test.
-rw-r--r--ChangeLog.csl12
-rw-r--r--bfd/elf32-arm.c4
2 files changed, 15 insertions, 1 deletions
diff --git a/ChangeLog.csl b/ChangeLog.csl
index 8200983079b..999bf93ffb3 100644
--- a/ChangeLog.csl
+++ b/ChangeLog.csl
@@ -1,3 +1,15 @@
+2006-05-01 Paul Brook <paul@codesourcery.com>
+
+ * bfd/elf32-arm.c (elf32_arm_final_link_relocate): Set thumb funciton
+ bit for R_ARM_REL32.
+ * gas/config/tc-arm.c (arm_optimize_expr): New function.
+ * gas/config/tc-arm.h (md_optimize_expr): Define
+ (arm_optimize_expr): Add prototype.
+ (TC_FORCE_RELOCATION_SUB_SAME): Define.
+ * ld/testsuite/ld-arm/arm-elf.exp: Add thumb-rel32.
+ * ld/testsuite/ld-arm/thumb-rel32.d: New test.
+ * ld/testsuite/ld-arm/thumb-rel32.s: New test.
+
2006-04-29 Paul Brook <paul@codesourcery.com>
* opcodes/arm-dis.c (coprocessor_opcodes): Add %c to unconditional
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index ca33121708d..f64f5d6feee 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -3274,9 +3274,11 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
break;
case R_ARM_REL32:
+ value += addend;
+ if (sym_flags == STT_ARM_TFUNC)
+ value |= 1;
value -= (input_section->output_section->vma
+ input_section->output_offset + rel->r_offset);
- value += addend;
break;
case R_ARM_PREL31: