aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@linux-mips.org>2012-08-13 19:52:59 +0000
committerMaciej W. Rozycki <macro@linux-mips.org>2012-08-13 19:52:59 +0000
commit9b11fa1a855f1b2b98b6a21c69fb96691e9b39a2 (patch)
tree8d8ae8d7d6288e7d2b19984e21f47659c5d234c5 /ld
parentaf0edeb8e68c89cb0b1483548e8ce4d17562fc95 (diff)
downloadgdb-9b11fa1a855f1b2b98b6a21c69fb96691e9b39a2.zip
gdb-9b11fa1a855f1b2b98b6a21c69fb96691e9b39a2.tar.gz
gdb-9b11fa1a855f1b2b98b6a21c69fb96691e9b39a2.tar.bz2
* ld-mips-elf/export-class-call16-o32.dd: New test.
* ld-mips-elf/export-class-call16-o32-irix.dd: New test. * ld-mips-elf/export-class-call16-o32.gd: New test. * ld-mips-elf/export-class-call16-n32.dd: New test. * ld-mips-elf/export-class-call16-n32.gd: New test. * ld-mips-elf/export-class-call16-n64.dd: New test. * ld-mips-elf/export-class-call16-n64.gd: New test. * ld-mips-elf/export-class-call16-def.s: New test source. * ld-mips-elf/export-class-call16-o32.s: New test source. * ld-mips-elf/export-class-call16-n32.s: New test source. * ld-mips-elf/export-class-call16-n64.s: New test source. * ld-mips-elf/export-class-call16.ld: New test linker script. * ld-mips-elf/mips-elf.exp: Run the new tests.
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/ChangeLog16
-rw-r--r--ld/testsuite/ld-mips-elf/export-class-call16-def.s22
-rw-r--r--ld/testsuite/ld-mips-elf/export-class-call16-n32.dd41
-rw-r--r--ld/testsuite/ld-mips-elf/export-class-call16-n32.gd14
-rw-r--r--ld/testsuite/ld-mips-elf/export-class-call16-n32.s20
-rw-r--r--ld/testsuite/ld-mips-elf/export-class-call16-n64.dd41
-rw-r--r--ld/testsuite/ld-mips-elf/export-class-call16-n64.gd14
-rw-r--r--ld/testsuite/ld-mips-elf/export-class-call16-n64.s20
-rw-r--r--ld/testsuite/ld-mips-elf/export-class-call16-o32-irix.dd43
-rw-r--r--ld/testsuite/ld-mips-elf/export-class-call16-o32.dd43
-rw-r--r--ld/testsuite/ld-mips-elf/export-class-call16-o32.gd14
-rw-r--r--ld/testsuite/ld-mips-elf/export-class-call16-o32.s22
-rw-r--r--ld/testsuite/ld-mips-elf/export-class-call16.ld16
-rw-r--r--ld/testsuite/ld-mips-elf/mips-elf.exp21
14 files changed, 347 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index b5f0e0c..34edbe1 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,19 @@
+2012-08-13 Maciej W. Rozycki <macro@codesourcery.com>
+
+ * ld-mips-elf/export-class-call16-o32.dd: New test.
+ * ld-mips-elf/export-class-call16-o32-irix.dd: New test.
+ * ld-mips-elf/export-class-call16-o32.gd: New test.
+ * ld-mips-elf/export-class-call16-n32.dd: New test.
+ * ld-mips-elf/export-class-call16-n32.gd: New test.
+ * ld-mips-elf/export-class-call16-n64.dd: New test.
+ * ld-mips-elf/export-class-call16-n64.gd: New test.
+ * ld-mips-elf/export-class-call16-def.s: New test source.
+ * ld-mips-elf/export-class-call16-o32.s: New test source.
+ * ld-mips-elf/export-class-call16-n32.s: New test source.
+ * ld-mips-elf/export-class-call16-n64.s: New test source.
+ * ld-mips-elf/export-class-call16.ld: New test linker script.
+ * ld-mips-elf/mips-elf.exp: Run the new tests.
+
2012-08-13 Ian Bolton <ian.bolton@arm.com>
Laurent Desnogues <laurent.desnogues@arm.com>
Jim MacArthur <jim.macarthur@arm.com>
diff --git a/ld/testsuite/ld-mips-elf/export-class-call16-def.s b/ld/testsuite/ld-mips-elf/export-class-call16-def.s
new file mode 100644
index 0000000..ce82f22
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/export-class-call16-def.s
@@ -0,0 +1,22 @@
+ .text
+ .balign 16
+ .xdef protected_foo
+ .protected protected_foo
+ .ent protected_foo
+protected_foo:
+ jr $31
+ .end protected_foo
+ .balign 16
+ .xdef hidden_foo
+ .hidden hidden_foo
+ .ent hidden_foo
+hidden_foo:
+ jr $31
+ .end hidden_foo
+ .balign 16
+ .xdef internal_foo
+ .internal internal_foo
+ .ent internal_foo
+internal_foo:
+ jr $31
+ .end internal_foo
diff --git a/ld/testsuite/ld-mips-elf/export-class-call16-n32.dd b/ld/testsuite/ld-mips-elf/export-class-call16-n32.dd
new file mode 100644
index 0000000..a033972
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/export-class-call16-n32.dd
@@ -0,0 +1,41 @@
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+
+12340000 <foo>:
+12340000: 27bdfff0 addiu sp,sp,-16
+12340004: ffbf0008 sd ra,8\(sp\)
+12340008: ffbc0000 sd gp,0\(sp\)
+1234000c: 3c1c0001 lui gp,0x1
+12340010: 279c8080 addiu gp,gp,-32640
+12340014: 0399e021 addu gp,gp,t9
+12340018: 8f998018 lw t9,-32744\(gp\)
+1234001c: 04110010 bal 12340060 <protected_foo>
+12340020: 00000000 nop
+12340024: 8f99801c lw t9,-32740\(gp\)
+12340028: 04110011 bal 12340070 <hidden_foo>
+1234002c: 00000000 nop
+12340030: 8f998020 lw t9,-32736\(gp\)
+12340034: 04110012 bal 12340080 <internal_foo>
+12340038: 00000000 nop
+1234003c: dfbc0000 ld gp,0\(sp\)
+12340040: dfbf0008 ld ra,8\(sp\)
+12340044: 03e00008 jr ra
+12340048: 27bd0010 addiu sp,sp,16
+ \.\.\.
+
+12340060 <protected_foo>:
+12340060: 03e00008 jr ra
+12340064: 00000000 nop
+ \.\.\.
+
+12340070 <hidden_foo>:
+12340070: 03e00008 jr ra
+12340074: 00000000 nop
+ \.\.\.
+
+12340080 <internal_foo>:
+12340080: 03e00008 jr ra
+12340084: 00000000 nop
+ \.\.\.
diff --git a/ld/testsuite/ld-mips-elf/export-class-call16-n32.gd b/ld/testsuite/ld-mips-elf/export-class-call16-n32.gd
new file mode 100644
index 0000000..63f4a7b
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/export-class-call16-n32.gd
@@ -0,0 +1,14 @@
+
+Primary GOT:
+ Canonical gp value: 12348080
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 12340090 -32752\(gp\) 00000000 Lazy resolver
+ 12340094 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+ Local entries:
+ Address Access Initial
+ 12340098 -32744\(gp\) 12340060
+ 1234009c -32740\(gp\) 12340070
+ 123400a0 -32736\(gp\) 12340080
diff --git a/ld/testsuite/ld-mips-elf/export-class-call16-n32.s b/ld/testsuite/ld-mips-elf/export-class-call16-n32.s
new file mode 100644
index 0000000..325e93c
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/export-class-call16-n32.s
@@ -0,0 +1,20 @@
+ .text
+ .balign 16
+ .xdef foo
+ .ent foo
+foo:
+ .frame $29, 16, $31
+ .mask 0x90000000, -8
+ addiu $29, -16
+ sd $31, 8($29)
+ .cpsetup $25, 0, foo
+ jal protected_foo
+ jal hidden_foo
+ jal internal_foo
+ .cpreturn
+ ld $31, 8($29)
+ addiu $29, 16
+ jr $31
+ .end foo
+ .balign 4
+ .space 8
diff --git a/ld/testsuite/ld-mips-elf/export-class-call16-n64.dd b/ld/testsuite/ld-mips-elf/export-class-call16-n64.dd
new file mode 100644
index 0000000..7b481aa
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/export-class-call16-n64.dd
@@ -0,0 +1,41 @@
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+
+123456789abc0000 <foo>:
+123456789abc0000: 67bdfff0 daddiu sp,sp,-16
+123456789abc0004: ffbf0008 sd ra,8\(sp\)
+123456789abc0008: ffbc0000 sd gp,0\(sp\)
+123456789abc000c: 3c1c0001 lui gp,0x1
+123456789abc0010: 279c8080 addiu gp,gp,-32640
+123456789abc0014: 0399e02d daddu gp,gp,t9
+123456789abc0018: df998020 ld t9,-32736\(gp\)
+123456789abc001c: 04110010 bal 123456789abc0060 <protected_foo>
+123456789abc0020: 00000000 nop
+123456789abc0024: df998028 ld t9,-32728\(gp\)
+123456789abc0028: 04110011 bal 123456789abc0070 <hidden_foo>
+123456789abc002c: 00000000 nop
+123456789abc0030: df998030 ld t9,-32720\(gp\)
+123456789abc0034: 04110012 bal 123456789abc0080 <internal_foo>
+123456789abc0038: 00000000 nop
+123456789abc003c: dfbc0000 ld gp,0\(sp\)
+123456789abc0040: dfbf0008 ld ra,8\(sp\)
+123456789abc0044: 03e00008 jr ra
+123456789abc0048: 67bd0010 daddiu sp,sp,16
+ \.\.\.
+
+123456789abc0060 <protected_foo>:
+123456789abc0060: 03e00008 jr ra
+123456789abc0064: 00000000 nop
+ \.\.\.
+
+123456789abc0070 <hidden_foo>:
+123456789abc0070: 03e00008 jr ra
+123456789abc0074: 00000000 nop
+ \.\.\.
+
+123456789abc0080 <internal_foo>:
+123456789abc0080: 03e00008 jr ra
+123456789abc0084: 00000000 nop
+ \.\.\.
diff --git a/ld/testsuite/ld-mips-elf/export-class-call16-n64.gd b/ld/testsuite/ld-mips-elf/export-class-call16-n64.gd
new file mode 100644
index 0000000..a7ab2da
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/export-class-call16-n64.gd
@@ -0,0 +1,14 @@
+
+Primary GOT:
+ Canonical gp value: 123456789abc8080
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 123456789abc0090 -32752\(gp\) 0000000000000000 Lazy resolver
+ 123456789abc0098 -32744\(gp\) 8000000000000000 Module pointer \(GNU extension\)
+
+ Local entries:
+ Address Access Initial
+ 123456789abc00a0 -32736\(gp\) 123456789abc0060
+ 123456789abc00a8 -32728\(gp\) 123456789abc0070
+ 123456789abc00b0 -32720\(gp\) 123456789abc0080
diff --git a/ld/testsuite/ld-mips-elf/export-class-call16-n64.s b/ld/testsuite/ld-mips-elf/export-class-call16-n64.s
new file mode 100644
index 0000000..bc064af
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/export-class-call16-n64.s
@@ -0,0 +1,20 @@
+ .text
+ .balign 16
+ .xdef foo
+ .ent foo
+foo:
+ .frame $29, 16, $31
+ .mask 0x90000000, -8
+ daddiu $29, -16
+ sd $31, 8($29)
+ .cpsetup $25, 0, foo
+ jal protected_foo
+ jal hidden_foo
+ jal internal_foo
+ .cpreturn
+ ld $31, 8($29)
+ daddiu $29, 16
+ jr $31
+ .end foo
+ .balign 4
+ .space 8
diff --git a/ld/testsuite/ld-mips-elf/export-class-call16-o32-irix.dd b/ld/testsuite/ld-mips-elf/export-class-call16-o32-irix.dd
new file mode 100644
index 0000000..cb0d2f2
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/export-class-call16-o32-irix.dd
@@ -0,0 +1,43 @@
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+
+12340000 <foo>:
+12340000: 3c1c0001 lui gp,0x1
+12340004: 279c8080 addiu gp,gp,-32640
+12340008: 0399e021 addu gp,gp,t9
+1234000c: 27bdfff8 addiu sp,sp,-8
+12340010: afbf0004 sw ra,4\(sp\)
+12340014: afbc0000 sw gp,0\(sp\)
+12340018: 8f998018 lw t9,-32744\(gp\)
+1234001c: 0320f809 jalr t9
+12340020: 00000000 nop
+12340024: 8fbc0000 lw gp,0\(sp\)
+12340028: 8f99801c lw t9,-32740\(gp\)
+1234002c: 0320f809 jalr t9
+12340030: 00000000 nop
+12340034: 8fbc0000 lw gp,0\(sp\)
+12340038: 8f998020 lw t9,-32736\(gp\)
+1234003c: 0320f809 jalr t9
+12340040: 00000000 nop
+12340044: 8fbc0000 lw gp,0\(sp\)
+12340048: 8fbf0004 lw ra,4\(sp\)
+1234004c: 03e00008 jr ra
+12340050: 27bd0008 addiu sp,sp,8
+ \.\.\.
+
+12340060 <protected_foo>:
+12340060: 03e00008 jr ra
+12340064: 00000000 nop
+ \.\.\.
+
+12340070 <hidden_foo>:
+12340070: 03e00008 jr ra
+12340074: 00000000 nop
+ \.\.\.
+
+12340080 <internal_foo>:
+12340080: 03e00008 jr ra
+12340084: 00000000 nop
+ \.\.\.
diff --git a/ld/testsuite/ld-mips-elf/export-class-call16-o32.dd b/ld/testsuite/ld-mips-elf/export-class-call16-o32.dd
new file mode 100644
index 0000000..616af2f
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/export-class-call16-o32.dd
@@ -0,0 +1,43 @@
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+
+12340000 <foo>:
+12340000: 3c1c0001 lui gp,0x1
+12340004: 279c8080 addiu gp,gp,-32640
+12340008: 0399e021 addu gp,gp,t9
+1234000c: 27bdfff8 addiu sp,sp,-8
+12340010: afbf0004 sw ra,4\(sp\)
+12340014: afbc0000 sw gp,0\(sp\)
+12340018: 8f998018 lw t9,-32744\(gp\)
+1234001c: 04110010 bal 12340060 <protected_foo>
+12340020: 00000000 nop
+12340024: 8fbc0000 lw gp,0\(sp\)
+12340028: 8f99801c lw t9,-32740\(gp\)
+1234002c: 04110010 bal 12340070 <hidden_foo>
+12340030: 00000000 nop
+12340034: 8fbc0000 lw gp,0\(sp\)
+12340038: 8f998020 lw t9,-32736\(gp\)
+1234003c: 04110010 bal 12340080 <internal_foo>
+12340040: 00000000 nop
+12340044: 8fbc0000 lw gp,0\(sp\)
+12340048: 8fbf0004 lw ra,4\(sp\)
+1234004c: 03e00008 jr ra
+12340050: 27bd0008 addiu sp,sp,8
+ \.\.\.
+
+12340060 <protected_foo>:
+12340060: 03e00008 jr ra
+12340064: 00000000 nop
+ \.\.\.
+
+12340070 <hidden_foo>:
+12340070: 03e00008 jr ra
+12340074: 00000000 nop
+ \.\.\.
+
+12340080 <internal_foo>:
+12340080: 03e00008 jr ra
+12340084: 00000000 nop
+ \.\.\.
diff --git a/ld/testsuite/ld-mips-elf/export-class-call16-o32.gd b/ld/testsuite/ld-mips-elf/export-class-call16-o32.gd
new file mode 100644
index 0000000..63f4a7b
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/export-class-call16-o32.gd
@@ -0,0 +1,14 @@
+
+Primary GOT:
+ Canonical gp value: 12348080
+
+ Reserved entries:
+ Address Access Initial Purpose
+ 12340090 -32752\(gp\) 00000000 Lazy resolver
+ 12340094 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+ Local entries:
+ Address Access Initial
+ 12340098 -32744\(gp\) 12340060
+ 1234009c -32740\(gp\) 12340070
+ 123400a0 -32736\(gp\) 12340080
diff --git a/ld/testsuite/ld-mips-elf/export-class-call16-o32.s b/ld/testsuite/ld-mips-elf/export-class-call16-o32.s
new file mode 100644
index 0000000..548395c
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/export-class-call16-o32.s
@@ -0,0 +1,22 @@
+ .text
+ .balign 16
+ .xdef foo
+ .ent foo
+foo:
+ .frame $29, 8, $31
+ .mask 0x80000000, -4
+ .set noreorder
+ .cpload $25
+ .set reorder
+ addiu $29, -8
+ sw $31, 4($29)
+ .cprestore 0
+ jal protected_foo
+ jal hidden_foo
+ jal internal_foo
+ lw $31, 4($29)
+ addiu $29, 8
+ jr $31
+ .end foo
+ .balign 4
+ .space 8
diff --git a/ld/testsuite/ld-mips-elf/export-class-call16.ld b/ld/testsuite/ld-mips-elf/export-class-call16.ld
new file mode 100644
index 0000000..39f6367
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/export-class-call16.ld
@@ -0,0 +1,16 @@
+ENTRY (foo);
+SECTIONS
+{
+ .text : { *(.text) }
+ HIDDEN (_gp = ALIGN(16) + 0x7ff0);
+ .got : { *(.got) }
+ .dynamic : { *(.dynamic) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .pdr : { *(.pdr) }
+ .shstrtab : { *(.shstrtab) }
+ .symtab : { *(.symtab) }
+ .strtab : { *(.strtab) }
+ /DISCARD/ : { *(*) }
+}
diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp
index e4717e7..62c6cb0 100644
--- a/ld/testsuite/ld-mips-elf/mips-elf.exp
+++ b/ld/testsuite/ld-mips-elf/mips-elf.exp
@@ -648,3 +648,24 @@ if { $linux_gnu } {
# MIPS16 and microMIPS interlinking test.
run_dump_test "mips16-and-micromips"
+
+# Export class call relocation tests.
+set abis [concat o32 [expr {$has_newabi ? "n32 n64" : ""}]]
+foreach { abi } $abis {
+ set loadaddr [string map \
+ {o32 0x12340000 n32 0x12340000 n64 0x123456789abc0000} $abi]
+ set suff [subst \
+ [expr { [istarget *-*-irix*] \
+ ? [string map {o32 o32-irix n32 n32 n64 n64} $abi] \
+ : $abi }]]
+ run_ld_link_tests [list \
+ [list \
+ "MIPS export class call relocation test ($abi)" \
+ "$abi_ldflags($abi) -shared -Ttext $loadaddr -T export-class-call16.ld" \
+ "$abi_asflags($abi) -mips3 -KPIC" \
+ [list export-class-call16-${abi}.s export-class-call16-def.s] \
+ [list \
+ "objdump -d export-class-call16-${suff}.dd" \
+ "readelf -A export-class-call16-${abi}.gd"] \
+ "export-class-call16-${abi}.so"]]
+}