This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] [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-06  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-06  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.
---
 gas/config/tc-arc.c                 |  2 +-
 gas/testsuite/gas/arc/tls-relocs2.d | 10 ++++++++++
 gas/testsuite/gas/arc/tls-relocs2.s | 12 ++++++++++++
 ld/testsuite/ld-arc/arc.exp         |  5 +++++
 ld/testsuite/ld-arc/tls-dtpoff.dd   | 11 +++++++++++
 ld/testsuite/ld-arc/tls-dtpoff.rd   |  4 ++++
 ld/testsuite/ld-arc/tls-dtpoff.s    | 12 ++++++++++++
 ld/testsuite/ld-arc/tls-relocs.ld   | 20 ++++++++++++++++++++
 8 files changed, 75 insertions(+), 1 deletion(-)
 create mode 100644 gas/testsuite/gas/arc/tls-relocs2.d
 create mode 100644 gas/testsuite/gas/arc/tls-relocs2.s
 create mode 100644 ld/testsuite/ld-arc/tls-dtpoff.dd
 create mode 100644 ld/testsuite/ld-arc/tls-dtpoff.rd
 create mode 100644 ld/testsuite/ld-arc/tls-dtpoff.s
 create mode 100644 ld/testsuite/ld-arc/tls-relocs.ld

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/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..9a1f70e
--- /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) }
+}
-- 
1.9.1


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]