aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudiu Zissulescu <claziss@synopsys.com>2016-09-07 09:47:34 +0200
committerClaudiu Zissulescu <claziss@synopsys.com>2016-09-14 14:04:34 +0200
commit32348c581bf104d46c3fb42a7ff5cefe8ef65f7f (patch)
tree77a4af6b1cd84c5dbda269dc94bb872934351bcf
parentdce084426d75b45ef728425a880d642a604c36a7 (diff)
downloadgdb-32348c581bf104d46c3fb42a7ff5cefe8ef65f7f.zip
gdb-32348c581bf104d46c3fb42a7ff5cefe8ef65f7f.tar.gz
gdb-32348c581bf104d46c3fb42a7ff5cefe8ef65f7f.tar.bz2
[ARC] Fix parsing dtpoff relocation expression.
The assembler accepts dtpoff complex relocation expression like identifier@dtpoff + const. However, it doesn't accept an expression such as identifier@dtpoff@base + const. This patch solves this issue, and adds a number of tests. ld/ 2016-09-14 Claudiu Zissulescu <claziss@synopsys.com> * testsuite/ld-arc/tls-dtpoff.dd: New file. * testsuite/ld-arc/tls-dtpoff.rd: Likewise. * testsuite/ld-arc/tls-dtpoff.s: Likewise. * testsuite/ld-arc/tls-relocs.ld: Likewise. * testsuite/ld-arc/arc.exp: Add new tdpoff test. gas/ 2016-09-14 Claudiu Zissulescu <claziss@synopsys.com> * testsuite/gas/arc/tls-relocs2.d: New file. * testsuite/gas/arc/tls-relocs2.s: Likewise. * config/tc-arc.c (tokenize_arguments): Accept offsets when base is used.
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/config/tc-arc.c2
-rw-r--r--gas/testsuite/gas/arc/tls-relocs2.d10
-rw-r--r--gas/testsuite/gas/arc/tls-relocs2.s12
-rw-r--r--ld/ChangeLog8
-rw-r--r--ld/testsuite/ld-arc/arc.exp5
-rw-r--r--ld/testsuite/ld-arc/tls-dtpoff.dd11
-rw-r--r--ld/testsuite/ld-arc/tls-dtpoff.rd4
-rw-r--r--ld/testsuite/ld-arc/tls-dtpoff.s12
-rw-r--r--ld/testsuite/ld-arc/tls-relocs.ld20
10 files changed, 90 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 6544175..12fd861 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,10 @@
+2016-09-14 Claudiu Zissulescu <claziss@synopsys.com>
+
+ * testsuite/gas/arc/tls-relocs2.d: New file.
+ * testsuite/gas/arc/tls-relocs2.s: Likewise.
+ * config/tc-arc.c (tokenize_arguments): Accept offsets when base
+ is used.
+
2016-09-12 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
* config/tc-s390.c (s390_parse_cpu): Support alternate arch
diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c
index 4e4dcb3..58adf0b 100644
--- a/gas/config/tc-arc.c
+++ b/gas/config/tc-arc.c
@@ -1157,7 +1157,7 @@ tokenize_arguments (char *str,
restore_line_pointer (c);
tmpE.X_add_number = 0;
}
- else if ((*input_line_pointer != '+')
+ if ((*input_line_pointer != '+')
&& (*input_line_pointer != '-'))
{
tmpE.X_add_number = 0;
diff --git a/gas/testsuite/gas/arc/tls-relocs2.d b/gas/testsuite/gas/arc/tls-relocs2.d
new file mode 100644
index 0000000..e52318f
--- /dev/null
+++ b/gas/testsuite/gas/arc/tls-relocs2.d
@@ -0,0 +1,10 @@
+#as: -mcpu=archs
+#objdump: -dr
+
+.*: +file format .*arc.*
+
+
+Disassembly of section .text:
+
+00000000 <.text>:
+ 0: 70c3 0000 0804 add_s r0,r0,0x804
diff --git a/gas/testsuite/gas/arc/tls-relocs2.s b/gas/testsuite/gas/arc/tls-relocs2.s
new file mode 100644
index 0000000..1f1d045
--- /dev/null
+++ b/gas/testsuite/gas/arc/tls-relocs2.s
@@ -0,0 +1,12 @@
+ .cpu HS
+;;; Test if palette is resolved by the assembler.
+ add_s r0,r0,@palette@dtpoff@.tbss+2048
+
+ .section .tbss,"awT",@nobits
+ .align 4
+ .zero 4
+ .align 4
+ .type palette, @object
+ .size palette, 6144
+palette:
+ .zero 6144
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 58c888d..2a3db2c 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,11 @@
+2016-09-14 Claudiu Zissulescu <claziss@synopsys.com>
+
+ * testsuite/ld-arc/tls-dtpoff.dd: New file.
+ * testsuite/ld-arc/tls-dtpoff.rd: Likewise.
+ * testsuite/ld-arc/tls-dtpoff.s: Likewise.
+ * testsuite/ld-arc/tls-relocs.ld: Likewise.
+ * testsuite/ld-arc/arc.exp: Add new tdpoff test.
+
2016-09-14 Nick Clifton <nickc@redhat.com>
PR ld/20537
diff --git a/ld/testsuite/ld-arc/arc.exp b/ld/testsuite/ld-arc/arc.exp
index 700edff..fed4d2a 100644
--- a/ld/testsuite/ld-arc/arc.exp
+++ b/ld/testsuite/ld-arc/arc.exp
@@ -35,6 +35,11 @@ set arccommon_tests {
"-q -T sda-relocs.ld -A elf32-arclittle" "" "-mcpu=archs -EL" {sda-relocs.s}
{{objdump -fdw sda-relocs.dd} {readelf --relocs sda-relocs.rd}}
"sda-relocs.so" }
+ { "TLS reloc dtpoff"
+ "-q -T tls-relocs.ld -A elf32-arclittle" "" "-mcpu=archs -EL"
+ {tls-dtpoff.s}
+ {{objdump -fdw tls-dtpoff.dd} {readelf --relocs tls-dtpoff.rd}}
+ "sda-relocs.so" }
}
run_ld_link_tests $arccommon_tests
diff --git a/ld/testsuite/ld-arc/tls-dtpoff.dd b/ld/testsuite/ld-arc/tls-dtpoff.dd
new file mode 100644
index 0000000..d27475a
--- /dev/null
+++ b/ld/testsuite/ld-arc/tls-dtpoff.dd
@@ -0,0 +1,11 @@
+
+.*: file format .*arc.*
+architecture: ARCv2, flags 0x00000113:
+HAS_RELOC, EXEC_P, HAS_SYMS, D_PAGED
+start address 0x00010000
+
+
+Disassembly of section .text:
+
+[0-9a-f]+ <.text>:
+ [0-9a-f]+: 70c3 0000 0804 add_s r0,r0,0x804
diff --git a/ld/testsuite/ld-arc/tls-dtpoff.rd b/ld/testsuite/ld-arc/tls-dtpoff.rd
new file mode 100644
index 0000000..533beea
--- /dev/null
+++ b/ld/testsuite/ld-arc/tls-dtpoff.rd
@@ -0,0 +1,4 @@
+
+Relocation section '\.rela\.text' .*:
+ Offset +Info +Type +Sym.Value +Sym. Name \+ Addend
+[0-9a-f]+ [0-9a-f]+ R_ARC_TLS_DTPOFF [0-9a-f]+ palette \+ 800
diff --git a/ld/testsuite/ld-arc/tls-dtpoff.s b/ld/testsuite/ld-arc/tls-dtpoff.s
new file mode 100644
index 0000000..d544366
--- /dev/null
+++ b/ld/testsuite/ld-arc/tls-dtpoff.s
@@ -0,0 +1,12 @@
+ .cpu HS
+;;; Test if palette is resolved by the linker.
+ add_s r0,r0,@palette@dtpoff+2048
+
+ .section .tbss,"awT",@nobits
+ .align 4
+ .zero 4
+ .align 4
+ .type palette, @object
+ .size palette, 6144
+palette:
+ .zero 6144
diff --git a/ld/testsuite/ld-arc/tls-relocs.ld b/ld/testsuite/ld-arc/tls-relocs.ld
new file mode 100644
index 0000000..314b0dd
--- /dev/null
+++ b/ld/testsuite/ld-arc/tls-relocs.ld
@@ -0,0 +1,20 @@
+/* Default linker script, for normal executables. */
+OUTPUT_FORMAT("elf32-littlearc", "elf32-bigarc",
+ "elf32-littlearc")
+
+OUTPUT_ARCH(arc)
+ENTRY(__start)
+
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ PROVIDE (__start = 0x10000);
+ . = 0x10000 + SIZEOF_HEADERS;
+
+ .text : {*(.text .stub .text.*)} =0
+ .tdata : {.tdata = .; *(.tdata .tdata.* .gnu.linkonce.td.*) }
+ .tbss : {.tbss = .; *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+
+ /DISCARD/ : { *(.__arc_profile_*) }
+ /DISCARD/ : { *(.note.GNU-stack) }
+}