summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Filippov <jcmvbkbc@gmail.com>2016-02-02 17:11:38 +0300
committerMax Filippov <jcmvbkbc@gmail.com>2016-02-03 20:44:57 +0300
commitea173078d2c0c1af13a8b315ca187ffa4d00cd66 (patch)
tree2dff54ce68447dd4d78c34d6f85bc38861770df7
parent0cb4071ef9e10f703220f5e731141bf438aca16e (diff)
downloadbinutils-gdb-ea173078d2c0c1af13a8b315ca187ffa4d00cd66.tar.gz
xtensa: fix signedness of gas relocations
Change 1058c7532d0b "Use signed data type for R_XTENSA_DIFF* relocation offsets." changed signedness of BFD_RELOC_XTENSA_DIFF* relocations substituted for BFD_RELOC_*. This made it impossible to encode arbitrary 8-, 16- and 32-bit values, which broke e.g. debug info encoding by .loc directive. Revert this part and add test. gas/ 2016-02-03 Max Filippov <jcmvbkbc@gmail.com> * config/tc-xtensa.c (md_apply_fix): Mark BFD_RELOC_XTENSA_DIFF* substitutions for BFD_RELOC_* as unsigned. * gas/testsuite/gas/xtensa/all.exp: Add loc to list of xtensa tests. * gas/testsuite/gas/xtensa/loc.d: New file: loc test result patterns. * gas/testsuite/gas/xtensa/loc.s: New file: loc test.
-rw-r--r--gas/ChangeLog10
-rw-r--r--gas/config/tc-xtensa.c6
-rw-r--r--gas/testsuite/gas/xtensa/all.exp1
-rw-r--r--gas/testsuite/gas/xtensa/loc.d10
-rw-r--r--gas/testsuite/gas/xtensa/loc.s7
5 files changed, 31 insertions, 3 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index da426fc93d2..e147013b2a2 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,13 @@
+2016-02-03 Max Filippov <jcmvbkbc@gmail.com>
+
+ * config/tc-xtensa.c (md_apply_fix): Mark BFD_RELOC_XTENSA_DIFF*
+ substitutions for BFD_RELOC_* as unsigned.
+ * gas/testsuite/gas/xtensa/all.exp: Add loc to list of xtensa
+ tests.
+ * gas/testsuite/gas/xtensa/loc.d: New file: loc test result
+ patterns.
+ * gas/testsuite/gas/xtensa/loc.s: New file: loc test.
+
2016-02-03 Kevin Buettner <kevinb@redhat.com>
* config/tc-msp430.h (DWARF2_ADDR_SIZE): Set to 4.
diff --git a/gas/config/tc-xtensa.c b/gas/config/tc-xtensa.c
index a1198715e08..36a06cc78e0 100644
--- a/gas/config/tc-xtensa.c
+++ b/gas/config/tc-xtensa.c
@@ -5961,15 +5961,15 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg)
{
case BFD_RELOC_8:
fixP->fx_r_type = BFD_RELOC_XTENSA_DIFF8;
- fixP->fx_signed = 1;
+ fixP->fx_signed = 0;
break;
case BFD_RELOC_16:
fixP->fx_r_type = BFD_RELOC_XTENSA_DIFF16;
- fixP->fx_signed = 1;
+ fixP->fx_signed = 0;
break;
case BFD_RELOC_32:
fixP->fx_r_type = BFD_RELOC_XTENSA_DIFF32;
- fixP->fx_signed = 1;
+ fixP->fx_signed = 0;
break;
default:
break;
diff --git a/gas/testsuite/gas/xtensa/all.exp b/gas/testsuite/gas/xtensa/all.exp
index 31b725bfe47..7ff7bd779d3 100644
--- a/gas/testsuite/gas/xtensa/all.exp
+++ b/gas/testsuite/gas/xtensa/all.exp
@@ -101,6 +101,7 @@ if [istarget xtensa*-*-*] then {
run_dump_test "trampoline"
run_dump_test "first_frag_align"
run_dump_test "auto-litpools"
+ run_dump_test "loc"
}
if [info exists errorInfo] then {
diff --git a/gas/testsuite/gas/xtensa/loc.d b/gas/testsuite/gas/xtensa/loc.d
new file mode 100644
index 00000000000..71983cc9005
--- /dev/null
+++ b/gas/testsuite/gas/xtensa/loc.d
@@ -0,0 +1,10 @@
+#as:
+#objdump: -r
+#name: .loc directive relocs
+
+.*: +file format .*xtensa.*
+
+RELOCATION RECORDS FOR \[\.debug_line\]:
+#...
+.*R_XTENSA_DIFF16.*\.text\+0x00009c42
+#...
diff --git a/gas/testsuite/gas/xtensa/loc.s b/gas/testsuite/gas/xtensa/loc.s
new file mode 100644
index 00000000000..029e14e47bb
--- /dev/null
+++ b/gas/testsuite/gas/xtensa/loc.s
@@ -0,0 +1,7 @@
+ .text
+ .file 1 "loc.s"
+ .loc 1 3
+ nop
+ .space 40000
+ .loc 1 5
+ nop