aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/config/tc-nios2.c11
-rw-r--r--gas/testsuite/ChangeLog7
-rw-r--r--gas/testsuite/gas/nios2/call26_noat.d76
-rw-r--r--gas/testsuite/gas/nios2/call26_noat.s13
-rw-r--r--gas/testsuite/gas/nios2/call_noat.d11
-rw-r--r--gas/testsuite/gas/nios2/call_noat.s14
7 files changed, 136 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 99bc518..a3f0f03 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2014-01-30 Sandra Loosemore <sandra@codesourcery.com>
+
+ * config/tc-nios2.c (md_apply_fix): Handle BFD_RELOC_NIOS2_CALL26_NOAT.
+ (nios2_assemble_args_m): Likewise.
+ (md_assemble): Likewise.
+
2014-01-24 DJ Delorie <dj@redhat.com>
* config/tc-msp430.c (msp430_section): Always flag data sections,
diff --git a/gas/config/tc-nios2.c b/gas/config/tc-nios2.c
index 08b7aec..eb81b35 100644
--- a/gas/config/tc-nios2.c
+++ b/gas/config/tc-nios2.c
@@ -1139,6 +1139,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
|| fixP->fx_r_type == BFD_RELOC_NIOS2_U16
|| fixP->fx_r_type == BFD_RELOC_16_PCREL
|| fixP->fx_r_type == BFD_RELOC_NIOS2_CALL26
+ || fixP->fx_r_type == BFD_RELOC_NIOS2_CALL26_NOAT
|| fixP->fx_r_type == BFD_RELOC_NIOS2_IMM5
|| fixP->fx_r_type == BFD_RELOC_NIOS2_CACHE_OPX
|| fixP->fx_r_type == BFD_RELOC_NIOS2_IMM6
@@ -1595,7 +1596,10 @@ nios2_assemble_args_m (nios2_insn_infoS *insn_info)
unsigned long immed
= nios2_assemble_expression (insn_info->insn_tokens[1], insn_info,
insn_info->insn_reloc,
- BFD_RELOC_NIOS2_CALL26, 0);
+ (nios2_as_options.noat
+ ? BFD_RELOC_NIOS2_CALL26_NOAT
+ : BFD_RELOC_NIOS2_CALL26),
+ 0);
SET_INSN_FIELD (IMM26, insn_info->insn_code, immed);
nios2_check_assembly (insn_info->insn_code, insn_info->insn_tokens[2]);
@@ -2728,7 +2732,10 @@ md_assemble (char *op_str)
&& !nios2_as_options.noat
&& insn->insn_nios2_opcode->pinfo & NIOS2_INSN_CALL
&& insn->insn_reloc
- && insn->insn_reloc->reloc_type == BFD_RELOC_NIOS2_CALL26)
+ && ((insn->insn_reloc->reloc_type
+ == BFD_RELOC_NIOS2_CALL26)
+ || (insn->insn_reloc->reloc_type
+ == BFD_RELOC_NIOS2_CALL26_NOAT)))
output_call (insn);
else if (insn->insn_nios2_opcode->pinfo & NIOS2_INSN_ANDI)
output_andi (insn);
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 8538da2..c45f647 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2014-01-30 Sandra Loosemore <sandra@codesourcery.com>
+
+ * gas/nios2/call26_noat.d: New.
+ * gas/nios2/call26_noat.s: New.
+ * gas/nios2/call_noat.d: New.
+ * gas/nios2/call_noat.s: New.
+
2014-01-30 Michael Zolotukhin <michael.v.zolotukhin@gmail.com>
Jan Beulich <jbeulich@suse.com>
diff --git a/gas/testsuite/gas/nios2/call26_noat.d b/gas/testsuite/gas/nios2/call26_noat.d
new file mode 100644
index 0000000..34bfe4e
--- /dev/null
+++ b/gas/testsuite/gas/nios2/call26_noat.d
@@ -0,0 +1,76 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: NIOS2 nios2-reloc-r-nios2-call26-noat
+
+# Test the branch instructions.
+.*: +file format elf32-littlenios2
+
+Disassembly of section .text:
+[ ]*\.\.\.
+[ ]*0: R_NIOS2_CALL26_NOAT .text\+0x100
+[ ]*4: R_NIOS2_CALL26_NOAT globalfunc
+0+0008 <[^>]*> 0001883a nop
+0+000c <[^>]*> 0001883a nop
+0+0010 <[^>]*> 0001883a nop
+0+0014 <[^>]*> 0001883a nop
+0+0018 <[^>]*> 0001883a nop
+0+001c <[^>]*> 0001883a nop
+0+0020 <[^>]*> 0001883a nop
+0+0024 <[^>]*> 0001883a nop
+0+0028 <[^>]*> 0001883a nop
+0+002c <[^>]*> 0001883a nop
+0+0030 <[^>]*> 0001883a nop
+0+0034 <[^>]*> 0001883a nop
+0+0038 <[^>]*> 0001883a nop
+0+003c <[^>]*> 0001883a nop
+0+0040 <[^>]*> 0001883a nop
+0+0044 <[^>]*> 0001883a nop
+0+0048 <[^>]*> 0001883a nop
+0+004c <[^>]*> 0001883a nop
+0+0050 <[^>]*> 0001883a nop
+0+0054 <[^>]*> 0001883a nop
+0+0058 <[^>]*> 0001883a nop
+0+005c <[^>]*> 0001883a nop
+0+0060 <[^>]*> 0001883a nop
+0+0064 <[^>]*> 0001883a nop
+0+0068 <[^>]*> 0001883a nop
+0+006c <[^>]*> 0001883a nop
+0+0070 <[^>]*> 0001883a nop
+0+0074 <[^>]*> 0001883a nop
+0+0078 <[^>]*> 0001883a nop
+0+007c <[^>]*> 0001883a nop
+0+0080 <[^>]*> 0001883a nop
+0+0084 <[^>]*> 0001883a nop
+0+0088 <[^>]*> 0001883a nop
+0+008c <[^>]*> 0001883a nop
+0+0090 <[^>]*> 0001883a nop
+0+0094 <[^>]*> 0001883a nop
+0+0098 <[^>]*> 0001883a nop
+0+009c <[^>]*> 0001883a nop
+0+00a0 <[^>]*> 0001883a nop
+0+00a4 <[^>]*> 0001883a nop
+0+00a8 <[^>]*> 0001883a nop
+0+00ac <[^>]*> 0001883a nop
+0+00b0 <[^>]*> 0001883a nop
+0+00b4 <[^>]*> 0001883a nop
+0+00b8 <[^>]*> 0001883a nop
+0+00bc <[^>]*> 0001883a nop
+0+00c0 <[^>]*> 0001883a nop
+0+00c4 <[^>]*> 0001883a nop
+0+00c8 <[^>]*> 0001883a nop
+0+00cc <[^>]*> 0001883a nop
+0+00d0 <[^>]*> 0001883a nop
+0+00d4 <[^>]*> 0001883a nop
+0+00d8 <[^>]*> 0001883a nop
+0+00dc <[^>]*> 0001883a nop
+0+00e0 <[^>]*> 0001883a nop
+0+00e4 <[^>]*> 0001883a nop
+0+00e8 <[^>]*> 0001883a nop
+0+00ec <[^>]*> 0001883a nop
+0+00f0 <[^>]*> 0001883a nop
+0+00f4 <[^>]*> 0001883a nop
+0+00f8 <[^>]*> 0001883a nop
+0+00fc <[^>]*> 0001883a nop
+0+0100 <[^>]*> 0001883a nop
+ ...
+
+
diff --git a/gas/testsuite/gas/nios2/call26_noat.s b/gas/testsuite/gas/nios2/call26_noat.s
new file mode 100644
index 0000000..f0a93e7
--- /dev/null
+++ b/gas/testsuite/gas/nios2/call26_noat.s
@@ -0,0 +1,13 @@
+# Test for Nios II 32-bit relocations
+
+.global globalfunc
+.text
+.set norelax
+.set noat
+start:
+ call localfunc
+ call globalfunc
+
+.align 8
+localfunc:
+ nop
diff --git a/gas/testsuite/gas/nios2/call_noat.d b/gas/testsuite/gas/nios2/call_noat.d
new file mode 100644
index 0000000..03aadb5
--- /dev/null
+++ b/gas/testsuite/gas/nios2/call_noat.d
@@ -0,0 +1,11 @@
+# objdump: -dr --prefix-addresses --show-raw-insn
+#name: NIOS2 call noat
+
+.*: +file format elf32-littlenios2
+
+Disassembly of section .text:
+0+0000 <[^>]*> 00000000 call 00000000 <[^>]*>
+[ ]*0: R_NIOS2_CALL26_NOAT .text\+0xc
+0+0004 <[^>]*> 503ee83a callr r10
+0+0008 <[^>]*> 00000000 call 00000000 <[^>]*>
+[ ]*8: R_NIOS2_CALL26_NOAT external
diff --git a/gas/testsuite/gas/nios2/call_noat.s b/gas/testsuite/gas/nios2/call_noat.s
new file mode 100644
index 0000000..67613b7
--- /dev/null
+++ b/gas/testsuite/gas/nios2/call_noat.s
@@ -0,0 +1,14 @@
+# Source file used to test the call and callr instructions
+.text
+.set norelax
+.set noat
+foo:
+ call func1
+ callr r10
+# use external symbol
+ .global external
+ call external
+func1:
+
+
+