aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2013-07-24 14:12:41 +0000
committerTristan Gingold <gingold@adacore.com>2013-07-24 14:12:41 +0000
commit7fa9fcb6db636f393bcef5ed9f14559d3a8354f2 (patch)
treeb7ebc01be50ace1ffa8d52c5b4fa389b9c94ab16 /gas
parenta0607b84d2cbfb5c3a559cf5d3973bb32bebf44c (diff)
downloadgdb-7fa9fcb6db636f393bcef5ed9f14559d3a8354f2.zip
gdb-7fa9fcb6db636f393bcef5ed9f14559d3a8354f2.tar.gz
gdb-7fa9fcb6db636f393bcef5ed9f14559d3a8354f2.tar.bz2
bfd/
2013-07-24 Tristan Gingold <gingold@adacore.com> * coff-rs6000.c (xcoff_howto_table): Fix masks and pc_relative for R_RBR. Add numbers in comments. (_bfd_xcoff_reloc_type_lookup): Handle BFD_RELOC_PPC_B16. * coff64-rs6000.c: Likewise. gas/ 2013-07-24 Tristan Gingold <gingold@adacore.com> * config/tc-ppc.c (md_apply_fix): Adjust BFD_RELOC_PPC_B16 on xcoff targets. gas/testsuite/ 2013-07-24 Tristan Gingold <gingold@adacore.com> * gas/ppc/test2xcoff32.s, gas/ppc/test2xcoff32.d: New files * gas/ppc/ppc.exp: Add new test. * gas/ppc/xcoff-br16-1.s, gas/ppc/xcoff-br16-1.d, gas/ppc/xcoff-br16-2.s, gas/ppc/xcoff-br16-2.d: New files * gas/ppc/aix.exp: Add new tests.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-ppc.c11
-rw-r--r--gas/testsuite/ChangeLog8
-rw-r--r--gas/testsuite/gas/ppc/aix.exp2
-rw-r--r--gas/testsuite/gas/ppc/ppc.exp1
-rw-r--r--gas/testsuite/gas/ppc/test2xcoff32.d40
-rw-r--r--gas/testsuite/gas/ppc/test2xcoff32.s42
-rw-r--r--gas/testsuite/gas/ppc/xcoff-br16-1.d20
-rw-r--r--gas/testsuite/gas/ppc/xcoff-br16-1.s4
-rw-r--r--gas/testsuite/gas/ppc/xcoff-br16-2.d20
-rw-r--r--gas/testsuite/gas/ppc/xcoff-br16-2.s3
11 files changed, 154 insertions, 2 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index ee3f87a..37cc8ce 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2013-07-24 Tristan Gingold <gingold@adacore.com>
+
+ * config/tc-ppc.c (md_apply_fix): Adjust BFD_RELOC_PPC_B16 on
+ xcoff targets.
+
2013-07-24 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/tc-s390.c (s390_machine): Don't force the .machine
diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c
index 7aebda8..5c413d3 100644
--- a/gas/config/tc-ppc.c
+++ b/gas/config/tc-ppc.c
@@ -6417,9 +6417,9 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
char *where;
unsigned long insn;
-#ifdef OBJ_ELF
switch (fixP->fx_r_type)
{
+#ifdef OBJ_ELF
/* The following relocs can't be calculated by the assembler.
Leave the field zero. */
case BFD_RELOC_PPC_TPREL16:
@@ -6528,11 +6528,18 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
case BFD_RELOC_PPC_TLSLD:
fieldval = 0;
break;
+#endif
+
+#ifdef OBJ_XCOFF
+ case BFD_RELOC_PPC_B16:
+ /* Adjust the offset to the instruction boundary. */
+ fieldval += 2;
+ break;
+#endif
default:
break;
}
-#endif
#ifdef OBJ_ELF
/* powerpc uses RELA style relocs, so if emitting a reloc the field
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index a4240a2..e8b2eb6 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2013-07-24 Tristan Gingold <gingold@adacore.com>
+
+ * gas/ppc/test2xcoff32.s, gas/ppc/test2xcoff32.d: New files
+ * gas/ppc/ppc.exp: Add new test.
+ * gas/ppc/xcoff-br16-1.s, gas/ppc/xcoff-br16-1.d,
+ gas/ppc/xcoff-br16-2.s, gas/ppc/xcoff-br16-2.d: New files
+ * gas/ppc/aix.exp: Add new tests.
+
2013-07-19 Yufeng Zhang <yufeng.zhang@arm.com>
* gas/aarch64/ilp32-basic.d (#as): Update to use -mabi=ilp32
diff --git a/gas/testsuite/gas/ppc/aix.exp b/gas/testsuite/gas/ppc/aix.exp
index 6dcfc4e..2789837 100644
--- a/gas/testsuite/gas/ppc/aix.exp
+++ b/gas/testsuite/gas/ppc/aix.exp
@@ -65,6 +65,8 @@ if [istarget powerpc-ibm-aix*] then {
run_dump_test "textalign-xcoff-002"
run_dump_test "xcoff-branch-1-32"
run_dump_test "xcoff-branch-1-64"
+ run_dump_test "xcoff-br16-1"
+ run_dump_test "xcoff-br16-2"
run_list_test "xcoff-ref-1"
diff --git a/gas/testsuite/gas/ppc/ppc.exp b/gas/testsuite/gas/ppc/ppc.exp
index fec714c..ba29261 100644
--- a/gas/testsuite/gas/ppc/ppc.exp
+++ b/gas/testsuite/gas/ppc/ppc.exp
@@ -31,6 +31,7 @@ if { [istarget powerpc64*-*-*] || [istarget *-*-elf64*]} then {
run_list_test "range64" "-a64"
} elseif { [istarget powerpc*-*aix*] } then {
run_dump_test "test1xcoff32"
+ run_dump_test "test2xcoff32"
} elseif { [istarget powerpc*-*-*bsd*] \
|| [istarget powerpc*-*-elf*] \
|| [istarget powerpc*-*-eabi*] \
diff --git a/gas/testsuite/gas/ppc/test2xcoff32.d b/gas/testsuite/gas/ppc/test2xcoff32.d
new file mode 100644
index 0000000..125d34a
--- /dev/null
+++ b/gas/testsuite/gas/ppc/test2xcoff32.d
@@ -0,0 +1,40 @@
+#objdump: -dr
+#as:
+#name: PowerPC Test 2, 32 bit XCOFF
+
+.*: +file format aixcoff-rs6000
+
+
+Disassembly of section .text:
+
+00000000 <.main>:
+ 0: 7c 08 02 a6 mflr r0
+ 4: 90 01 00 08 st r0,8\(r1\)
+ 8: 93 c1 ff f8 st r30,-8\(r1\)
+ c: 93 e1 ff fc st r31,-4\(r1\)
+ 10: 94 21 ff c0 stu r1,-64\(r1\)
+ 14: 3b e0 00 00 lil r31,0
+ 18: 83 c2 00 00 l r30,0\(r2\)
+ 1a: R_TOC LC\.\.0-0x70
+ 1c: 7f c3 f3 78 mr r3,r30
+ 20: 7f e4 fb 78 mr r4,r31
+ 24: 4b ff ff dd bl 0 <.main>
+ 24: R_BR .printf
+ 28: 60 00 00 00 oril r0,r0,0
+ 2c: 2f 9f 00 09 cmpi 7,r31,9
+ 30: 3b ff 00 01 cal r31,1\(r31\)
+ 34: 40 9e ff e8 bne 7,1c <\.main\+0x1c>
+ 38: 38 60 00 00 lil r3,0
+ 3c: 38 21 00 40 cal r1,64\(r1\)
+ 40: 80 01 00 08 l r0,8\(r1\)
+ 44: 7c 08 03 a6 mtlr r0
+ 48: 83 c1 ff f8 l r30,-8\(r1\)
+ 4c: 83 e1 ff fc l r31,-4\(r1\)
+ 50: 4e 80 00 20 br
+ 54: 60 00 00 00 oril r0,r0,0
+ 58: 60 00 00 00 oril r0,r0,0
+ 5c: 60 00 00 00 oril r0,r0,0
+
+00000060 <_t\.rw_>:
+ 60: 25 64 0a 00 dozi r11,r4,2560
+ ...
diff --git a/gas/testsuite/gas/ppc/test2xcoff32.s b/gas/testsuite/gas/ppc/test2xcoff32.s
new file mode 100644
index 0000000..7ac2bff
--- /dev/null
+++ b/gas/testsuite/gas/ppc/test2xcoff32.s
@@ -0,0 +1,42 @@
+ .csect .text[PR]
+ .extern .printf
+ .toc
+LC..1:
+ .tc LC..0[TC],LC..0
+ .csect .text[PR]
+ .align 2
+ .globl main
+ .globl .main
+ .csect main[DS]
+main:
+ .long .main, TOC[tc0], 0
+ .csect .text[PR]
+.main:
+ mflr 0
+ stw 0,8(1)
+ stw 30,-8(1)
+ stw 31,-4(1)
+ stwu 1,-64(1)
+ li 31,0
+ lwz 30,LC..1(2)
+L..2:
+ mr 3,30
+ mr 4,31
+ bl .printf
+ nop
+ cmpwi 7,31,9
+ addi 31,31,1
+ bne 7,L..2
+ li 3,0
+ addi 1,1,64
+ lwz 0,8(1)
+ mtlr 0
+ lwz 30,-8(1)
+ lwz 31,-4(1)
+ blr
+
+ .csect _t.rw_[RO],4
+ .align 2
+LC..0:
+ .byte "%d"
+ .byte 10, 0
diff --git a/gas/testsuite/gas/ppc/xcoff-br16-1.d b/gas/testsuite/gas/ppc/xcoff-br16-1.d
new file mode 100644
index 0000000..5052279
--- /dev/null
+++ b/gas/testsuite/gas/ppc/xcoff-br16-1.d
@@ -0,0 +1,20 @@
+#as: -a32
+#source: xcoff-br16-1.s
+#objdump: -P relocs -dr
+#name: XCOFF R_RBR/16 reloc test 1
+
+.*
+Relocations for \.text .*
+vaddr sgn mod sz type symndx symbol
+00000002 S 16 RBR [0-9] c
+00000006 S 16 RBR [0-9] c
+
+
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+ 0: 40 82 00 00 bne 0x0
+ 2: R_RBR_16 c
+ 4: 40 82 ff fd bnel 0x0
+ 6: R_RBR_16 c
diff --git a/gas/testsuite/gas/ppc/xcoff-br16-1.s b/gas/testsuite/gas/ppc/xcoff-br16-1.s
new file mode 100644
index 0000000..f6b66e8
--- /dev/null
+++ b/gas/testsuite/gas/ppc/xcoff-br16-1.s
@@ -0,0 +1,4 @@
+ .extern c
+ bne c
+ bnel c
+
diff --git a/gas/testsuite/gas/ppc/xcoff-br16-2.d b/gas/testsuite/gas/ppc/xcoff-br16-2.d
new file mode 100644
index 0000000..173ed06
--- /dev/null
+++ b/gas/testsuite/gas/ppc/xcoff-br16-2.d
@@ -0,0 +1,20 @@
+#as: -a32
+#source: xcoff-br16-2.s
+#objdump: -P relocs -dr
+#name: XCOFF R_RBR/16 reloc test 2
+
+.*
+Relocations for \.text .*
+vaddr sgn mod sz type symndx symbol
+00000002 S 16 RBR [0-9] c
+00000006 S 16 RBR [0-9] c
+
+
+
+Disassembly of section \.text:
+
+00000000 <\.text>:
+ 0: 40 82 00 04 bne 0x4
+ 2: R_RBR_16 c
+ 4: 40 82 00 01 bnel 0x4
+ 6: R_RBR_16 c
diff --git a/gas/testsuite/gas/ppc/xcoff-br16-2.s b/gas/testsuite/gas/ppc/xcoff-br16-2.s
new file mode 100644
index 0000000..41bbc48
--- /dev/null
+++ b/gas/testsuite/gas/ppc/xcoff-br16-2.s
@@ -0,0 +1,3 @@
+ .extern c
+ bne c + 4
+ bnel c + 4