ld/testsuite/
authorRichard Sandiford <rdsandiford@googlemail.com>
Sun, 13 Oct 2013 10:17:20 +0000 (10:17 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Sun, 13 Oct 2013 10:17:20 +0000 (10:17 +0000)
* lib/ld-lib.exp (default_ld_compile): Add a -I option for the source
directory.
* ld-mips-elf/compressed-plt-1.ld, ld-mips-elf/compressed-plt-1.s,
ld-mips-elf/compressed-plt-1-dyn.s, ld-mips-elf/compressed-plt-1a.s,
ld-mips-elf/compressed-plt-1b.s, ld-mips-elf/compressed-plt-1c.s,
ld-mips-elf/compressed-plt-1d.s, ld-mips-elf/compressed-plt-1e.s,
ld-mips-elf/compressed-plt-1-o32-se.rd,
ld-mips-elf/compressed-plt-1-o32-se.od,
ld-mips-elf/compressed-plt-1-o32-mips16-only.rd,
ld-mips-elf/compressed-plt-1-o32-mips16-only.od,
ld-mips-elf/compressed-plt-1-o32-umips-only.rd,
ld-mips-elf/compressed-plt-1-o32-umips-only.od,
ld-mips-elf/compressed-plt-1-o32-mips16.rd,
ld-mips-elf/compressed-plt-1-o32-mips16.od,
ld-mips-elf/compressed-plt-1-o32-mips16-got.rd,
ld-mips-elf/compressed-plt-1-o32-mips16-got.od,
ld-mips-elf/compressed-plt-1-o32-mips16-word.rd,
ld-mips-elf/compressed-plt-1-o32-mips16-word.od,
ld-mips-elf/compressed-plt-1-o32-umips.rd,
ld-mips-elf/compressed-plt-1-o32-umips.od,
ld-mips-elf/compressed-plt-1-o32-umips-got.rd,
ld-mips-elf/compressed-plt-1-o32-umips-got.od,
ld-mips-elf/compressed-plt-1-o32-umips-word.rd,
ld-mips-elf/compressed-plt-1-o32-umips-word.od,
ld-mips-elf/compressed-plt-1-n32-mips16.rd,
ld-mips-elf/compressed-plt-1-n32-mips16.od,
ld-mips-elf/compressed-plt-1-n32-umips.rd,
ld-mips-elf/compressed-plt-1-n32-umips.od: New tests.
* ld-mips-elf/mips-elf.exp: Run them.

33 files changed:
ld/testsuite/ChangeLog
ld/testsuite/ld-mips-elf/compressed-plt-1-dyn.s [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-n32-mips16.od [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-n32-mips16.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-n32-umips.od [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-n32-umips.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-got.od [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-got.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-only.od [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-only.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-word.od [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-word.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16.od [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-se.od [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-se.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-got.od [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-got.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-only.od [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-only.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-word.od [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-word.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips.od [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips.rd [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1.ld [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1.s [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1a.s [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1b.s [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1c.s [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1d.s [new file with mode: 0644]
ld/testsuite/ld-mips-elf/compressed-plt-1e.s [new file with mode: 0644]
ld/testsuite/ld-mips-elf/mips-elf.exp
ld/testsuite/lib/ld-lib.exp

index b04f027..a8060a3 100644 (file)
@@ -1,5 +1,37 @@
 2013-10-13  Richard Sandiford  <rdsandiford@googlemail.com>
 
+       * lib/ld-lib.exp (default_ld_compile): Add a -I option for the source
+       directory.
+       * ld-mips-elf/compressed-plt-1.ld, ld-mips-elf/compressed-plt-1.s,
+       ld-mips-elf/compressed-plt-1-dyn.s, ld-mips-elf/compressed-plt-1a.s,
+       ld-mips-elf/compressed-plt-1b.s, ld-mips-elf/compressed-plt-1c.s,
+       ld-mips-elf/compressed-plt-1d.s, ld-mips-elf/compressed-plt-1e.s,
+       ld-mips-elf/compressed-plt-1-o32-se.rd,
+       ld-mips-elf/compressed-plt-1-o32-se.od,
+       ld-mips-elf/compressed-plt-1-o32-mips16-only.rd,
+       ld-mips-elf/compressed-plt-1-o32-mips16-only.od,
+       ld-mips-elf/compressed-plt-1-o32-umips-only.rd,
+       ld-mips-elf/compressed-plt-1-o32-umips-only.od,
+       ld-mips-elf/compressed-plt-1-o32-mips16.rd,
+       ld-mips-elf/compressed-plt-1-o32-mips16.od,
+       ld-mips-elf/compressed-plt-1-o32-mips16-got.rd,
+       ld-mips-elf/compressed-plt-1-o32-mips16-got.od,
+       ld-mips-elf/compressed-plt-1-o32-mips16-word.rd,
+       ld-mips-elf/compressed-plt-1-o32-mips16-word.od,
+       ld-mips-elf/compressed-plt-1-o32-umips.rd,
+       ld-mips-elf/compressed-plt-1-o32-umips.od,
+       ld-mips-elf/compressed-plt-1-o32-umips-got.rd,
+       ld-mips-elf/compressed-plt-1-o32-umips-got.od,
+       ld-mips-elf/compressed-plt-1-o32-umips-word.rd,
+       ld-mips-elf/compressed-plt-1-o32-umips-word.od,
+       ld-mips-elf/compressed-plt-1-n32-mips16.rd,
+       ld-mips-elf/compressed-plt-1-n32-mips16.od,
+       ld-mips-elf/compressed-plt-1-n32-umips.rd,
+       ld-mips-elf/compressed-plt-1-n32-umips.od: New tests.
+       * ld-mips-elf/mips-elf.exp: Run them.
+
+2013-10-13  Richard Sandiford  <rdsandiford@googlemail.com>
+
        * ld-mips-elf/pic-and-nonpic-6-n32.ad,
        ld-mips-elf/pic-and-nonpic-6-n32.dd,
        ld-mips-elf/pic-and-nonpic-6-n32.gd,
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-dyn.s b/ld/testsuite/ld-mips-elf/compressed-plt-1-dyn.s
new file mode 100644 (file)
index 0000000..a56d1c9
--- /dev/null
@@ -0,0 +1,18 @@
+# Create dummy DSO functions for everything that these tests call.
+
+       .abicalls
+       .option pic2
+
+       .set    filter, -1
+
+       .macro  test_one, name, mask
+       .globl  \name
+       .ent    \name
+\name:
+       jr      $31
+       .end    \name
+       .endm
+
+       .include "compressed-plt-1.s"
+
+       test_all
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-n32-mips16.od b/ld/testsuite/ld-mips-elf/compressed-plt-1-n32-mips16.od
new file mode 100644 (file)
index 0000000..c17dacb
--- /dev/null
@@ -0,0 +1,411 @@
+
+.* file format .*
+
+
+Disassembly of section \.plt:
+
+# At present, all n32 PLT entries use the standard encoding.
+10100000 <_PROCEDURE_LINKAGE_TABLE_>:
+.*:    3c0e1020        lui     \$14,0x1020
+.*:    8dd90000        lw      \$25,0\(\$14\)
+.*:    25ce0000        addiu   \$14,\$14,0
+.*:    030ec023        subu    \$24,\$24,\$14
+.*:    03e07821        move    \$15,\$31
+.*:    0018c082        srl     \$24,\$24,0x2
+.*:    0320f809        jalr    \$25
+.*:    2718fffe        addiu   \$24,\$24,-2
+
+10100020 <f_lo_iu@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90008        lw      \$25,8\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80008        addiu   \$24,\$15,8
+
+10100030 <f_lo_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9000c        lw      \$25,12\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8000c        addiu   \$24,\$15,12
+
+10100040 <f_lo_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90010        lw      \$25,16\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80010        addiu   \$24,\$15,16
+
+10100050 <f_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90014        lw      \$25,20\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80014        addiu   \$24,\$15,20
+
+10100060 <f_lo_iu_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90018        lw      \$25,24\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80018        addiu   \$24,\$15,24
+
+10100070 <f_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9001c        lw      \$25,28\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8001c        addiu   \$24,\$15,28
+
+10100080 <f_lo_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90020        lw      \$25,32\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80020        addiu   \$24,\$15,32
+
+10100090 <f_iu_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90024        lw      \$25,36\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80024        addiu   \$24,\$15,36
+
+101000a0 <f_lo_iu_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90028        lw      \$25,40\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80028        addiu   \$24,\$15,40
+
+101000b0 <f_lo_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9002c        lw      \$25,44\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8002c        addiu   \$24,\$15,44
+
+101000c0 <f_lo_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90030        lw      \$25,48\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80030        addiu   \$24,\$15,48
+
+101000d0 <f_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90034        lw      \$25,52\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80034        addiu   \$24,\$15,52
+
+101000e0 <f_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90038        lw      \$25,56\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80038        addiu   \$24,\$15,56
+
+101000f0 <f_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9003c        lw      \$25,60\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8003c        addiu   \$24,\$15,60
+
+10100100 <f_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90040        lw      \$25,64\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80040        addiu   \$24,\$15,64
+
+10100110 <f_lo_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90044        lw      \$25,68\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80044        addiu   \$24,\$15,68
+
+10100120 <f_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90048        lw      \$25,72\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80048        addiu   \$24,\$15,72
+
+10100130 <f_lo_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9004c        lw      \$25,76\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8004c        addiu   \$24,\$15,76
+
+10100140 <f_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90050        lw      \$25,80\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80050        addiu   \$24,\$15,80
+
+10100150 <f_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90054        lw      \$25,84\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80054        addiu   \$24,\$15,84
+
+10100160 <f_lo_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90058        lw      \$25,88\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80058        addiu   \$24,\$15,88
+
+10100170 <f_iu_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9005c        lw      \$25,92\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8005c        addiu   \$24,\$15,92
+
+10100180 <f_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90060        lw      \$25,96\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80060        addiu   \$24,\$15,96
+
+10100190 <f_lo_iu_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90064        lw      \$25,100\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80064        addiu   \$24,\$15,100
+
+101001a0 <f_lo_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90068        lw      \$25,104\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80068        addiu   \$24,\$15,104
+
+101001b0 <f_lo_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9006c        lw      \$25,108\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8006c        addiu   \$24,\$15,108
+
+101001c0 <f_lo_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90070        lw      \$25,112\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80070        addiu   \$24,\$15,112
+
+101001d0 <f_lo@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90074        lw      \$25,116\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80074        addiu   \$24,\$15,116
+
+Disassembly of section \.MIPS\.stubs:
+
+10101000 <_MIPS_STUBS_>:
+# Lazy-binding stub for f_iu.
+.*:    8f998010        lw      \$25,-32752\(\$28\)
+.*:    03e07821        move    \$15,\$31
+.*:    0320f809        jalr    \$25
+.*:    24180021        li      \$24,33
+# Lazy-binding stub for f_ic.
+.*:    8f998010        lw      \$25,-32752\(\$28\)
+.*:    03e07821        move    \$15,\$31
+.*:    0320f809        jalr    \$25
+.*:    24180020        li      \$24,32
+# Lazy-binding stub for f_iu_ic.
+.*:    8f998010        lw      \$25,-32752\(\$28\)
+.*:    03e07821        move    \$15,\$31
+.*:    0320f809        jalr    \$25
+.*:    2418001f        li      \$24,31
+       \.\.\.
+
+Disassembly of section \.text\.a:
+
+10102000 <testc>:
+.*:    .... ....       jalx    [0-9a-f]+ <f_dc@plt>
+.*:    6500            nop
+.*:    f070 9b50       lw      \$2,-32656\(\$3\)
+#                                  ^ global GOT entry for f_ic
+.*:    .... ....       jalx    [0-9a-f]+ <f_ic_dc@plt>
+.*:    6500            nop
+.*:    f010 9b58       lw      \$2,-32744\(\$3\)
+#                                  ^ local GOT entry for f_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_du_dc@plt>
+.*:    6500            nop
+.*:    f010 9b5c       lw      \$2,-32740\(\$3\)
+#                                  ^ local GOT entry for f_du_ic@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    6500            nop
+.*:    f030 9b40       lw      \$2,-32736\(\$3\)
+#                                  ^ local GOT entry for f_du_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_iu_dc@plt>
+.*:    6500            nop
+.*:    f070 9b4c       lw      \$2,-32660\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    .... ....       jalx    [0-9a-f]+ <f_iu_ic_dc@plt>
+.*:    6500            nop
+.*:    f030 9b44       lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    6500            nop
+.*:    f030 9b48       lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    6500            nop
+.*:    f030 9b4c       lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_dc@plt>
+.*:    6500            nop
+.*:    f030 9b50       lw      \$2,-32720\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_ic_dc@plt>
+.*:    6500            nop
+.*:    f030 9b54       lw      \$2,-32716\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    6500            nop
+.*:    f030 9b58       lw      \$2,-32712\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    6500            nop
+.*:    f030 9b5c       lw      \$2,-32708\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_iu_dc@plt>
+.*:    6500            nop
+.*:    f050 9b40       lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_iu_ic_dc@plt>
+.*:    6500            nop
+.*:    f050 9b44       lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    6500            nop
+.*:    f050 9b48       lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    6500            nop
+.*:    f050 9b4c       lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    e820            jr      \$31
+
+Disassembly of section \.text\.b:
+
+10103000 <testu>:
+.*:    ........        jal     [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c628074        lw      \$2,-32652\(\$3\)
+#                                  ^ global GOT entry for f_iu
+.*:    8c628050        lw      \$2,-32688\(\$3\)
+#                                  ^ local GOT entry for f_iu_dc@plt
+.*:    8c62806c        lw      \$2,-32660\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    8c628024        lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628054        lw      \$2,-32684\(\$3\)
+#                                  ^ local GOT entry for f_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628058        lw      \$2,-32680\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628028        lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62802c        lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62805c        lw      \$2,-32676\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu@plt
+.*:    8c628060        lw      \$2,-32672\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_dc@plt
+.*:    8c628040        lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@plt
+.*:    8c628044        lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628064        lw      \$2,-32668\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628068        lw      \$2,-32664\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628048        lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62804c        lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    03e00008        jr      \$31
+
+Disassembly of section \.text\.c:
+
+10104000 <testlo>:
+.*:    240201d0        li      \$2,464
+#                                  ^ low 16 bits of f_lo@plt
+.*:    24020110        li      \$2,272
+#                                  ^ low 16 bits of f_lo_dc@plt
+.*:    240200b0        li      \$2,176
+#                                  ^ low 16 bits of f_lo_ic@plt
+.*:    240201c0        li      \$2,448
+#                                  ^ low 16 bits of f_lo_ic_dc@plt
+.*:    24020160        li      \$2,352
+#                                  ^ low 16 bits of f_lo_du@plt
+.*:    240200c0        li      \$2,192
+#                                  ^ low 16 bits of f_lo_du_dc@plt
+.*:    24020080        li      \$2,128
+#                                  ^ low 16 bits of f_lo_du_ic@plt
+.*:    24020040        li      \$2,64
+#                                  ^ low 16 bits of f_lo_du_ic_dc@plt
+.*:    24020020        li      \$2,32
+#                                  ^ low 16 bits of f_lo_iu@plt
+.*:    24020060        li      \$2,96
+#                                  ^ low 16 bits of f_lo_iu_dc@plt
+.*:    240200a0        li      \$2,160
+#                                  ^ low 16 bits of f_lo_iu_ic@plt
+.*:    24020190        li      \$2,400
+#                                  ^ low 16 bits of f_lo_iu_ic_dc@plt
+.*:    24020130        li      \$2,304
+#                                  ^ low 16 bits of f_lo_iu_du@plt
+.*:    24020030        li      \$2,48
+#                                  ^ low 16 bits of f_lo_iu_du_dc@plt
+.*:    240201a0        li      \$2,416
+#                                  ^ low 16 bits of f_lo_iu_du_ic@plt
+.*:    240201b0        li      \$2,432
+#                                  ^ low 16 bits of f_lo_iu_du_ic_dc@plt
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-n32-mips16.rd b/ld/testsuite/ld-mips-elf/compressed-plt-1-n32-mips16.rd
new file mode 100644 (file)
index 0000000..82b0313
--- /dev/null
@@ -0,0 +1,167 @@
+
+Dynamic section .*
+#...
+ 0x00000003 \(PLTGOT\)                     0x10201000
+#...
+ 0x70000013 \(MIPS_GOTSYM\)                0x1f
+ 0x00000014 \(PLTREL\)                     REL
+ 0x00000017 \(JMPREL\)                     0x10004000
+ 0x00000002 \(PLTRELSZ\)                   224 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\)                0x10200000
+#...
+Relocation section '\.rel\.plt' .*
+ Offset     Info    Type            Sym\.Value  Sym\. Name
+10200008  [^ ]+ R_MIPS_JUMP_SLOT  10100020   f_lo_iu
+1020000c  [^ ]+ R_MIPS_JUMP_SLOT  10100030   f_lo_iu_du_dc
+10200010  [^ ]+ R_MIPS_JUMP_SLOT  10100040   f_lo_du_ic_dc
+10200014  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du_dc
+10200018  [^ ]+ R_MIPS_JUMP_SLOT  10100060   f_lo_iu_dc
+1020001c  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du_ic
+10200020  [^ ]+ R_MIPS_JUMP_SLOT  10100080   f_lo_du_ic
+10200024  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_dc
+10200028  [^ ]+ R_MIPS_JUMP_SLOT  101000a0   f_lo_iu_ic
+1020002c  [^ ]+ R_MIPS_JUMP_SLOT  101000b0   f_lo_ic
+10200030  [^ ]+ R_MIPS_JUMP_SLOT  101000c0   f_lo_du_dc
+10200034  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du
+10200038  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du_ic_dc
+1020003c  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du_ic
+10200040  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du_dc
+10200044  [^ ]+ R_MIPS_JUMP_SLOT  10100110   f_lo_dc
+10200048  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du
+1020004c  [^ ]+ R_MIPS_JUMP_SLOT  10100130   f_lo_iu_du
+10200050  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_dc
+10200054  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_ic_dc
+10200058  [^ ]+ R_MIPS_JUMP_SLOT  10100160   f_lo_du
+1020005c  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_ic_dc
+10200060  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du_ic_dc
+10200064  [^ ]+ R_MIPS_JUMP_SLOT  10100190   f_lo_iu_ic_dc
+10200068  [^ ]+ R_MIPS_JUMP_SLOT  101001a0   f_lo_iu_du_ic
+1020006c  [^ ]+ R_MIPS_JUMP_SLOT  101001b0   f_lo_iu_du_ic_dc
+10200070  [^ ]+ R_MIPS_JUMP_SLOT  101001c0   f_lo_ic_dc
+10200074  [^ ]+ R_MIPS_JUMP_SLOT  101001d0   f_lo
+
+Symbol table '\.dynsym' .*
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+# _lo symbols have their address taken, so their PLT symbols need to have
+# a nonzero value.  They must also have STO_MIPS_PLT in order to distinguish
+# them from old-style lazy-binding stubs.  Non-_lo symbols are only called,
+# so their PLT symbols should have a zero value and no STO_MIPS_PLT annotation.
+    .*: 10100020     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu
+    .*: 10100030     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_dc
+#...
+    .*: 10100040     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du_dc
+    .*: 10100060     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du_ic
+    .*: 10100080     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_dc
+    .*: 101000a0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic
+    .*: 101000b0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic
+    .*: 101000c0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du_ic_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du_ic
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du_dc
+    .*: 10100110     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du
+    .*: 10100130     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_ic_dc
+    .*: 10100160     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_ic_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du_ic_dc
+#...
+    .*: 10100190     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic_dc
+    .*: 101001a0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic
+    .*: 101001b0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic_dc
+    .*: 101001c0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic_dc
+    .*: 101001d0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo
+# The start of the GOT-mapped area.  This should only contain functions that
+# are accessed purely via the traditional psABI scheme.  The symbol value
+# is the address of the lazy-binding stub.
+    31: 10101020     0 FUNC    GLOBAL DEFAULT  UND f_iu_ic
+    32: 10101010     0 FUNC    GLOBAL DEFAULT  UND f_ic
+    33: 10101000     0 FUNC    GLOBAL DEFAULT  UND f_iu
+
+Symbol table '\.symtab' .*
+#...
+Primary GOT:
+ Canonical gp value: 10208ff0
+
+ Reserved entries:
+   Address     Access  Initial Purpose
+  10201000 -32752\(gp\) 00000000 Lazy resolver
+  10201004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+# See the disassembly output for the meaning of each entry.
+ Local entries:
+   Address     Access  Initial
+  10201008 -32744\(gp\) 10100150
+  1020100c -32740\(gp\) 101000f0
+  10201010 -32736\(gp\) 101000e0
+  10201014 -32732\(gp\) 10100170
+  10201018 -32728\(gp\) 10100070
+  1020101c -32724\(gp\) 10100180
+  10201020 -32720\(gp\) 101000b0
+  10201024 -32716\(gp\) 101001c0
+  10201028 -32712\(gp\) 10100080
+  1020102c -32708\(gp\) 10100040
+  10201030 -32704\(gp\) 101000a0
+  10201034 -32700\(gp\) 10100190
+  10201038 -32696\(gp\) 101001a0
+  1020103c -32692\(gp\) 101001b0
+  10201040 -32688\(gp\) 10100090
+  10201044 -32684\(gp\) 10100120
+  10201048 -32680\(gp\) 10100100
+  1020104c -32676\(gp\) 10100020
+  10201050 -32672\(gp\) 10100060
+  10201054 -32668\(gp\) 10100130
+  10201058 -32664\(gp\) 10100030
+
+ Global entries:
+   Address     Access  Initial Sym\.Val\. Type    Ndx Name
+  1020105c -32660\(gp\) 10101020 10101020 FUNC    UND f_iu_ic
+  10201060 -32656\(gp\) 10101010 10101010 FUNC    UND f_ic
+  10201064 -32652\(gp\) 10101000 10101000 FUNC    UND f_iu
+
+
+PLT GOT:
+
+ Reserved entries:
+   Address  Initial Purpose
+  10200000 00000000 PLT lazy resolver
+  10200004 00000000 Module pointer
+
+ Entries:
+   Address  Initial Sym\.Val\. Type    Ndx Name
+  10200008 10100000 10100020 FUNC    UND f_lo_iu
+  1020000c 10100000 10100030 FUNC    UND f_lo_iu_du_dc
+  10200010 10100000 10100040 FUNC    UND f_lo_du_ic_dc
+  10200014 10100000 00000000 FUNC    UND f_du_dc
+  10200018 10100000 10100060 FUNC    UND f_lo_iu_dc
+  1020001c 10100000 00000000 FUNC    UND f_iu_du_ic
+  10200020 10100000 10100080 FUNC    UND f_lo_du_ic
+  10200024 10100000 00000000 FUNC    UND f_iu_dc
+  10200028 10100000 101000a0 FUNC    UND f_lo_iu_ic
+  1020002c 10100000 101000b0 FUNC    UND f_lo_ic
+  10200030 10100000 101000c0 FUNC    UND f_lo_du_dc
+  10200034 10100000 00000000 FUNC    UND f_du
+  10200038 10100000 00000000 FUNC    UND f_du_ic_dc
+  1020003c 10100000 00000000 FUNC    UND f_du_ic
+  10200040 10100000 00000000 FUNC    UND f_iu_du_dc
+  10200044 10100000 10100110 FUNC    UND f_lo_dc
+  10200048 10100000 00000000 FUNC    UND f_iu_du
+  1020004c 10100000 10100130 FUNC    UND f_lo_iu_du
+  10200050 10100000 00000000 FUNC    UND f_dc
+  10200054 10100000 00000000 FUNC    UND f_ic_dc
+  10200058 10100000 10100160 FUNC    UND f_lo_du
+  1020005c 10100000 00000000 FUNC    UND f_iu_ic_dc
+  10200060 10100000 00000000 FUNC    UND f_iu_du_ic_dc
+  10200064 10100000 10100190 FUNC    UND f_lo_iu_ic_dc
+  10200068 10100000 101001a0 FUNC    UND f_lo_iu_du_ic
+  1020006c 10100000 101001b0 FUNC    UND f_lo_iu_du_ic_dc
+  10200070 10100000 101001c0 FUNC    UND f_lo_ic_dc
+  10200074 10100000 101001d0 FUNC    UND f_lo
+
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-n32-umips.od b/ld/testsuite/ld-mips-elf/compressed-plt-1-n32-umips.od
new file mode 100644 (file)
index 0000000..fc0d4ea
--- /dev/null
@@ -0,0 +1,411 @@
+
+.* file format .*
+
+
+Disassembly of section \.plt:
+
+# At present, all n32 PLT entries use the standard encoding.
+10100000 <_PROCEDURE_LINKAGE_TABLE_>:
+.*:    3c0e1020        lui     \$14,0x1020
+.*:    8dd90000        lw      \$25,0\(\$14\)
+.*:    25ce0000        addiu   \$14,\$14,0
+.*:    030ec023        subu    \$24,\$24,\$14
+.*:    03e07821        move    \$15,\$31
+.*:    0018c082        srl     \$24,\$24,0x2
+.*:    0320f809        jalr    \$25
+.*:    2718fffe        addiu   \$24,\$24,-2
+
+10100020 <f_lo_iu@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90008        lw      \$25,8\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80008        addiu   \$24,\$15,8
+
+10100030 <f_lo_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9000c        lw      \$25,12\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8000c        addiu   \$24,\$15,12
+
+10100040 <f_lo_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90010        lw      \$25,16\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80010        addiu   \$24,\$15,16
+
+10100050 <f_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90014        lw      \$25,20\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80014        addiu   \$24,\$15,20
+
+10100060 <f_lo_iu_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90018        lw      \$25,24\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80018        addiu   \$24,\$15,24
+
+10100070 <f_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9001c        lw      \$25,28\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8001c        addiu   \$24,\$15,28
+
+10100080 <f_lo_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90020        lw      \$25,32\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80020        addiu   \$24,\$15,32
+
+10100090 <f_iu_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90024        lw      \$25,36\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80024        addiu   \$24,\$15,36
+
+101000a0 <f_lo_iu_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90028        lw      \$25,40\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80028        addiu   \$24,\$15,40
+
+101000b0 <f_lo_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9002c        lw      \$25,44\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8002c        addiu   \$24,\$15,44
+
+101000c0 <f_lo_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90030        lw      \$25,48\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80030        addiu   \$24,\$15,48
+
+101000d0 <f_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90034        lw      \$25,52\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80034        addiu   \$24,\$15,52
+
+101000e0 <f_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90038        lw      \$25,56\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80038        addiu   \$24,\$15,56
+
+101000f0 <f_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9003c        lw      \$25,60\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8003c        addiu   \$24,\$15,60
+
+10100100 <f_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90040        lw      \$25,64\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80040        addiu   \$24,\$15,64
+
+10100110 <f_lo_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90044        lw      \$25,68\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80044        addiu   \$24,\$15,68
+
+10100120 <f_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90048        lw      \$25,72\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80048        addiu   \$24,\$15,72
+
+10100130 <f_lo_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9004c        lw      \$25,76\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8004c        addiu   \$24,\$15,76
+
+10100140 <f_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90050        lw      \$25,80\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80050        addiu   \$24,\$15,80
+
+10100150 <f_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90054        lw      \$25,84\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80054        addiu   \$24,\$15,84
+
+10100160 <f_lo_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90058        lw      \$25,88\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80058        addiu   \$24,\$15,88
+
+10100170 <f_iu_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9005c        lw      \$25,92\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8005c        addiu   \$24,\$15,92
+
+10100180 <f_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90060        lw      \$25,96\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80060        addiu   \$24,\$15,96
+
+10100190 <f_lo_iu_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90064        lw      \$25,100\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80064        addiu   \$24,\$15,100
+
+101001a0 <f_lo_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90068        lw      \$25,104\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80068        addiu   \$24,\$15,104
+
+101001b0 <f_lo_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9006c        lw      \$25,108\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8006c        addiu   \$24,\$15,108
+
+101001c0 <f_lo_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90070        lw      \$25,112\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80070        addiu   \$24,\$15,112
+
+101001d0 <f_lo@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90074        lw      \$25,116\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80074        addiu   \$24,\$15,116
+
+Disassembly of section \.MIPS\.stubs:
+
+10101000 <_MIPS_STUBS_>:
+# Lazy-binding stub for f_iu.
+.*:    ff3c 8010       lw      \$25,-32752\(\$28\)
+.*:    0dff            move    \$15,\$31
+.*:    45d9            jalr    \$25
+.*:    3300 0021       li      \$24,33
+# Lazy-binding stub for f_ic.
+.*:    ff3c 8010       lw      \$25,-32752\(\$28\)
+.*:    0dff            move    \$15,\$31
+.*:    45d9            jalr    \$25
+.*:    3300 0020       li      \$24,32
+# Lazy-binding stub for f_iu_ic.
+.*:    ff3c 8010       lw      \$25,-32752\(\$28\)
+.*:    0dff            move    \$15,\$31
+.*:    45d9            jalr    \$25
+.*:    3300 001f       li      \$24,31
+       \.\.\.
+
+Disassembly of section \.text\.a:
+
+10102000 <testc>:
+.*:    .... ....       jalx    [0-9a-f]+ <f_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 8070       lw      \$2,-32656\(\$3\)
+#                                  ^ global GOT entry for f_ic
+.*:    .... ....       jalx    [0-9a-f]+ <f_ic_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 8018       lw      \$2,-32744\(\$3\)
+#                                  ^ local GOT entry for f_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_du_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 801c       lw      \$2,-32740\(\$3\)
+#                                  ^ local GOT entry for f_du_ic@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 8020       lw      \$2,-32736\(\$3\)
+#                                  ^ local GOT entry for f_du_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_iu_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 806c       lw      \$2,-32660\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    .... ....       jalx    [0-9a-f]+ <f_iu_ic_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 8024       lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 8028       lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 802c       lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 8030       lw      \$2,-32720\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_ic_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 8034       lw      \$2,-32716\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 8038       lw      \$2,-32712\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 803c       lw      \$2,-32708\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_iu_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 8040       lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_iu_ic_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 8044       lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 8048       lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    .... ....       jalx    [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    0000 0000       nop
+.*:    fc43 804c       lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    459f            jr      \$31
+
+Disassembly of section \.text\.b:
+
+10103000 <testu>:
+.*:    ........        jal     [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c628074        lw      \$2,-32652\(\$3\)
+#                                  ^ global GOT entry for f_iu
+.*:    8c628050        lw      \$2,-32688\(\$3\)
+#                                  ^ local GOT entry for f_iu_dc@plt
+.*:    8c62806c        lw      \$2,-32660\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    8c628024        lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628054        lw      \$2,-32684\(\$3\)
+#                                  ^ local GOT entry for f_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628058        lw      \$2,-32680\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628028        lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62802c        lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62805c        lw      \$2,-32676\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu@plt
+.*:    8c628060        lw      \$2,-32672\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_dc@plt
+.*:    8c628040        lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@plt
+.*:    8c628044        lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628064        lw      \$2,-32668\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628068        lw      \$2,-32664\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628048        lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62804c        lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    03e00008        jr      \$31
+
+Disassembly of section \.text\.c:
+
+10104000 <testlo>:
+.*:    3040 01d0       li      \$2,464
+#                                  ^ low 16 bits of f_lo@plt
+.*:    3040 0110       li      \$2,272
+#                                  ^ low 16 bits of f_lo_dc@plt
+.*:    3040 00b0       li      \$2,176
+#                                  ^ low 16 bits of f_lo_ic@plt
+.*:    3040 01c0       li      \$2,448
+#                                  ^ low 16 bits of f_lo_ic_dc@plt
+.*:    3040 0160       li      \$2,352
+#                                  ^ low 16 bits of f_lo_du@plt
+.*:    3040 00c0       li      \$2,192
+#                                  ^ low 16 bits of f_lo_du_dc@plt
+.*:    3040 0080       li      \$2,128
+#                                  ^ low 16 bits of f_lo_du_ic@plt
+.*:    3040 0040       li      \$2,64
+#                                  ^ low 16 bits of f_lo_du_ic_dc@plt
+.*:    3040 0020       li      \$2,32
+#                                  ^ low 16 bits of f_lo_iu@plt
+.*:    3040 0060       li      \$2,96
+#                                  ^ low 16 bits of f_lo_iu_dc@plt
+.*:    3040 00a0       li      \$2,160
+#                                  ^ low 16 bits of f_lo_iu_ic@plt
+.*:    3040 0190       li      \$2,400
+#                                  ^ low 16 bits of f_lo_iu_ic_dc@plt
+.*:    3040 0130       li      \$2,304
+#                                  ^ low 16 bits of f_lo_iu_du@plt
+.*:    3040 0030       li      \$2,48
+#                                  ^ low 16 bits of f_lo_iu_du_dc@plt
+.*:    3040 01a0       li      \$2,416
+#                                  ^ low 16 bits of f_lo_iu_du_ic@plt
+.*:    3040 01b0       li      \$2,432
+#                                  ^ low 16 bits of f_lo_iu_du_ic_dc@plt
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-n32-umips.rd b/ld/testsuite/ld-mips-elf/compressed-plt-1-n32-umips.rd
new file mode 100644 (file)
index 0000000..d4dc838
--- /dev/null
@@ -0,0 +1,167 @@
+
+Dynamic section .*
+#...
+ 0x00000003 \(PLTGOT\)                     0x10201000
+#...
+ 0x70000013 \(MIPS_GOTSYM\)                0x1f
+ 0x00000014 \(PLTREL\)                     REL
+ 0x00000017 \(JMPREL\)                     0x10004000
+ 0x00000002 \(PLTRELSZ\)                   224 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\)                0x10200000
+#...
+Relocation section '\.rel\.plt' .*
+ Offset     Info    Type            Sym\.Value  Sym\. Name
+10200008  [^ ]+ R_MIPS_JUMP_SLOT  10100020   f_lo_iu
+1020000c  [^ ]+ R_MIPS_JUMP_SLOT  10100030   f_lo_iu_du_dc
+10200010  [^ ]+ R_MIPS_JUMP_SLOT  10100040   f_lo_du_ic_dc
+10200014  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du_dc
+10200018  [^ ]+ R_MIPS_JUMP_SLOT  10100060   f_lo_iu_dc
+1020001c  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du_ic
+10200020  [^ ]+ R_MIPS_JUMP_SLOT  10100080   f_lo_du_ic
+10200024  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_dc
+10200028  [^ ]+ R_MIPS_JUMP_SLOT  101000a0   f_lo_iu_ic
+1020002c  [^ ]+ R_MIPS_JUMP_SLOT  101000b0   f_lo_ic
+10200030  [^ ]+ R_MIPS_JUMP_SLOT  101000c0   f_lo_du_dc
+10200034  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du
+10200038  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du_ic_dc
+1020003c  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du_ic
+10200040  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du_dc
+10200044  [^ ]+ R_MIPS_JUMP_SLOT  10100110   f_lo_dc
+10200048  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du
+1020004c  [^ ]+ R_MIPS_JUMP_SLOT  10100130   f_lo_iu_du
+10200050  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_dc
+10200054  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_ic_dc
+10200058  [^ ]+ R_MIPS_JUMP_SLOT  10100160   f_lo_du
+1020005c  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_ic_dc
+10200060  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du_ic_dc
+10200064  [^ ]+ R_MIPS_JUMP_SLOT  10100190   f_lo_iu_ic_dc
+10200068  [^ ]+ R_MIPS_JUMP_SLOT  101001a0   f_lo_iu_du_ic
+1020006c  [^ ]+ R_MIPS_JUMP_SLOT  101001b0   f_lo_iu_du_ic_dc
+10200070  [^ ]+ R_MIPS_JUMP_SLOT  101001c0   f_lo_ic_dc
+10200074  [^ ]+ R_MIPS_JUMP_SLOT  101001d0   f_lo
+
+Symbol table '\.dynsym' .*
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+# _lo symbols have their address taken, so their PLT symbols need to have
+# a nonzero value.  They must also have STO_MIPS_PLT in order to distinguish
+# them from old-style lazy-binding stubs.  Non-_lo symbols are only called,
+# so their PLT symbols should have a zero value and no STO_MIPS_PLT annotation.
+    .*: 10100020     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu
+    .*: 10100030     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_dc
+#...
+    .*: 10100040     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du_dc
+    .*: 10100060     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du_ic
+    .*: 10100080     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_dc
+    .*: 101000a0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic
+    .*: 101000b0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic
+    .*: 101000c0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du_ic_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du_ic
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du_dc
+    .*: 10100110     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du
+    .*: 10100130     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_ic_dc
+    .*: 10100160     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_ic_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du_ic_dc
+#...
+    .*: 10100190     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic_dc
+    .*: 101001a0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic
+    .*: 101001b0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic_dc
+    .*: 101001c0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic_dc
+    .*: 101001d0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo
+# The start of the GOT-mapped area.  This should only contain functions that
+# are accessed purely via the traditional psABI scheme.  The symbol value
+# is the address of the lazy-binding stub.
+    31: 10101019     0 FUNC    GLOBAL DEFAULT  UND f_iu_ic
+    32: 1010100d     0 FUNC    GLOBAL DEFAULT  UND f_ic
+    33: 10101001     0 FUNC    GLOBAL DEFAULT  UND f_iu
+
+Symbol table '\.symtab' .*
+#...
+Primary GOT:
+ Canonical gp value: 10208ff0
+
+ Reserved entries:
+   Address     Access  Initial Purpose
+  10201000 -32752\(gp\) 00000000 Lazy resolver
+  10201004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+# See the disassembly output for the meaning of each entry.
+ Local entries:
+   Address     Access  Initial
+  10201008 -32744\(gp\) 10100150
+  1020100c -32740\(gp\) 101000f0
+  10201010 -32736\(gp\) 101000e0
+  10201014 -32732\(gp\) 10100170
+  10201018 -32728\(gp\) 10100070
+  1020101c -32724\(gp\) 10100180
+  10201020 -32720\(gp\) 101000b0
+  10201024 -32716\(gp\) 101001c0
+  10201028 -32712\(gp\) 10100080
+  1020102c -32708\(gp\) 10100040
+  10201030 -32704\(gp\) 101000a0
+  10201034 -32700\(gp\) 10100190
+  10201038 -32696\(gp\) 101001a0
+  1020103c -32692\(gp\) 101001b0
+  10201040 -32688\(gp\) 10100090
+  10201044 -32684\(gp\) 10100120
+  10201048 -32680\(gp\) 10100100
+  1020104c -32676\(gp\) 10100020
+  10201050 -32672\(gp\) 10100060
+  10201054 -32668\(gp\) 10100130
+  10201058 -32664\(gp\) 10100030
+
+ Global entries:
+   Address     Access  Initial Sym\.Val\. Type    Ndx Name
+  1020105c -32660\(gp\) 10101019 10101019 FUNC    UND f_iu_ic
+  10201060 -32656\(gp\) 1010100d 1010100d FUNC    UND f_ic
+  10201064 -32652\(gp\) 10101001 10101001 FUNC    UND f_iu
+
+
+PLT GOT:
+
+ Reserved entries:
+   Address  Initial Purpose
+  10200000 00000000 PLT lazy resolver
+  10200004 00000000 Module pointer
+
+ Entries:
+   Address  Initial Sym\.Val\. Type    Ndx Name
+  10200008 10100000 10100020 FUNC    UND f_lo_iu
+  1020000c 10100000 10100030 FUNC    UND f_lo_iu_du_dc
+  10200010 10100000 10100040 FUNC    UND f_lo_du_ic_dc
+  10200014 10100000 00000000 FUNC    UND f_du_dc
+  10200018 10100000 10100060 FUNC    UND f_lo_iu_dc
+  1020001c 10100000 00000000 FUNC    UND f_iu_du_ic
+  10200020 10100000 10100080 FUNC    UND f_lo_du_ic
+  10200024 10100000 00000000 FUNC    UND f_iu_dc
+  10200028 10100000 101000a0 FUNC    UND f_lo_iu_ic
+  1020002c 10100000 101000b0 FUNC    UND f_lo_ic
+  10200030 10100000 101000c0 FUNC    UND f_lo_du_dc
+  10200034 10100000 00000000 FUNC    UND f_du
+  10200038 10100000 00000000 FUNC    UND f_du_ic_dc
+  1020003c 10100000 00000000 FUNC    UND f_du_ic
+  10200040 10100000 00000000 FUNC    UND f_iu_du_dc
+  10200044 10100000 10100110 FUNC    UND f_lo_dc
+  10200048 10100000 00000000 FUNC    UND f_iu_du
+  1020004c 10100000 10100130 FUNC    UND f_lo_iu_du
+  10200050 10100000 00000000 FUNC    UND f_dc
+  10200054 10100000 00000000 FUNC    UND f_ic_dc
+  10200058 10100000 10100160 FUNC    UND f_lo_du
+  1020005c 10100000 00000000 FUNC    UND f_iu_ic_dc
+  10200060 10100000 00000000 FUNC    UND f_iu_du_ic_dc
+  10200064 10100000 10100190 FUNC    UND f_lo_iu_ic_dc
+  10200068 10100000 101001a0 FUNC    UND f_lo_iu_du_ic
+  1020006c 10100000 101001b0 FUNC    UND f_lo_iu_du_ic_dc
+  10200070 10100000 101001c0 FUNC    UND f_lo_ic_dc
+  10200074 10100000 101001d0 FUNC    UND f_lo
+
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-got.od b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-got.od
new file mode 100644 (file)
index 0000000..c48ef7f
--- /dev/null
@@ -0,0 +1,557 @@
+
+.* file format .*
+
+
+Disassembly of section \.plt:
+
+# Only _dc (direct call from compressed code) functions should have a
+# MIPS16 PLT.  Note that indirect calls do not influence the choice,
+# so f_ic and f_lo_ic have MIPS rather than MIPS16 PLTs.
+10100000 <_PROCEDURE_LINKAGE_TABLE_>:
+.*:    3c1c1020        lui     \$28,0x1020
+.*:    8f990000        lw      \$25,0\(\$28\)
+.*:    279c0000        addiu   \$28,\$28,0
+.*:    031cc023        subu    \$24,\$24,\$28
+.*:    03e07821        move    \$15,\$31
+.*:    0018c082        srl     \$24,\$24,0x2
+.*:    0320f809        jalr    \$25
+.*:    2718fffe        addiu   \$24,\$24,-2
+
+10100020 <f_lo_iu@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90008        lw      \$25,8\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80008        addiu   \$24,\$15,8
+
+10100030 <f_lo_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9000c        lw      \$25,12\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8000c        addiu   \$24,\$15,12
+
+10100040 <f_lo_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90010        lw      \$25,16\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80010        addiu   \$24,\$15,16
+
+10100050 <f_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90014        lw      \$25,20\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80014        addiu   \$24,\$15,20
+
+10100060 <f_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9001c        lw      \$25,28\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8001c        addiu   \$24,\$15,28
+
+10100070 <f_lo_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90020        lw      \$25,32\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80020        addiu   \$24,\$15,32
+
+10100080 <f_lo_iu_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90028        lw      \$25,40\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80028        addiu   \$24,\$15,40
+
+10100090 <f_lo_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9002c        lw      \$25,44\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8002c        addiu   \$24,\$15,44
+
+101000a0 <f_lo_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90030        lw      \$25,48\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80030        addiu   \$24,\$15,48
+
+101000b0 <f_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90034        lw      \$25,52\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80034        addiu   \$24,\$15,52
+
+101000c0 <f_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90038        lw      \$25,56\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80038        addiu   \$24,\$15,56
+
+101000d0 <f_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9003c        lw      \$25,60\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8003c        addiu   \$24,\$15,60
+
+101000e0 <f_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90040        lw      \$25,64\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80040        addiu   \$24,\$15,64
+
+101000f0 <f_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90048        lw      \$25,72\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80048        addiu   \$24,\$15,72
+
+10100100 <f_lo_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9004c        lw      \$25,76\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8004c        addiu   \$24,\$15,76
+
+10100110 <f_lo_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90058        lw      \$25,88\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80058        addiu   \$24,\$15,88
+
+10100120 <f_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90060        lw      \$25,96\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80060        addiu   \$24,\$15,96
+
+10100130 <f_lo_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90068        lw      \$25,104\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80068        addiu   \$24,\$15,104
+
+10100140 <f_lo_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9006c        lw      \$25,108\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8006c        addiu   \$24,\$15,108
+
+10100150 <f_lo@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90074        lw      \$25,116\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80074        addiu   \$24,\$15,116
+
+10100160 <f_lo_iu_du_dc@mips16plt>:
+.*:    b203            lw      \$2,1010016c <f_lo_iu_du_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x1020000c
+
+10100170 <f_lo_du_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010017c <f_lo_du_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200010
+
+10100180 <f_du_dc@mips16plt>:
+.*:    b203            lw      \$2,1010018c <f_du_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200014
+
+10100190 <f_lo_iu_dc@mips16plt>:
+.*:    b203            lw      \$2,1010019c <f_lo_iu_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200018
+
+101001a0 <f_iu_dc@mips16plt>:
+.*:    b203            lw      \$2,101001ac <f_iu_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200024
+
+101001b0 <f_lo_du_dc@mips16plt>:
+.*:    b203            lw      \$2,101001bc <f_lo_du_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200030
+
+101001c0 <f_du_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,101001cc <f_du_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200038
+
+101001d0 <f_iu_du_dc@mips16plt>:
+.*:    b203            lw      \$2,101001dc <f_iu_du_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200040
+
+101001e0 <f_lo_dc@mips16plt>:
+.*:    b203            lw      \$2,101001ec <f_lo_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200044
+
+101001f0 <f_dc@mips16plt>:
+.*:    b203            lw      \$2,101001fc <f_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200050
+
+10100200 <f_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010020c <f_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200054
+
+10100210 <f_iu_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010021c <f_iu_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x1020005c
+
+10100220 <f_iu_du_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010022c <f_iu_du_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200060
+
+10100230 <f_lo_iu_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010023c <f_lo_iu_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200064
+
+10100240 <f_lo_iu_du_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010024c <f_lo_iu_du_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x1020006c
+
+10100250 <f_lo_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010025c <f_lo_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200070
+
+Disassembly of section \.text\.a:
+
+10101000 <testc>:
+.*:    .... ....       jal     [0-9a-f]+ <f_dc@mips16plt>
+.*:    6500            nop
+.*:    f090 9b4c       lw      \$2,-32628\(\$3\)
+#                                  ^ global GOT entry for f_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f010 9b58       lw      \$2,-32744\(\$3\)
+#                                  ^ local GOT entry for f_ic_dc@mips16plt
+.*:    .... ....       jal     [0-9a-f]+ <f_du_dc@mips16plt>
+.*:    6500            nop
+.*:    f010 9b5c       lw      \$2,-32740\(\$3\)
+#                                  ^ local GOT entry for f_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_du_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b40       lw      \$2,-32736\(\$3\)
+#                                  ^ local GOT entry for f_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_dc@mips16plt>
+.*:    6500            nop
+.*:    f090 9b48       lw      \$2,-32632\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b44       lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@mips16plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_du_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b48       lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_du_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b4c       lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b50       lw      \$2,-32720\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b54       lw      \$2,-32716\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic_dc@mips16plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_du_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b58       lw      \$2,-32712\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_du_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b5c       lw      \$2,-32708\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_dc@mips16plt>
+.*:    6500            nop
+.*:    f050 9b40       lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f050 9b44       lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@mips16plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_du_dc@mips16plt>
+.*:    6500            nop
+.*:    f050 9b48       lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f050 9b4c       lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    e820            jr      \$31
+
+Disassembly of section \.text\.b:
+
+10102000 <testu>:
+.*:    ........        jal     [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c628090        lw      \$2,-32624\(\$3\)
+#                                  ^ global GOT entry for f_iu
+.*:    8c628050        lw      \$2,-32688\(\$3\)
+#                                  ^ local GOT entry for f_iu_dc@mips16plt
+.*:    8c628088        lw      \$2,-32632\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    8c628024        lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@mips16plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628054        lw      \$2,-32684\(\$3\)
+#                                  ^ local GOT entry for f_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628058        lw      \$2,-32680\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628028        lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62802c        lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62805c        lw      \$2,-32676\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu@plt
+.*:    8c628060        lw      \$2,-32672\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_dc@mips16plt
+.*:    8c628040        lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@plt
+.*:    8c628044        lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@mips16plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628064        lw      \$2,-32668\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628068        lw      \$2,-32664\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628048        lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62804c        lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    03e00008        jr      \$31
+
+Disassembly of section \.text\.c:
+
+10103000 <testlo>:
+.*:    24020150        li      \$2,336
+#                                  ^ low 16 bits of f_lo@plt
+.*:    240201e1        li      \$2,481
+#                                  ^ low 16 bits of f_lo_dc@mips16plt
+.*:    24020090        li      \$2,144
+#                                  ^ low 16 bits of f_lo_ic@plt
+.*:    24020251        li      \$2,593
+#                                  ^ low 16 bits of f_lo_ic_dc@mips16plt
+.*:    24020110        li      \$2,272
+#                                  ^ low 16 bits of f_lo_du@plt
+.*:    240200a0        li      \$2,160
+#                                  ^ low 16 bits of f_lo_du_dc@plt
+.*:    24020070        li      \$2,112
+#                                  ^ low 16 bits of f_lo_du_ic@plt
+.*:    24020040        li      \$2,64
+#                                  ^ low 16 bits of f_lo_du_ic_dc@plt
+.*:    24020020        li      \$2,32
+#                                  ^ low 16 bits of f_lo_iu@plt
+.*:    24020191        li      \$2,401
+#                                  ^ low 16 bits of f_lo_iu_dc@mips16plt
+.*:    24020080        li      \$2,128
+#                                  ^ low 16 bits of f_lo_iu_ic@plt
+.*:    24020231        li      \$2,561
+#                                  ^ low 16 bits of f_lo_iu_ic_dc@mips16plt
+.*:    24020100        li      \$2,256
+#                                  ^ low 16 bits of f_lo_iu_du@plt
+.*:    24020030        li      \$2,48
+#                                  ^ low 16 bits of f_lo_iu_du_dc@plt
+.*:    24020130        li      \$2,304
+#                                  ^ low 16 bits of f_lo_iu_du_ic@plt
+.*:    24020140        li      \$2,320
+#                                  ^ low 16 bits of f_lo_iu_du_ic_dc@plt
+
+Disassembly of section \.text\.d:
+
+10104000 <testgot>:
+.*:    8f828094        lw      \$2,-32620\(\$28\)
+#                                  ^ global GOT entry for f
+.*:    8f82806c        lw      \$2,-32660\(\$28\)
+#                                  ^ local GOT entry for f_dc@mips16plt
+.*:    8f82808c        lw      \$2,-32628\(\$28\)
+#                                  ^ global GOT entry for f_ic
+.*:    8f828018        lw      \$2,-32744\(\$28\)
+#                                  ^ local GOT entry for f_ic_dc@mips16plt
+.*:    8f828070        lw      \$2,-32656\(\$28\)
+#                                  ^ local GOT entry for f_du@plt
+.*:    8f828074        lw      \$2,-32652\(\$28\)
+#                                  ^ local GOT entry for f_du_dc@plt
+.*:    8f82801c        lw      \$2,-32740\(\$28\)
+#                                  ^ local GOT entry for f_du_ic@plt
+.*:    8f828020        lw      \$2,-32736\(\$28\)
+#                                  ^ local GOT entry for f_du_ic_dc@plt
+.*:    8f828090        lw      \$2,-32624\(\$28\)
+#                                  ^ global GOT entry for f_iu
+.*:    8f828050        lw      \$2,-32688\(\$28\)
+#                                  ^ local GOT entry for f_iu_dc@mips16plt
+.*:    8f828088        lw      \$2,-32632\(\$28\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    8f828024        lw      \$2,-32732\(\$28\)
+#                                  ^ local GOT entry for f_iu_ic_dc@mips16plt
+.*:    8f828054        lw      \$2,-32684\(\$28\)
+#                                  ^ local GOT entry for f_iu_du@plt
+.*:    8f828058        lw      \$2,-32680\(\$28\)
+#                                  ^ local GOT entry for f_iu_du_dc@plt
+.*:    8f828028        lw      \$2,-32728\(\$28\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    8f82802c        lw      \$2,-32724\(\$28\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    8f828078        lw      \$2,-32648\(\$28\)
+#                                  ^ local GOT entry for f_lo@plt
+.*:    8f82807c        lw      \$2,-32644\(\$28\)
+#                                  ^ local GOT entry for f_lo_dc@mips16plt
+.*:    8f828030        lw      \$2,-32720\(\$28\)
+#                                  ^ local GOT entry for f_lo_ic@plt
+.*:    8f828034        lw      \$2,-32716\(\$28\)
+#                                  ^ local GOT entry for f_lo_ic_dc@mips16plt
+.*:    8f828080        lw      \$2,-32640\(\$28\)
+#                                  ^ local GOT entry for f_lo_du@plt
+.*:    8f828084        lw      \$2,-32636\(\$28\)
+#                                  ^ local GOT entry for f_lo_du_dc@plt
+.*:    8f828038        lw      \$2,-32712\(\$28\)
+#                                  ^ local GOT entry for f_lo_du_ic@plt
+.*:    8f82803c        lw      \$2,-32708\(\$28\)
+#                                  ^ local GOT entry for f_lo_du_ic_dc@plt
+.*:    8f82805c        lw      \$2,-32676\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu@plt
+.*:    8f828060        lw      \$2,-32672\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_dc@mips16plt
+.*:    8f828040        lw      \$2,-32704\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_ic@plt
+.*:    8f828044        lw      \$2,-32700\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@mips16plt
+.*:    8f828064        lw      \$2,-32668\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_du@plt
+.*:    8f828068        lw      \$2,-32664\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_du_dc@plt
+.*:    8f828048        lw      \$2,-32696\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    8f82804c        lw      \$2,-32692\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-got.rd b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-got.rd
new file mode 100644 (file)
index 0000000..db623b7
--- /dev/null
@@ -0,0 +1,179 @@
+
+Dynamic section .*
+#...
+ 0x00000003 \(PLTGOT\)                     0x10201000
+#...
+ 0x70000013 \(MIPS_GOTSYM\)                0x1f
+ 0x00000014 \(PLTREL\)                     REL
+ 0x00000017 \(JMPREL\)                     0x10004000
+ 0x00000002 \(PLTRELSZ\)                   224 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\)                0x10200000
+#...
+Relocation section '\.rel\.plt' .*
+ Offset     Info    Type            Sym\.Value  Sym\. Name
+10200008  [^ ]+ R_MIPS_JUMP_SLOT  10100020   f_lo_iu
+1020000c  [^ ]+ R_MIPS_JUMP_SLOT  10100030   f_lo_iu_du_dc
+10200010  [^ ]+ R_MIPS_JUMP_SLOT  10100040   f_lo_du_ic_dc
+10200014  [^ ]+ R_MIPS_JUMP_SLOT  10100050   f_du_dc
+10200018  [^ ]+ R_MIPS_JUMP_SLOT  10100191   f_lo_iu_dc
+1020001c  [^ ]+ R_MIPS_JUMP_SLOT  10100060   f_iu_du_ic
+10200020  [^ ]+ R_MIPS_JUMP_SLOT  10100070   f_lo_du_ic
+10200024  [^ ]+ R_MIPS_JUMP_SLOT  101001a1   f_iu_dc
+10200028  [^ ]+ R_MIPS_JUMP_SLOT  10100080   f_lo_iu_ic
+1020002c  [^ ]+ R_MIPS_JUMP_SLOT  10100090   f_lo_ic
+10200030  [^ ]+ R_MIPS_JUMP_SLOT  101000a0   f_lo_du_dc
+10200034  [^ ]+ R_MIPS_JUMP_SLOT  101000b0   f_du
+10200038  [^ ]+ R_MIPS_JUMP_SLOT  101000c0   f_du_ic_dc
+1020003c  [^ ]+ R_MIPS_JUMP_SLOT  101000d0   f_du_ic
+10200040  [^ ]+ R_MIPS_JUMP_SLOT  101000e0   f_iu_du_dc
+10200044  [^ ]+ R_MIPS_JUMP_SLOT  101001e1   f_lo_dc
+10200048  [^ ]+ R_MIPS_JUMP_SLOT  101000f0   f_iu_du
+1020004c  [^ ]+ R_MIPS_JUMP_SLOT  10100100   f_lo_iu_du
+10200050  [^ ]+ R_MIPS_JUMP_SLOT  101001f1   f_dc
+10200054  [^ ]+ R_MIPS_JUMP_SLOT  10100201   f_ic_dc
+10200058  [^ ]+ R_MIPS_JUMP_SLOT  10100110   f_lo_du
+1020005c  [^ ]+ R_MIPS_JUMP_SLOT  10100211   f_iu_ic_dc
+10200060  [^ ]+ R_MIPS_JUMP_SLOT  10100120   f_iu_du_ic_dc
+10200064  [^ ]+ R_MIPS_JUMP_SLOT  10100231   f_lo_iu_ic_dc
+10200068  [^ ]+ R_MIPS_JUMP_SLOT  10100130   f_lo_iu_du_ic
+1020006c  [^ ]+ R_MIPS_JUMP_SLOT  10100140   f_lo_iu_du_ic_dc
+10200070  [^ ]+ R_MIPS_JUMP_SLOT  10100251   f_lo_ic_dc
+10200074  [^ ]+ R_MIPS_JUMP_SLOT  10100150   f_lo
+
+Symbol table '\.dynsym' .*
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+# All symbols have their address taken, so PLT symbols need to have a nonzero
+# value.  They must also have STO_MIPS_PLT in order to distinguish them from
+# old-style lazy-binding stubs).
+#
+# A MIPS16 PLT should only be used as the symbol value if the function has
+# a direct MIPS16 caller (dc) and no direct MIPS caller (du).
+    .*: 10100020     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu
+    .*: 10100030     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_dc
+#...
+    .*: 10100040     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic_dc
+    .*: 10100050     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du_dc
+    .*: 10100191     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_dc
+    .*: 10100060     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du_ic
+    .*: 10100070     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic
+    .*: 101001a1     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_dc
+    .*: 10100080     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic
+    .*: 10100090     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic
+    .*: 101000a0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_dc
+    .*: 101000b0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du
+    .*: 101000c0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du_ic_dc
+    .*: 101000d0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du_ic
+    .*: 101000e0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du_dc
+    .*: 101001e1     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_dc
+    .*: 101000f0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du
+    .*: 10100100     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du
+    .*: 101001f1     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_dc
+    .*: 10100201     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_ic_dc
+    .*: 10100110     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du
+    .*: 10100211     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_ic_dc
+    .*: 10100120     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du_ic_dc
+#...
+    .*: 10100231     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic_dc
+    .*: 10100130     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic
+    .*: 10100140     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic_dc
+    .*: 10100251     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic_dc
+    .*: 10100150     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo
+# The start of the GOT-mapped area.  This should only contain functions that
+# are accessed purely via the traditional psABI scheme.  Since the functions
+# have their addresses taken, they cannot use a lazy-binding stub.
+# The symbol values are therefore all zero.
+    31: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_ic
+    32: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_ic
+    33: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu
+    34: 00000000     0 FUNC    GLOBAL DEFAULT  UND f
+
+Symbol table '\.symtab' .*
+#...
+Primary GOT:
+ Canonical gp value: 10208ff0
+
+ Reserved entries:
+   Address     Access  Initial Purpose
+  10201000 -32752\(gp\) 00000000 Lazy resolver
+  10201004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+# See the disassembly output for the meaning of each entry.
+ Local entries:
+   Address     Access  Initial
+  10201008 -32744\(gp\) 10100201
+  1020100c -32740\(gp\) 101000d0
+  10201010 -32736\(gp\) 101000c0
+  10201014 -32732\(gp\) 10100211
+  10201018 -32728\(gp\) 10100060
+  1020101c -32724\(gp\) 10100120
+  10201020 -32720\(gp\) 10100090
+  10201024 -32716\(gp\) 10100251
+  10201028 -32712\(gp\) 10100070
+  1020102c -32708\(gp\) 10100040
+  10201030 -32704\(gp\) 10100080
+  10201034 -32700\(gp\) 10100231
+  10201038 -32696\(gp\) 10100130
+  1020103c -32692\(gp\) 10100140
+  10201040 -32688\(gp\) 101001a1
+  10201044 -32684\(gp\) 101000f0
+  10201048 -32680\(gp\) 101000e0
+  1020104c -32676\(gp\) 10100020
+  10201050 -32672\(gp\) 10100191
+  10201054 -32668\(gp\) 10100100
+  10201058 -32664\(gp\) 10100030
+  1020105c -32660\(gp\) 101001f1
+  10201060 -32656\(gp\) 101000b0
+  10201064 -32652\(gp\) 10100050
+  10201068 -32648\(gp\) 10100150
+  1020106c -32644\(gp\) 101001e1
+  10201070 -32640\(gp\) 10100110
+  10201074 -32636\(gp\) 101000a0
+
+ Global entries:
+   Address     Access  Initial Sym\.Val\. Type    Ndx Name
+  10201078 -32632\(gp\) 00000000 00000000 FUNC    UND f_iu_ic
+  1020107c -32628\(gp\) 00000000 00000000 FUNC    UND f_ic
+  10201080 -32624\(gp\) 00000000 00000000 FUNC    UND f_iu
+  10201084 -32620\(gp\) 00000000 00000000 FUNC    UND f
+
+
+PLT GOT:
+
+ Reserved entries:
+   Address  Initial Purpose
+  10200000 00000000 PLT lazy resolver
+  10200004 00000000 Module pointer
+
+ Entries:
+   Address  Initial Sym\.Val\. Type    Ndx Name
+  10200008 10100000 10100020 FUNC    UND f_lo_iu
+  1020000c 10100000 10100030 FUNC    UND f_lo_iu_du_dc
+  10200010 10100000 10100040 FUNC    UND f_lo_du_ic_dc
+  10200014 10100000 10100050 FUNC    UND f_du_dc
+  10200018 10100000 10100191 FUNC    UND f_lo_iu_dc
+  1020001c 10100000 10100060 FUNC    UND f_iu_du_ic
+  10200020 10100000 10100070 FUNC    UND f_lo_du_ic
+  10200024 10100000 101001a1 FUNC    UND f_iu_dc
+  10200028 10100000 10100080 FUNC    UND f_lo_iu_ic
+  1020002c 10100000 10100090 FUNC    UND f_lo_ic
+  10200030 10100000 101000a0 FUNC    UND f_lo_du_dc
+  10200034 10100000 101000b0 FUNC    UND f_du
+  10200038 10100000 101000c0 FUNC    UND f_du_ic_dc
+  1020003c 10100000 101000d0 FUNC    UND f_du_ic
+  10200040 10100000 101000e0 FUNC    UND f_iu_du_dc
+  10200044 10100000 101001e1 FUNC    UND f_lo_dc
+  10200048 10100000 101000f0 FUNC    UND f_iu_du
+  1020004c 10100000 10100100 FUNC    UND f_lo_iu_du
+  10200050 10100000 101001f1 FUNC    UND f_dc
+  10200054 10100000 10100201 FUNC    UND f_ic_dc
+  10200058 10100000 10100110 FUNC    UND f_lo_du
+  1020005c 10100000 10100211 FUNC    UND f_iu_ic_dc
+  10200060 10100000 10100120 FUNC    UND f_iu_du_ic_dc
+  10200064 10100000 10100231 FUNC    UND f_lo_iu_ic_dc
+  10200068 10100000 10100130 FUNC    UND f_lo_iu_du_ic
+  1020006c 10100000 10100140 FUNC    UND f_lo_iu_du_ic_dc
+  10200070 10100000 10100251 FUNC    UND f_lo_ic_dc
+  10200074 10100000 10100150 FUNC    UND f_lo
+
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-only.od b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-only.od
new file mode 100644 (file)
index 0000000..e76ca4f
--- /dev/null
@@ -0,0 +1,110 @@
+
+.* file format .*
+
+
+Disassembly of section \.plt:
+
+# Only _dc (direct call from compressed code) functions should have a
+# MIPS16 PLT.  Note that indirect calls do not influence the choice,
+# so f_ic and f_lo_ic have MIPS rather than MIPS16 PLTs.
+10100000 <_PROCEDURE_LINKAGE_TABLE_>:
+.*:    3c1c1020        lui     \$28,0x1020
+.*:    8f990000        lw      \$25,0\(\$28\)
+.*:    279c0000        addiu   \$28,\$28,0
+.*:    031cc023        subu    \$24,\$24,\$28
+.*:    03e07821        move    \$15,\$31
+.*:    0018c082        srl     \$24,\$24,0x2
+.*:    0320f809        jalr    \$25
+.*:    2718fffe        addiu   \$24,\$24,-2
+
+10100020 <f_lo_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90008        lw      \$25,8\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80008        addiu   \$24,\$15,8
+
+10100030 <f_lo@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9001c        lw      \$25,28\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8001c        addiu   \$24,\$15,28
+
+10100040 <f_lo_dc@mips16plt>:
+.*:    b203            lw      \$2,1010004c <f_lo_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x1020000c
+
+10100050 <f_dc@mips16plt>:
+.*:    b203            lw      \$2,1010005c <f_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200010
+
+10100060 <f_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010006c <f_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200014
+
+10100070 <f_lo_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010007c <f_lo_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200018
+
+Disassembly of section \.MIPS\.stubs:
+
+10101000 <_MIPS_STUBS_>:
+# Lazy-binding stub for f_ic.
+.*:    8f998010        lw      \$25,-32752\(\$28\)
+.*:    03e07821        move    \$15,\$31
+.*:    0320f809        jalr    \$25
+.*:    24180009        li      \$24,9
+       \.\.\.
+
+Disassembly of section \.text\.a:
+
+10102000 <testc>:
+.*:    .... ....       jal     [0-9a-f]+ <f_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b44       lw      \$2,-32732\(\$3\)
+#                                  ^ global GOT entry for f_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f010 9b58       lw      \$2,-32744\(\$3\)
+#                                  ^ local GOT entry for f_ic_dc@mips16plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_dc@mips16plt>
+.*:    6500            nop
+.*:    f010 9b5c       lw      \$2,-32740\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b40       lw      \$2,-32736\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic_dc@mips16plt
+.*:    e820            jr      \$31
+
+Disassembly of section \.text\.c:
+
+10103000 <testlo>:
+.*:    24020030        li      \$2,48
+#                                  ^ low 16 bits of f_lo@plt
+.*:    24020041        li      \$2,65
+#                                  ^ low 16 bits of f_lo_dc@mips16plt
+.*:    24020020        li      \$2,32
+#                                  ^ low 16 bits of f_lo_ic@plt
+.*:    24020071        li      \$2,113
+#                                  ^ low 16 bits of f_lo_ic_dc@mips16plt
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-only.rd b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-only.rd
new file mode 100644 (file)
index 0000000..a5d61be
--- /dev/null
@@ -0,0 +1,82 @@
+
+Dynamic section .*
+#...
+ 0x00000003 \(PLTGOT\)                     0x10201000
+#...
+ 0x70000013 \(MIPS_GOTSYM\)                0x9
+ 0x00000014 \(PLTREL\)                     REL
+ 0x00000017 \(JMPREL\)                     0x10004000
+ 0x00000002 \(PLTRELSZ\)                   48 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\)                0x10200000
+#...
+Relocation section '\.rel\.plt' .*
+ Offset     Info    Type            Sym\.Value  Sym\. Name
+10200008  [^ ]+ R_MIPS_JUMP_SLOT  10100020   f_lo_ic
+1020000c  [^ ]+ R_MIPS_JUMP_SLOT  10100041   f_lo_dc
+10200010  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_dc
+10200014  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_ic_dc
+10200018  [^ ]+ R_MIPS_JUMP_SLOT  10100071   f_lo_ic_dc
+1020001c  [^ ]+ R_MIPS_JUMP_SLOT  10100030   f_lo
+
+Symbol table '\.dynsym' .*
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+# _lo symbols have their address taken, so their PLT symbols need to have
+# a nonzero value.  They must also have STO_MIPS_PLT in order to distinguish
+# them from old-style lazy-binding stubs.  Non-_lo symbols are only called,
+# so their PLT symbols should have a zero value and no STO_MIPS_PLT annotation.
+#
+# A MIPS16 PLT should only be used as the symbol value if the function has
+# a direct MIPS16 caller (dc) and no direct MIPS caller (du).
+#...
+    .*: 10100020     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic
+    .*: 10100041     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_ic_dc
+#...
+    .*: 10100071     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic_dc
+    .*: 10100030     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo
+# The start of the GOT-mapped area.  This should only contain functions that
+# are accessed purely via the traditional psABI scheme.  The symbol value
+# is the address of the lazy-binding stub.
+     9: 10101000     0 FUNC    GLOBAL DEFAULT  UND f_ic
+
+Symbol table '\.symtab' .*
+#...
+Primary GOT:
+ Canonical gp value: 10208ff0
+
+ Reserved entries:
+   Address     Access  Initial Purpose
+  10201000 -32752\(gp\) 00000000 Lazy resolver
+  10201004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+# See the disassembly output for the meaning of each entry.
+ Local entries:
+   Address     Access  Initial
+  10201008 -32744\(gp\) 10100061
+  1020100c -32740\(gp\) 10100020
+  10201010 -32736\(gp\) 10100071
+
+ Global entries:
+   Address     Access  Initial Sym\.Val\. Type    Ndx Name
+  10201014 -32732\(gp\) 10101000 10101000 FUNC    UND f_ic
+
+
+PLT GOT:
+
+ Reserved entries:
+   Address  Initial Purpose
+  10200000 00000000 PLT lazy resolver
+  10200004 00000000 Module pointer
+
+ Entries:
+   Address  Initial Sym\.Val\. Type    Ndx Name
+  10200008 10100000 10100020 FUNC    UND f_lo_ic
+  1020000c 10100000 10100041 FUNC    UND f_lo_dc
+  10200010 10100000 00000000 FUNC    UND f_dc
+  10200014 10100000 00000000 FUNC    UND f_ic_dc
+  10200018 10100000 10100071 FUNC    UND f_lo_ic_dc
+  1020001c 10100000 10100030 FUNC    UND f_lo
+
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-word.od b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-word.od
new file mode 100644 (file)
index 0000000..7fc547b
--- /dev/null
@@ -0,0 +1,489 @@
+
+.* file format .*
+
+
+Disassembly of section \.plt:
+
+# Only _dc (direct call from compressed code) functions should have a
+# MIPS16 PLT.  Note that indirect calls do not influence the choice,
+# so f_ic and f_lo_ic have MIPS rather than MIPS16 PLTs.
+10100000 <_PROCEDURE_LINKAGE_TABLE_>:
+.*:    3c1c1020        lui     \$28,0x1020
+.*:    8f990000        lw      \$25,0\(\$28\)
+.*:    279c0000        addiu   \$28,\$28,0
+.*:    031cc023        subu    \$24,\$24,\$28
+.*:    03e07821        move    \$15,\$31
+.*:    0018c082        srl     \$24,\$24,0x2
+.*:    0320f809        jalr    \$25
+.*:    2718fffe        addiu   \$24,\$24,-2
+
+10100020 <f_lo_iu@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90008        lw      \$25,8\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80008        addiu   \$24,\$15,8
+
+10100030 <f_lo_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9000c        lw      \$25,12\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8000c        addiu   \$24,\$15,12
+
+10100040 <f_lo_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90010        lw      \$25,16\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80010        addiu   \$24,\$15,16
+
+10100050 <f_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90014        lw      \$25,20\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80014        addiu   \$24,\$15,20
+
+10100060 <f_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9001c        lw      \$25,28\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8001c        addiu   \$24,\$15,28
+
+10100070 <f_lo_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90020        lw      \$25,32\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80020        addiu   \$24,\$15,32
+
+10100080 <f_lo_iu_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90028        lw      \$25,40\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80028        addiu   \$24,\$15,40
+
+10100090 <f_lo_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9002c        lw      \$25,44\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8002c        addiu   \$24,\$15,44
+
+101000a0 <f_lo_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90030        lw      \$25,48\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80030        addiu   \$24,\$15,48
+
+101000b0 <f_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90034        lw      \$25,52\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80034        addiu   \$24,\$15,52
+
+101000c0 <f_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90038        lw      \$25,56\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80038        addiu   \$24,\$15,56
+
+101000d0 <f_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9003c        lw      \$25,60\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8003c        addiu   \$24,\$15,60
+
+101000e0 <f_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90040        lw      \$25,64\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80040        addiu   \$24,\$15,64
+
+101000f0 <f_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90048        lw      \$25,72\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80048        addiu   \$24,\$15,72
+
+10100100 <f_lo_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9004c        lw      \$25,76\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8004c        addiu   \$24,\$15,76
+
+10100110 <f_lo_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90058        lw      \$25,88\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80058        addiu   \$24,\$15,88
+
+10100120 <f_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90060        lw      \$25,96\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80060        addiu   \$24,\$15,96
+
+10100130 <f_lo_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90068        lw      \$25,104\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80068        addiu   \$24,\$15,104
+
+10100140 <f_lo_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9006c        lw      \$25,108\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8006c        addiu   \$24,\$15,108
+
+10100150 <f_lo@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90074        lw      \$25,116\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80074        addiu   \$24,\$15,116
+
+10100160 <f_lo_iu_du_dc@mips16plt>:
+.*:    b203            lw      \$2,1010016c <f_lo_iu_du_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x1020000c
+
+10100170 <f_lo_du_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010017c <f_lo_du_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200010
+
+10100180 <f_du_dc@mips16plt>:
+.*:    b203            lw      \$2,1010018c <f_du_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200014
+
+10100190 <f_lo_iu_dc@mips16plt>:
+.*:    b203            lw      \$2,1010019c <f_lo_iu_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200018
+
+101001a0 <f_iu_dc@mips16plt>:
+.*:    b203            lw      \$2,101001ac <f_iu_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200024
+
+101001b0 <f_lo_du_dc@mips16plt>:
+.*:    b203            lw      \$2,101001bc <f_lo_du_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200030
+
+101001c0 <f_du_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,101001cc <f_du_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200038
+
+101001d0 <f_iu_du_dc@mips16plt>:
+.*:    b203            lw      \$2,101001dc <f_iu_du_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200040
+
+101001e0 <f_lo_dc@mips16plt>:
+.*:    b203            lw      \$2,101001ec <f_lo_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200044
+
+101001f0 <f_dc@mips16plt>:
+.*:    b203            lw      \$2,101001fc <f_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200050
+
+10100200 <f_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010020c <f_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200054
+
+10100210 <f_iu_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010021c <f_iu_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x1020005c
+
+10100220 <f_iu_du_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010022c <f_iu_du_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200060
+
+10100230 <f_lo_iu_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010023c <f_lo_iu_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200064
+
+10100240 <f_lo_iu_du_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010024c <f_lo_iu_du_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x1020006c
+
+10100250 <f_lo_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010025c <f_lo_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200070
+
+Disassembly of section \.text\.a:
+
+10101000 <testc>:
+.*:    .... ....       jal     [0-9a-f]+ <f_dc@mips16plt>
+.*:    6500            nop
+.*:    f070 9b50       lw      \$2,-32656\(\$3\)
+#                                  ^ global GOT entry for f_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f010 9b58       lw      \$2,-32744\(\$3\)
+#                                  ^ local GOT entry for f_ic_dc@mips16plt
+.*:    .... ....       jal     [0-9a-f]+ <f_du_dc@mips16plt>
+.*:    6500            nop
+.*:    f010 9b5c       lw      \$2,-32740\(\$3\)
+#                                  ^ local GOT entry for f_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_du_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b40       lw      \$2,-32736\(\$3\)
+#                                  ^ local GOT entry for f_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_dc@mips16plt>
+.*:    6500            nop
+.*:    f070 9b4c       lw      \$2,-32660\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b44       lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@mips16plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_du_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b48       lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_du_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b4c       lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b50       lw      \$2,-32720\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b54       lw      \$2,-32716\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic_dc@mips16plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_du_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b58       lw      \$2,-32712\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_du_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b5c       lw      \$2,-32708\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_dc@mips16plt>
+.*:    6500            nop
+.*:    f050 9b40       lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f050 9b44       lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@mips16plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_du_dc@mips16plt>
+.*:    6500            nop
+.*:    f050 9b48       lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f050 9b4c       lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    e820            jr      \$31
+
+Disassembly of section \.text\.b:
+
+10102000 <testu>:
+.*:    ........        jal     [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c628074        lw      \$2,-32652\(\$3\)
+#                                  ^ global GOT entry for f_iu
+.*:    8c628050        lw      \$2,-32688\(\$3\)
+#                                  ^ local GOT entry for f_iu_dc@mips16plt
+.*:    8c62806c        lw      \$2,-32660\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    8c628024        lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@mips16plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628054        lw      \$2,-32684\(\$3\)
+#                                  ^ local GOT entry for f_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628058        lw      \$2,-32680\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628028        lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62802c        lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62805c        lw      \$2,-32676\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu@plt
+.*:    8c628060        lw      \$2,-32672\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_dc@mips16plt
+.*:    8c628040        lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@plt
+.*:    8c628044        lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@mips16plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628064        lw      \$2,-32668\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628068        lw      \$2,-32664\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628048        lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62804c        lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    03e00008        jr      \$31
+
+Disassembly of section \.text\.c:
+
+10103000 <testlo>:
+.*:    24020150        li      \$2,336
+#                                  ^ low 16 bits of f_lo@plt
+.*:    240201e1        li      \$2,481
+#                                  ^ low 16 bits of f_lo_dc@mips16plt
+.*:    24020090        li      \$2,144
+#                                  ^ low 16 bits of f_lo_ic@plt
+.*:    24020251        li      \$2,593
+#                                  ^ low 16 bits of f_lo_ic_dc@mips16plt
+.*:    24020110        li      \$2,272
+#                                  ^ low 16 bits of f_lo_du@plt
+.*:    240200a0        li      \$2,160
+#                                  ^ low 16 bits of f_lo_du_dc@plt
+.*:    24020070        li      \$2,112
+#                                  ^ low 16 bits of f_lo_du_ic@plt
+.*:    24020040        li      \$2,64
+#                                  ^ low 16 bits of f_lo_du_ic_dc@plt
+.*:    24020020        li      \$2,32
+#                                  ^ low 16 bits of f_lo_iu@plt
+.*:    24020191        li      \$2,401
+#                                  ^ low 16 bits of f_lo_iu_dc@mips16plt
+.*:    24020080        li      \$2,128
+#                                  ^ low 16 bits of f_lo_iu_ic@plt
+.*:    24020231        li      \$2,561
+#                                  ^ low 16 bits of f_lo_iu_ic_dc@mips16plt
+.*:    24020100        li      \$2,256
+#                                  ^ low 16 bits of f_lo_iu_du@plt
+.*:    24020030        li      \$2,48
+#                                  ^ low 16 bits of f_lo_iu_du_dc@plt
+.*:    24020130        li      \$2,304
+#                                  ^ low 16 bits of f_lo_iu_du_ic@plt
+.*:    24020140        li      \$2,320
+#                                  ^ low 16 bits of f_lo_iu_du_ic_dc@plt
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-word.rd b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16-word.rd
new file mode 100644 (file)
index 0000000..3ddec9b
--- /dev/null
@@ -0,0 +1,198 @@
+
+Dynamic section .*
+#...
+ 0x00000003 \(PLTGOT\)                     0x10202000
+#...
+ 0x70000013 \(MIPS_GOTSYM\)                0x1f
+ 0x00000014 \(PLTREL\)                     REL
+ 0x00000017 \(JMPREL\)                     0x10005000
+ 0x00000002 \(PLTRELSZ\)                   224 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\)                0x10200000
+#...
+Relocation section '\.rel\.dyn' .*
+# All symbols are referenced by a .word in the .data section, so pointer
+# equality matters.  If a PLT is needed to satisfy a direct call or %lo
+# relocation, the symbol should have a nonzero value and there should be
+# no dynamic relocations against it.  The only relocations here are for
+# undefined 0-value symbols.  Note that unlike x86, we do not create a PLT
+# for the uncalled symbol 'f' in order to maintain backward compatibility
+# with pre-PLT ld.sos.
+ Offset     Info    Type            Sym\.Value  Sym\. Name
+00000000  00000000 R_MIPS_NONE      
+10201028  00001f03 R_MIPS_REL32      00000000   f_iu_ic
+10201008  00002003 R_MIPS_REL32      00000000   f_ic
+10201020  00002103 R_MIPS_REL32      00000000   f_iu
+10201000  00002203 R_MIPS_REL32      00000000   f
+
+Relocation section '\.rel\.plt' .*
+ Offset     Info    Type            Sym\.Value  Sym\. Name
+10200008  [^ ]+ R_MIPS_JUMP_SLOT  10100020   f_lo_iu
+1020000c  [^ ]+ R_MIPS_JUMP_SLOT  10100030   f_lo_iu_du_dc
+10200010  [^ ]+ R_MIPS_JUMP_SLOT  10100040   f_lo_du_ic_dc
+10200014  [^ ]+ R_MIPS_JUMP_SLOT  10100050   f_du_dc
+10200018  [^ ]+ R_MIPS_JUMP_SLOT  10100191   f_lo_iu_dc
+1020001c  [^ ]+ R_MIPS_JUMP_SLOT  10100060   f_iu_du_ic
+10200020  [^ ]+ R_MIPS_JUMP_SLOT  10100070   f_lo_du_ic
+10200024  [^ ]+ R_MIPS_JUMP_SLOT  101001a1   f_iu_dc
+10200028  [^ ]+ R_MIPS_JUMP_SLOT  10100080   f_lo_iu_ic
+1020002c  [^ ]+ R_MIPS_JUMP_SLOT  10100090   f_lo_ic
+10200030  [^ ]+ R_MIPS_JUMP_SLOT  101000a0   f_lo_du_dc
+10200034  [^ ]+ R_MIPS_JUMP_SLOT  101000b0   f_du
+10200038  [^ ]+ R_MIPS_JUMP_SLOT  101000c0   f_du_ic_dc
+1020003c  [^ ]+ R_MIPS_JUMP_SLOT  101000d0   f_du_ic
+10200040  [^ ]+ R_MIPS_JUMP_SLOT  101000e0   f_iu_du_dc
+10200044  [^ ]+ R_MIPS_JUMP_SLOT  101001e1   f_lo_dc
+10200048  [^ ]+ R_MIPS_JUMP_SLOT  101000f0   f_iu_du
+1020004c  [^ ]+ R_MIPS_JUMP_SLOT  10100100   f_lo_iu_du
+10200050  [^ ]+ R_MIPS_JUMP_SLOT  101001f1   f_dc
+10200054  [^ ]+ R_MIPS_JUMP_SLOT  10100201   f_ic_dc
+10200058  [^ ]+ R_MIPS_JUMP_SLOT  10100110   f_lo_du
+1020005c  [^ ]+ R_MIPS_JUMP_SLOT  10100211   f_iu_ic_dc
+10200060  [^ ]+ R_MIPS_JUMP_SLOT  10100120   f_iu_du_ic_dc
+10200064  [^ ]+ R_MIPS_JUMP_SLOT  10100231   f_lo_iu_ic_dc
+10200068  [^ ]+ R_MIPS_JUMP_SLOT  10100130   f_lo_iu_du_ic
+1020006c  [^ ]+ R_MIPS_JUMP_SLOT  10100140   f_lo_iu_du_ic_dc
+10200070  [^ ]+ R_MIPS_JUMP_SLOT  10100251   f_lo_ic_dc
+10200074  [^ ]+ R_MIPS_JUMP_SLOT  10100150   f_lo
+
+Symbol table '\.dynsym' .*
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+# All symbols have their address taken, so PLT symbols need to have a nonzero
+# value.  They must also have STO_MIPS_PLT in order to distinguish them from
+# old-style lazy-binding stubs).
+#
+# A MIPS16 PLT should only be used as the symbol value if the function has
+# a direct MIPS16 caller (dc) and no direct MIPS caller (du).
+    .*: 10100020     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu
+    .*: 10100030     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_dc
+#...
+    .*: 10100040     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic_dc
+    .*: 10100050     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du_dc
+    .*: 10100191     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_dc
+    .*: 10100060     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du_ic
+    .*: 10100070     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic
+    .*: 101001a1     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_dc
+    .*: 10100080     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic
+    .*: 10100090     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic
+    .*: 101000a0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_dc
+    .*: 101000b0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du
+    .*: 101000c0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du_ic_dc
+    .*: 101000d0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du_ic
+    .*: 101000e0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du_dc
+    .*: 101001e1     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_dc
+    .*: 101000f0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du
+    .*: 10100100     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du
+    .*: 101001f1     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_dc
+    .*: 10100201     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_ic_dc
+    .*: 10100110     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du
+    .*: 10100211     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_ic_dc
+    .*: 10100120     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du_ic_dc
+#...
+    .*: 10100231     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic_dc
+    .*: 10100130     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic
+    .*: 10100140     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic_dc
+    .*: 10100251     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic_dc
+    .*: 10100150     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo
+# The start of the GOT-mapped area.  This should only contain functions that
+# are accessed purely via the traditional psABI scheme.  Since the functions
+# have their addresses taken, they cannot use a lazy-binding stub.
+# The symbol values are therefore all zero.
+    31: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_ic
+    32: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_ic
+    33: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu
+    34: 00000000     0 FUNC    GLOBAL DEFAULT  UND f
+
+Symbol table '\.symtab' .*
+#...
+Hex dump of section '\.data':
+  0x10201000 (00000000|00000000) (101001f1|f1011010) (00000000|00000000) (10100201|01021010) .*
+  0x10201010 (101000b0|b0001010) (10100050|50001010) (101000d0|d0001010) (101000c0|c0001010) .*
+  0x10201020 (00000000|00000000) (101001a1|a1011010) (00000000|00000000) (10100211|11021010) .*
+  0x10201030 (101000f0|f0001010) (101000e0|e0001010) (10100060|60001010) (10100120|20011010) .*
+  0x10201040 (10100150|50011010) (101001e1|e1011010) (10100090|90001010) (10100251|51021010) .*
+  0x10201050 (10100110|10011010) (101000a0|a0001010) (10100070|70001010) (10100040|40001010) .*
+  0x10201060 (10100020|20001010) (10100191|91011010) (10100080|80001010) (10100231|31021010) .*
+  0x10201070 (10100100|00011010) (10100030|30001010) (10100130|30011010) (10100140|40011010) .*
+
+
+Primary GOT:
+ Canonical gp value: 10209ff0
+
+ Reserved entries:
+   Address     Access  Initial Purpose
+  10202000 -32752\(gp\) 00000000 Lazy resolver
+  10202004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+# See the disassembly output for the meaning of each entry.
+ Local entries:
+   Address     Access  Initial
+  10202008 -32744\(gp\) 10100201
+  1020200c -32740\(gp\) 101000d0
+  10202010 -32736\(gp\) 101000c0
+  10202014 -32732\(gp\) 10100211
+  10202018 -32728\(gp\) 10100060
+  1020201c -32724\(gp\) 10100120
+  10202020 -32720\(gp\) 10100090
+  10202024 -32716\(gp\) 10100251
+  10202028 -32712\(gp\) 10100070
+  1020202c -32708\(gp\) 10100040
+  10202030 -32704\(gp\) 10100080
+  10202034 -32700\(gp\) 10100231
+  10202038 -32696\(gp\) 10100130
+  1020203c -32692\(gp\) 10100140
+  10202040 -32688\(gp\) 101001a1
+  10202044 -32684\(gp\) 101000f0
+  10202048 -32680\(gp\) 101000e0
+  1020204c -32676\(gp\) 10100020
+  10202050 -32672\(gp\) 10100191
+  10202054 -32668\(gp\) 10100100
+  10202058 -32664\(gp\) 10100030
+
+ Global entries:
+   Address     Access  Initial Sym\.Val\. Type    Ndx Name
+  1020205c -32660\(gp\) 00000000 00000000 FUNC    UND f_iu_ic
+  10202060 -32656\(gp\) 00000000 00000000 FUNC    UND f_ic
+  10202064 -32652\(gp\) 00000000 00000000 FUNC    UND f_iu
+  10202068 -32648\(gp\) 00000000 00000000 FUNC    UND f
+
+
+PLT GOT:
+
+ Reserved entries:
+   Address  Initial Purpose
+  10200000 00000000 PLT lazy resolver
+  10200004 00000000 Module pointer
+
+ Entries:
+   Address  Initial Sym\.Val\. Type    Ndx Name
+  10200008 10100000 10100020 FUNC    UND f_lo_iu
+  1020000c 10100000 10100030 FUNC    UND f_lo_iu_du_dc
+  10200010 10100000 10100040 FUNC    UND f_lo_du_ic_dc
+  10200014 10100000 10100050 FUNC    UND f_du_dc
+  10200018 10100000 10100191 FUNC    UND f_lo_iu_dc
+  1020001c 10100000 10100060 FUNC    UND f_iu_du_ic
+  10200020 10100000 10100070 FUNC    UND f_lo_du_ic
+  10200024 10100000 101001a1 FUNC    UND f_iu_dc
+  10200028 10100000 10100080 FUNC    UND f_lo_iu_ic
+  1020002c 10100000 10100090 FUNC    UND f_lo_ic
+  10200030 10100000 101000a0 FUNC    UND f_lo_du_dc
+  10200034 10100000 101000b0 FUNC    UND f_du
+  10200038 10100000 101000c0 FUNC    UND f_du_ic_dc
+  1020003c 10100000 101000d0 FUNC    UND f_du_ic
+  10200040 10100000 101000e0 FUNC    UND f_iu_du_dc
+  10200044 10100000 101001e1 FUNC    UND f_lo_dc
+  10200048 10100000 101000f0 FUNC    UND f_iu_du
+  1020004c 10100000 10100100 FUNC    UND f_lo_iu_du
+  10200050 10100000 101001f1 FUNC    UND f_dc
+  10200054 10100000 10100201 FUNC    UND f_ic_dc
+  10200058 10100000 10100110 FUNC    UND f_lo_du
+  1020005c 10100000 10100211 FUNC    UND f_iu_ic_dc
+  10200060 10100000 10100120 FUNC    UND f_iu_du_ic_dc
+  10200064 10100000 10100231 FUNC    UND f_lo_iu_ic_dc
+  10200068 10100000 10100130 FUNC    UND f_lo_iu_du_ic
+  1020006c 10100000 10100140 FUNC    UND f_lo_iu_du_ic_dc
+  10200070 10100000 10100251 FUNC    UND f_lo_ic_dc
+  10200074 10100000 10100150 FUNC    UND f_lo
+
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16.od b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16.od
new file mode 100644 (file)
index 0000000..712e651
--- /dev/null
@@ -0,0 +1,509 @@
+
+.* file format .*
+
+
+Disassembly of section \.plt:
+
+# Only _dc (direct call from compressed code) functions should have a
+# MIPS16 PLT.  Note that indirect calls do not influence the choice,
+# so f_ic and f_lo_ic have MIPS rather than MIPS16 PLTs.
+10100000 <_PROCEDURE_LINKAGE_TABLE_>:
+.*:    3c1c1020        lui     \$28,0x1020
+.*:    8f990000        lw      \$25,0\(\$28\)
+.*:    279c0000        addiu   \$28,\$28,0
+.*:    031cc023        subu    \$24,\$24,\$28
+.*:    03e07821        move    \$15,\$31
+.*:    0018c082        srl     \$24,\$24,0x2
+.*:    0320f809        jalr    \$25
+.*:    2718fffe        addiu   \$24,\$24,-2
+
+10100020 <f_lo_iu@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90008        lw      \$25,8\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80008        addiu   \$24,\$15,8
+
+10100030 <f_lo_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9000c        lw      \$25,12\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8000c        addiu   \$24,\$15,12
+
+10100040 <f_lo_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90010        lw      \$25,16\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80010        addiu   \$24,\$15,16
+
+10100050 <f_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90014        lw      \$25,20\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80014        addiu   \$24,\$15,20
+
+10100060 <f_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9001c        lw      \$25,28\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8001c        addiu   \$24,\$15,28
+
+10100070 <f_lo_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90020        lw      \$25,32\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80020        addiu   \$24,\$15,32
+
+10100080 <f_lo_iu_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90028        lw      \$25,40\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80028        addiu   \$24,\$15,40
+
+10100090 <f_lo_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9002c        lw      \$25,44\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8002c        addiu   \$24,\$15,44
+
+101000a0 <f_lo_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90030        lw      \$25,48\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80030        addiu   \$24,\$15,48
+
+101000b0 <f_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90034        lw      \$25,52\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80034        addiu   \$24,\$15,52
+
+101000c0 <f_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90038        lw      \$25,56\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80038        addiu   \$24,\$15,56
+
+101000d0 <f_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9003c        lw      \$25,60\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8003c        addiu   \$24,\$15,60
+
+101000e0 <f_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90040        lw      \$25,64\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80040        addiu   \$24,\$15,64
+
+101000f0 <f_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90048        lw      \$25,72\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80048        addiu   \$24,\$15,72
+
+10100100 <f_lo_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9004c        lw      \$25,76\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8004c        addiu   \$24,\$15,76
+
+10100110 <f_lo_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90058        lw      \$25,88\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80058        addiu   \$24,\$15,88
+
+10100120 <f_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90060        lw      \$25,96\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80060        addiu   \$24,\$15,96
+
+10100130 <f_lo_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90068        lw      \$25,104\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80068        addiu   \$24,\$15,104
+
+10100140 <f_lo_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9006c        lw      \$25,108\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8006c        addiu   \$24,\$15,108
+
+10100150 <f_lo@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90074        lw      \$25,116\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80074        addiu   \$24,\$15,116
+
+10100160 <f_lo_iu_du_dc@mips16plt>:
+.*:    b203            lw      \$2,1010016c <f_lo_iu_du_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x1020000c
+
+10100170 <f_lo_du_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010017c <f_lo_du_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200010
+
+10100180 <f_du_dc@mips16plt>:
+.*:    b203            lw      \$2,1010018c <f_du_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200014
+
+10100190 <f_lo_iu_dc@mips16plt>:
+.*:    b203            lw      \$2,1010019c <f_lo_iu_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200018
+
+101001a0 <f_iu_dc@mips16plt>:
+.*:    b203            lw      \$2,101001ac <f_iu_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200024
+
+101001b0 <f_lo_du_dc@mips16plt>:
+.*:    b203            lw      \$2,101001bc <f_lo_du_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200030
+
+101001c0 <f_du_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,101001cc <f_du_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200038
+
+101001d0 <f_iu_du_dc@mips16plt>:
+.*:    b203            lw      \$2,101001dc <f_iu_du_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200040
+
+101001e0 <f_lo_dc@mips16plt>:
+.*:    b203            lw      \$2,101001ec <f_lo_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200044
+
+101001f0 <f_dc@mips16plt>:
+.*:    b203            lw      \$2,101001fc <f_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200050
+
+10100200 <f_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010020c <f_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200054
+
+10100210 <f_iu_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010021c <f_iu_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x1020005c
+
+10100220 <f_iu_du_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010022c <f_iu_du_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200060
+
+10100230 <f_lo_iu_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010023c <f_lo_iu_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200064
+
+10100240 <f_lo_iu_du_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010024c <f_lo_iu_du_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x1020006c
+
+10100250 <f_lo_ic_dc@mips16plt>:
+.*:    b203            lw      \$2,1010025c <f_lo_ic_dc@mips16plt\+0xc>
+.*:    9a60            lw      \$3,0\(\$2\)
+.*:    651a            move    \$24,\$2
+.*:    eb00            jr      \$3
+.*:    653b            move    \$25,\$3
+.*:    6500            nop
+.*:    .... ....       \.word  0x10200070
+
+Disassembly of section \.MIPS\.stubs:
+
+10101000 <_MIPS_STUBS_>:
+# Lazy-binding stub for f_iu.
+.*:    8f998010        lw      \$25,-32752\(\$28\)
+.*:    03e07821        move    \$15,\$31
+.*:    0320f809        jalr    \$25
+.*:    24180021        li      \$24,33
+# Lazy-binding stub for f_ic.
+.*:    8f998010        lw      \$25,-32752\(\$28\)
+.*:    03e07821        move    \$15,\$31
+.*:    0320f809        jalr    \$25
+.*:    24180020        li      \$24,32
+# Lazy-binding stub for f_iu_ic.
+.*:    8f998010        lw      \$25,-32752\(\$28\)
+.*:    03e07821        move    \$15,\$31
+.*:    0320f809        jalr    \$25
+.*:    2418001f        li      \$24,31
+       \.\.\.
+
+Disassembly of section \.text\.a:
+
+10102000 <testc>:
+.*:    .... ....       jal     [0-9a-f]+ <f_dc@mips16plt>
+.*:    6500            nop
+.*:    f070 9b50       lw      \$2,-32656\(\$3\)
+#                                  ^ global GOT entry for f_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f010 9b58       lw      \$2,-32744\(\$3\)
+#                                  ^ local GOT entry for f_ic_dc@mips16plt
+.*:    .... ....       jal     [0-9a-f]+ <f_du_dc@mips16plt>
+.*:    6500            nop
+.*:    f010 9b5c       lw      \$2,-32740\(\$3\)
+#                                  ^ local GOT entry for f_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_du_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b40       lw      \$2,-32736\(\$3\)
+#                                  ^ local GOT entry for f_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_dc@mips16plt>
+.*:    6500            nop
+.*:    f070 9b4c       lw      \$2,-32660\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b44       lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@mips16plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_du_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b48       lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_du_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b4c       lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b50       lw      \$2,-32720\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b54       lw      \$2,-32716\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic_dc@mips16plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_du_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b58       lw      \$2,-32712\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_du_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f030 9b5c       lw      \$2,-32708\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_dc@mips16plt>
+.*:    6500            nop
+.*:    f050 9b40       lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f050 9b44       lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@mips16plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_du_dc@mips16plt>
+.*:    6500            nop
+.*:    f050 9b48       lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@mips16plt>
+.*:    6500            nop
+.*:    f050 9b4c       lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    e820            jr      \$31
+
+Disassembly of section \.text\.b:
+
+10103000 <testu>:
+.*:    ........        jal     [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c628074        lw      \$2,-32652\(\$3\)
+#                                  ^ global GOT entry for f_iu
+.*:    8c628050        lw      \$2,-32688\(\$3\)
+#                                  ^ local GOT entry for f_iu_dc@mips16plt
+.*:    8c62806c        lw      \$2,-32660\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    8c628024        lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@mips16plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628054        lw      \$2,-32684\(\$3\)
+#                                  ^ local GOT entry for f_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628058        lw      \$2,-32680\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628028        lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62802c        lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62805c        lw      \$2,-32676\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu@plt
+.*:    8c628060        lw      \$2,-32672\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_dc@mips16plt
+.*:    8c628040        lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@plt
+.*:    8c628044        lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@mips16plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628064        lw      \$2,-32668\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628068        lw      \$2,-32664\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628048        lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62804c        lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    03e00008        jr      \$31
+
+Disassembly of section \.text\.c:
+
+10104000 <testlo>:
+.*:    24020150        li      \$2,336
+#                                  ^ low 16 bits of f_lo@plt
+.*:    240201e1        li      \$2,481
+#                                  ^ low 16 bits of f_lo_dc@mips16plt
+.*:    24020090        li      \$2,144
+#                                  ^ low 16 bits of f_lo_ic@plt
+.*:    24020251        li      \$2,593
+#                                  ^ low 16 bits of f_lo_ic_dc@mips16plt
+.*:    24020110        li      \$2,272
+#                                  ^ low 16 bits of f_lo_du@plt
+.*:    240200a0        li      \$2,160
+#                                  ^ low 16 bits of f_lo_du_dc@plt
+.*:    24020070        li      \$2,112
+#                                  ^ low 16 bits of f_lo_du_ic@plt
+.*:    24020040        li      \$2,64
+#                                  ^ low 16 bits of f_lo_du_ic_dc@plt
+.*:    24020020        li      \$2,32
+#                                  ^ low 16 bits of f_lo_iu@plt
+.*:    24020191        li      \$2,401
+#                                  ^ low 16 bits of f_lo_iu_dc@mips16plt
+.*:    24020080        li      \$2,128
+#                                  ^ low 16 bits of f_lo_iu_ic@plt
+.*:    24020231        li      \$2,561
+#                                  ^ low 16 bits of f_lo_iu_ic_dc@mips16plt
+.*:    24020100        li      \$2,256
+#                                  ^ low 16 bits of f_lo_iu_du@plt
+.*:    24020030        li      \$2,48
+#                                  ^ low 16 bits of f_lo_iu_du_dc@plt
+.*:    24020130        li      \$2,304
+#                                  ^ low 16 bits of f_lo_iu_du_ic@plt
+.*:    24020140        li      \$2,320
+#                                  ^ low 16 bits of f_lo_iu_du_ic_dc@plt
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16.rd b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-mips16.rd
new file mode 100644 (file)
index 0000000..dc8a7c7
--- /dev/null
@@ -0,0 +1,170 @@
+
+Dynamic section .*
+#...
+ 0x00000003 \(PLTGOT\)                     0x10201000
+#...
+ 0x70000013 \(MIPS_GOTSYM\)                0x1f
+ 0x00000014 \(PLTREL\)                     REL
+ 0x00000017 \(JMPREL\)                     0x10004000
+ 0x00000002 \(PLTRELSZ\)                   224 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\)                0x10200000
+#...
+Relocation section '\.rel\.plt' .*
+ Offset     Info    Type            Sym\.Value  Sym\. Name
+10200008  [^ ]+ R_MIPS_JUMP_SLOT  10100020   f_lo_iu
+1020000c  [^ ]+ R_MIPS_JUMP_SLOT  10100030   f_lo_iu_du_dc
+10200010  [^ ]+ R_MIPS_JUMP_SLOT  10100040   f_lo_du_ic_dc
+10200014  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du_dc
+10200018  [^ ]+ R_MIPS_JUMP_SLOT  10100191   f_lo_iu_dc
+1020001c  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du_ic
+10200020  [^ ]+ R_MIPS_JUMP_SLOT  10100070   f_lo_du_ic
+10200024  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_dc
+10200028  [^ ]+ R_MIPS_JUMP_SLOT  10100080   f_lo_iu_ic
+1020002c  [^ ]+ R_MIPS_JUMP_SLOT  10100090   f_lo_ic
+10200030  [^ ]+ R_MIPS_JUMP_SLOT  101000a0   f_lo_du_dc
+10200034  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du
+10200038  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du_ic_dc
+1020003c  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du_ic
+10200040  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du_dc
+10200044  [^ ]+ R_MIPS_JUMP_SLOT  101001e1   f_lo_dc
+10200048  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du
+1020004c  [^ ]+ R_MIPS_JUMP_SLOT  10100100   f_lo_iu_du
+10200050  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_dc
+10200054  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_ic_dc
+10200058  [^ ]+ R_MIPS_JUMP_SLOT  10100110   f_lo_du
+1020005c  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_ic_dc
+10200060  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du_ic_dc
+10200064  [^ ]+ R_MIPS_JUMP_SLOT  10100231   f_lo_iu_ic_dc
+10200068  [^ ]+ R_MIPS_JUMP_SLOT  10100130   f_lo_iu_du_ic
+1020006c  [^ ]+ R_MIPS_JUMP_SLOT  10100140   f_lo_iu_du_ic_dc
+10200070  [^ ]+ R_MIPS_JUMP_SLOT  10100251   f_lo_ic_dc
+10200074  [^ ]+ R_MIPS_JUMP_SLOT  10100150   f_lo
+
+Symbol table '\.dynsym' .*
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+# _lo symbols have their address taken, so their PLT symbols need to have
+# a nonzero value.  They must also have STO_MIPS_PLT in order to distinguish
+# them from old-style lazy-binding stubs.  Non-_lo symbols are only called,
+# so their PLT symbols should have a zero value and no STO_MIPS_PLT annotation.
+#
+# A MIPS16 PLT should only be used as the symbol value if the function has
+# a direct MIPS16 caller (dc) and no direct MIPS caller (du).
+    .*: 10100020     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu
+    .*: 10100030     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_dc
+#...
+    .*: 10100040     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du_dc
+    .*: 10100191     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du_ic
+    .*: 10100070     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_dc
+    .*: 10100080     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic
+    .*: 10100090     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic
+    .*: 101000a0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du_ic_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du_ic
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du_dc
+    .*: 101001e1     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du
+    .*: 10100100     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_ic_dc
+    .*: 10100110     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_ic_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du_ic_dc
+#...
+    .*: 10100231     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic_dc
+    .*: 10100130     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic
+    .*: 10100140     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic_dc
+    .*: 10100251     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic_dc
+    .*: 10100150     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo
+# The start of the GOT-mapped area.  This should only contain functions that
+# are accessed purely via the traditional psABI scheme.  The symbol value
+# is the address of the lazy-binding stub.
+    31: 10101020     0 FUNC    GLOBAL DEFAULT  UND f_iu_ic
+    32: 10101010     0 FUNC    GLOBAL DEFAULT  UND f_ic
+    33: 10101000     0 FUNC    GLOBAL DEFAULT  UND f_iu
+
+Symbol table '\.symtab' .*
+#...
+Primary GOT:
+ Canonical gp value: 10208ff0
+
+ Reserved entries:
+   Address     Access  Initial Purpose
+  10201000 -32752\(gp\) 00000000 Lazy resolver
+  10201004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+# See the disassembly output for the meaning of each entry.
+ Local entries:
+   Address     Access  Initial
+  10201008 -32744\(gp\) 10100201
+  1020100c -32740\(gp\) 101000d0
+  10201010 -32736\(gp\) 101000c0
+  10201014 -32732\(gp\) 10100211
+  10201018 -32728\(gp\) 10100060
+  1020101c -32724\(gp\) 10100120
+  10201020 -32720\(gp\) 10100090
+  10201024 -32716\(gp\) 10100251
+  10201028 -32712\(gp\) 10100070
+  1020102c -32708\(gp\) 10100040
+  10201030 -32704\(gp\) 10100080
+  10201034 -32700\(gp\) 10100231
+  10201038 -32696\(gp\) 10100130
+  1020103c -32692\(gp\) 10100140
+  10201040 -32688\(gp\) 101001a1
+  10201044 -32684\(gp\) 101000f0
+  10201048 -32680\(gp\) 101000e0
+  1020104c -32676\(gp\) 10100020
+  10201050 -32672\(gp\) 10100191
+  10201054 -32668\(gp\) 10100100
+  10201058 -32664\(gp\) 10100030
+
+ Global entries:
+   Address     Access  Initial Sym\.Val\. Type    Ndx Name
+  1020105c -32660\(gp\) 10101020 10101020 FUNC    UND f_iu_ic
+  10201060 -32656\(gp\) 10101010 10101010 FUNC    UND f_ic
+  10201064 -32652\(gp\) 10101000 10101000 FUNC    UND f_iu
+
+
+PLT GOT:
+
+ Reserved entries:
+   Address  Initial Purpose
+  10200000 00000000 PLT lazy resolver
+  10200004 00000000 Module pointer
+
+ Entries:
+   Address  Initial Sym\.Val\. Type    Ndx Name
+  10200008 10100000 10100020 FUNC    UND f_lo_iu
+  1020000c 10100000 10100030 FUNC    UND f_lo_iu_du_dc
+  10200010 10100000 10100040 FUNC    UND f_lo_du_ic_dc
+  10200014 10100000 00000000 FUNC    UND f_du_dc
+  10200018 10100000 10100191 FUNC    UND f_lo_iu_dc
+  1020001c 10100000 00000000 FUNC    UND f_iu_du_ic
+  10200020 10100000 10100070 FUNC    UND f_lo_du_ic
+  10200024 10100000 00000000 FUNC    UND f_iu_dc
+  10200028 10100000 10100080 FUNC    UND f_lo_iu_ic
+  1020002c 10100000 10100090 FUNC    UND f_lo_ic
+  10200030 10100000 101000a0 FUNC    UND f_lo_du_dc
+  10200034 10100000 00000000 FUNC    UND f_du
+  10200038 10100000 00000000 FUNC    UND f_du_ic_dc
+  1020003c 10100000 00000000 FUNC    UND f_du_ic
+  10200040 10100000 00000000 FUNC    UND f_iu_du_dc
+  10200044 10100000 101001e1 FUNC    UND f_lo_dc
+  10200048 10100000 00000000 FUNC    UND f_iu_du
+  1020004c 10100000 10100100 FUNC    UND f_lo_iu_du
+  10200050 10100000 00000000 FUNC    UND f_dc
+  10200054 10100000 00000000 FUNC    UND f_ic_dc
+  10200058 10100000 10100110 FUNC    UND f_lo_du
+  1020005c 10100000 00000000 FUNC    UND f_iu_ic_dc
+  10200060 10100000 00000000 FUNC    UND f_iu_du_ic_dc
+  10200064 10100000 10100231 FUNC    UND f_lo_iu_ic_dc
+  10200068 10100000 10100130 FUNC    UND f_lo_iu_du_ic
+  1020006c 10100000 10100140 FUNC    UND f_lo_iu_du_ic_dc
+  10200070 10100000 10100251 FUNC    UND f_lo_ic_dc
+  10200074 10100000 10100150 FUNC    UND f_lo
+
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-se.od b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-se.od
new file mode 100644 (file)
index 0000000..6e0d15a
--- /dev/null
@@ -0,0 +1,103 @@
+
+.* file format .*
+
+
+Disassembly of section \.plt:
+
+10100000 <_PROCEDURE_LINKAGE_TABLE_>:
+.*:    3c1c1020        lui     \$28,0x1020
+.*:    8f990000        lw      \$25,0\(\$28\)
+.*:    279c0000        addiu   \$28,\$28,0
+.*:    031cc023        subu    \$24,\$24,\$28
+.*:    03e07821        move    \$15,\$31
+.*:    0018c082        srl     \$24,\$24,0x2
+.*:    0320f809        jalr    \$25
+.*:    2718fffe        addiu   \$24,\$24,-2
+
+10100020 <f_lo_iu@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90008        lw      \$25,8\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80008        addiu   \$24,\$15,8
+
+10100030 <f_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9000c        lw      \$25,12\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8000c        addiu   \$24,\$15,12
+
+10100040 <f_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90010        lw      \$25,16\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80010        addiu   \$24,\$15,16
+
+10100050 <f_lo_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90014        lw      \$25,20\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80014        addiu   \$24,\$15,20
+
+10100060 <f_lo_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90018        lw      \$25,24\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80018        addiu   \$24,\$15,24
+
+10100070 <f_lo@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9001c        lw      \$25,28\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8001c        addiu   \$24,\$15,28
+
+Disassembly of section \.MIPS\.stubs:
+
+10101000 <_MIPS_STUBS_>:
+# Lazy-binding stub for f_iu.
+.*:    8f998010        lw      \$25,-32752\(\$28\)
+.*:    03e07821        move    \$15,\$31
+.*:    0320f809        jalr    \$25
+.*:    24180009        li      \$24,9
+       \.\.\.
+
+Disassembly of section \.text\.b:
+
+10102000 <testu>:
+.*:    ........        jal     [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    8c628024        lw      \$2,-32732\(\$3\)
+#                                  ^ global GOT entry for f_iu
+.*:    ........        jal     [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628018        lw      \$2,-32744\(\$3\)
+#                                  ^ local GOT entry for f_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    8c62801c        lw      \$2,-32740\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628020        lw      \$2,-32736\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du@plt
+.*:    03e00008        jr      \$31
+
+Disassembly of section \.text\.c:
+
+10103000 <testlo>:
+.*:    24020070        li      \$2,112
+#                                  ^ low 16 bits of f_lo@plt
+.*:    24020060        li      \$2,96
+#                                  ^ low 16 bits of f_lo_du@plt
+.*:    24020020        li      \$2,32
+#                                  ^ low 16 bits of f_lo_iu@plt
+.*:    24020050        li      \$2,80
+#                                  ^ low 16 bits of f_lo_iu_du@plt
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-se.rd b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-se.rd
new file mode 100644 (file)
index 0000000..fa23221
--- /dev/null
@@ -0,0 +1,79 @@
+
+Dynamic section .*
+#...
+ 0x00000003 \(PLTGOT\)                     0x10201000
+#...
+ 0x70000013 \(MIPS_GOTSYM\)                0x9
+ 0x00000014 \(PLTREL\)                     REL
+ 0x00000017 \(JMPREL\)                     0x10004000
+ 0x00000002 \(PLTRELSZ\)                   48 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\)                0x10200000
+#...
+Relocation section '\.rel\.plt' .*
+ Offset     Info    Type            Sym\.Value  Sym\. Name
+10200008  [^ ]+ R_MIPS_JUMP_SLOT  10100020   f_lo_iu
+1020000c  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du
+10200010  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du
+10200014  [^ ]+ R_MIPS_JUMP_SLOT  10100050   f_lo_iu_du
+10200018  [^ ]+ R_MIPS_JUMP_SLOT  10100060   f_lo_du
+1020001c  [^ ]+ R_MIPS_JUMP_SLOT  10100070   f_lo
+
+Symbol table '\.dynsym' .*
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+# _lo symbols have their address taken, so their PLT symbols need to have
+# a nonzero value.  They must also have STO_MIPS_PLT in order to distinguish
+# them from old-style lazy-binding stubs.  Non-_lo symbols are only called,
+# so their PLT symbols should have a zero value and no STO_MIPS_PLT annotation.
+    .*: 10100020     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu
+#...
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du
+    .*: 10100050     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du
+    .*: 10100060     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du
+#...
+    .*: 10100070     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo
+# The start of the GOT-mapped area.  This should only contain functions that
+# are accessed purely via the traditional psABI scheme.  The symbol value
+# is the address of the lazy-binding stub.
+     9: 10101000     0 FUNC    GLOBAL DEFAULT  UND f_iu
+
+Symbol table '\.symtab' .*
+#...
+Primary GOT:
+ Canonical gp value: 10208ff0
+
+ Reserved entries:
+   Address     Access  Initial Purpose
+  10201000 -32752\(gp\) 00000000 Lazy resolver
+  10201004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+# See the disassembly output for the meaning of each entry.
+ Local entries:
+   Address     Access  Initial
+  10201008 -32744\(gp\) 10100040
+  1020100c -32740\(gp\) 10100020
+  10201010 -32736\(gp\) 10100050
+
+ Global entries:
+   Address     Access  Initial Sym\.Val\. Type    Ndx Name
+  10201014 -32732\(gp\) 10101000 10101000 FUNC    UND f_iu
+
+
+PLT GOT:
+
+ Reserved entries:
+   Address  Initial Purpose
+  10200000 00000000 PLT lazy resolver
+  10200004 00000000 Module pointer
+
+ Entries:
+   Address  Initial Sym\.Val\. Type    Ndx Name
+  10200008 10100000 10100020 FUNC    UND f_lo_iu
+  1020000c 10100000 00000000 FUNC    UND f_du
+  10200010 10100000 00000000 FUNC    UND f_iu_du
+  10200014 10100000 10100050 FUNC    UND f_lo_iu_du
+  10200018 10100000 10100060 FUNC    UND f_lo_du
+  1020001c 10100000 10100070 FUNC    UND f_lo
+
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-got.od b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-got.od
new file mode 100644 (file)
index 0000000..2d7b513
--- /dev/null
@@ -0,0 +1,560 @@
+
+.* file format .*
+
+
+Disassembly of section \.plt:
+
+# Only _du (direct call from uncompressed code) functions should have
+# non-microMIPS PLTs.  All the rest must be microMIPS.
+10100000 <_PROCEDURE_LINKAGE_TABLE_>:
+.*:    3c1c1020        lui     \$28,0x1020
+.*:    8f990000        lw      \$25,0\(\$28\)
+.*:    279c0000        addiu   \$28,\$28,0
+.*:    031cc023        subu    \$24,\$24,\$28
+.*:    03e07821        move    \$15,\$31
+.*:    0018c082        srl     \$24,\$24,0x2
+.*:    0320f809        jalr    \$25
+.*:    2718fffe        addiu   \$24,\$24,-2
+
+10100020 <f_lo_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9000c        lw      \$25,12\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8000c        addiu   \$24,\$15,12
+
+10100030 <f_lo_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90010        lw      \$25,16\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80010        addiu   \$24,\$15,16
+
+10100040 <f_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90014        lw      \$25,20\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80014        addiu   \$24,\$15,20
+
+10100050 <f_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9001c        lw      \$25,28\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8001c        addiu   \$24,\$15,28
+
+10100060 <f_lo_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90020        lw      \$25,32\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80020        addiu   \$24,\$15,32
+
+10100070 <f_lo_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90030        lw      \$25,48\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80030        addiu   \$24,\$15,48
+
+10100080 <f_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90034        lw      \$25,52\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80034        addiu   \$24,\$15,52
+
+10100090 <f_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90038        lw      \$25,56\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80038        addiu   \$24,\$15,56
+
+101000a0 <f_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9003c        lw      \$25,60\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8003c        addiu   \$24,\$15,60
+
+101000b0 <f_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90040        lw      \$25,64\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80040        addiu   \$24,\$15,64
+
+101000c0 <f_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90048        lw      \$25,72\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80048        addiu   \$24,\$15,72
+
+101000d0 <f_lo_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9004c        lw      \$25,76\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8004c        addiu   \$24,\$15,76
+
+101000e0 <f_lo_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90058        lw      \$25,88\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80058        addiu   \$24,\$15,88
+
+101000f0 <f_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90060        lw      \$25,96\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80060        addiu   \$24,\$15,96
+
+10100100 <f_lo_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90068        lw      \$25,104\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80068        addiu   \$24,\$15,104
+
+10100110 <f_lo_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9006c        lw      \$25,108\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8006c        addiu   \$24,\$15,108
+
+10100120 <f_lo_iu@micromipsplt>:
+.*:    7903 ffba       addiu   \$2,\$pc,1048296
+#                                  ^ 0x10200008
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+1010012c <f_lo_iu_du_dc@micromipsplt>:
+.*:    7903 ffb8       addiu   \$2,\$pc,1048288
+#                                  ^ 0x1020000c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100138 <f_lo_du_ic_dc@micromipsplt>:
+.*:    7903 ffb6       addiu   \$2,\$pc,1048280
+#                                  ^ 0x10200010
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100144 <f_du_dc@micromipsplt>:
+.*:    7903 ffb4       addiu   \$2,\$pc,1048272
+#                                  ^ 0x10200014
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100150 <f_lo_iu_dc@micromipsplt>:
+.*:    7903 ffb2       addiu   \$2,\$pc,1048264
+#                                  ^ 0x10200018
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+1010015c <f_iu_dc@micromipsplt>:
+.*:    7903 ffb2       addiu   \$2,\$pc,1048264
+#                                  ^ 0x10200024
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100168 <f_lo_iu_ic@micromipsplt>:
+.*:    7903 ffb0       addiu   \$2,\$pc,1048256
+#                                  ^ 0x10200028
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100174 <f_lo_ic@micromipsplt>:
+.*:    7903 ffae       addiu   \$2,\$pc,1048248
+#                                  ^ 0x1020002c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100180 <f_lo_du_dc@micromipsplt>:
+.*:    7903 ffac       addiu   \$2,\$pc,1048240
+#                                  ^ 0x10200030
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+1010018c <f_du_ic_dc@micromipsplt>:
+.*:    7903 ffab       addiu   \$2,\$pc,1048236
+#                                  ^ 0x10200038
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100198 <f_iu_du_dc@micromipsplt>:
+.*:    7903 ffaa       addiu   \$2,\$pc,1048232
+#                                  ^ 0x10200040
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001a4 <f_lo_dc@micromipsplt>:
+.*:    7903 ffa8       addiu   \$2,\$pc,1048224
+#                                  ^ 0x10200044
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001b0 <f_dc@micromipsplt>:
+.*:    7903 ffa8       addiu   \$2,\$pc,1048224
+#                                  ^ 0x10200050
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001bc <f_ic_dc@micromipsplt>:
+.*:    7903 ffa6       addiu   \$2,\$pc,1048216
+#                                  ^ 0x10200054
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001c8 <f_iu_ic_dc@micromipsplt>:
+.*:    7903 ffa5       addiu   \$2,\$pc,1048212
+#                                  ^ 0x1020005c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001d4 <f_iu_du_ic_dc@micromipsplt>:
+.*:    7903 ffa3       addiu   \$2,\$pc,1048204
+#                                  ^ 0x10200060
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001e0 <f_lo_iu_ic_dc@micromipsplt>:
+.*:    7903 ffa1       addiu   \$2,\$pc,1048196
+#                                  ^ 0x10200064
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001ec <f_lo_iu_du_ic_dc@micromipsplt>:
+.*:    7903 ffa0       addiu   \$2,\$pc,1048192
+#                                  ^ 0x1020006c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001f8 <f_lo_ic_dc@micromipsplt>:
+.*:    7903 ff9e       addiu   \$2,\$pc,1048184
+#                                  ^ 0x10200070
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100204 <f_lo@micromipsplt>:
+.*:    7903 ff9c       addiu   \$2,\$pc,1048176
+#                                  ^ 0x10200074
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+Disassembly of section \.text\.a:
+
+10101000 <testc>:
+.*:    .... ....       jal     [0-9a-f]+ <f_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 808c       lw      \$2,-32628\(\$3\)
+#                                  ^ global GOT entry for f_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8018       lw      \$2,-32744\(\$3\)
+#                                  ^ local GOT entry for f_ic_dc@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_du_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_du_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 801c       lw      \$2,-32740\(\$3\)
+#                                  ^ local GOT entry for f_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_du_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_du_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8020       lw      \$2,-32736\(\$3\)
+#                                  ^ local GOT entry for f_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_iu_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8088       lw      \$2,-32632\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_iu_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8024       lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_du_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_iu_du_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8028       lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_du_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_iu_du_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 802c       lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8030       lw      \$2,-32720\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8034       lw      \$2,-32716\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic_dc@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_du_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_du_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8038       lw      \$2,-32712\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_du_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_du_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 803c       lw      \$2,-32708\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_iu_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8040       lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_iu_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8044       lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_du_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_iu_du_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8048       lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_iu_du_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 804c       lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    459f            jr      \$31
+
+Disassembly of section \.text\.b:
+
+10102000 <testu>:
+.*:    ........        jal     [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c628090        lw      \$2,-32624\(\$3\)
+#                                  ^ global GOT entry for f_iu
+.*:    8c628050        lw      \$2,-32688\(\$3\)
+#                                  ^ local GOT entry for f_iu_dc@micromipsplt
+.*:    8c628088        lw      \$2,-32632\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    8c628024        lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@micromipsplt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628054        lw      \$2,-32684\(\$3\)
+#                                  ^ local GOT entry for f_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628058        lw      \$2,-32680\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628028        lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62802c        lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62805c        lw      \$2,-32676\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu@micromipsplt
+.*:    8c628060        lw      \$2,-32672\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_dc@micromipsplt
+.*:    8c628040        lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@micromipsplt
+.*:    8c628044        lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@micromipsplt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628064        lw      \$2,-32668\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628068        lw      \$2,-32664\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628048        lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62804c        lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    03e00008        jr      \$31
+
+Disassembly of section \.text\.c:
+
+10103000 <testlo>:
+.*:    3040 0205       li      \$2,517
+#                                  ^ low 16 bits of f_lo@micromipsplt
+.*:    3040 01a5       li      \$2,421
+#                                  ^ low 16 bits of f_lo_dc@micromipsplt
+.*:    3040 0175       li      \$2,373
+#                                  ^ low 16 bits of f_lo_ic@micromipsplt
+.*:    3040 01f9       li      \$2,505
+#                                  ^ low 16 bits of f_lo_ic_dc@micromipsplt
+.*:    3040 00e0       li      \$2,224
+#                                  ^ low 16 bits of f_lo_du@plt
+.*:    3040 0070       li      \$2,112
+#                                  ^ low 16 bits of f_lo_du_dc@plt
+.*:    3040 0060       li      \$2,96
+#                                  ^ low 16 bits of f_lo_du_ic@plt
+.*:    3040 0030       li      \$2,48
+#                                  ^ low 16 bits of f_lo_du_ic_dc@plt
+.*:    3040 0121       li      \$2,289
+#                                  ^ low 16 bits of f_lo_iu@micromipsplt
+.*:    3040 0151       li      \$2,337
+#                                  ^ low 16 bits of f_lo_iu_dc@micromipsplt
+.*:    3040 0169       li      \$2,361
+#                                  ^ low 16 bits of f_lo_iu_ic@micromipsplt
+.*:    3040 01e1       li      \$2,481
+#                                  ^ low 16 bits of f_lo_iu_ic_dc@micromipsplt
+.*:    3040 00d0       li      \$2,208
+#                                  ^ low 16 bits of f_lo_iu_du@plt
+.*:    3040 0020       li      \$2,32
+#                                  ^ low 16 bits of f_lo_iu_du_dc@plt
+.*:    3040 0100       li      \$2,256
+#                                  ^ low 16 bits of f_lo_iu_du_ic@plt
+.*:    3040 0110       li      \$2,272
+#                                  ^ low 16 bits of f_lo_iu_du_ic_dc@plt
+
+Disassembly of section \.text\.d:
+
+10104000 <testgot>:
+.*:    fc5c 8094       lw      \$2,-32620\(\$28\)
+#                                  ^ global GOT entry for f
+.*:    fc5c 806c       lw      \$2,-32660\(\$28\)
+#                                  ^ local GOT entry for f_dc@micromipsplt
+.*:    fc5c 808c       lw      \$2,-32628\(\$28\)
+#                                  ^ global GOT entry for f_ic
+.*:    fc5c 8018       lw      \$2,-32744\(\$28\)
+#                                  ^ local GOT entry for f_ic_dc@micromipsplt
+.*:    fc5c 8070       lw      \$2,-32656\(\$28\)
+#                                  ^ local GOT entry for f_du@plt
+.*:    fc5c 8074       lw      \$2,-32652\(\$28\)
+#                                  ^ local GOT entry for f_du_dc@plt
+.*:    fc5c 801c       lw      \$2,-32740\(\$28\)
+#                                  ^ local GOT entry for f_du_ic@plt
+.*:    fc5c 8020       lw      \$2,-32736\(\$28\)
+#                                  ^ local GOT entry for f_du_ic_dc@plt
+.*:    fc5c 8090       lw      \$2,-32624\(\$28\)
+#                                  ^ global GOT entry for f_iu
+.*:    fc5c 8050       lw      \$2,-32688\(\$28\)
+#                                  ^ local GOT entry for f_iu_dc@micromipsplt
+.*:    fc5c 8088       lw      \$2,-32632\(\$28\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    fc5c 8024       lw      \$2,-32732\(\$28\)
+#                                  ^ local GOT entry for f_iu_ic_dc@micromipsplt
+.*:    fc5c 8054       lw      \$2,-32684\(\$28\)
+#                                  ^ local GOT entry for f_iu_du@plt
+.*:    fc5c 8058       lw      \$2,-32680\(\$28\)
+#                                  ^ local GOT entry for f_iu_du_dc@plt
+.*:    fc5c 8028       lw      \$2,-32728\(\$28\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    fc5c 802c       lw      \$2,-32724\(\$28\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    fc5c 8078       lw      \$2,-32648\(\$28\)
+#                                  ^ local GOT entry for f_lo@micromipsplt
+.*:    fc5c 807c       lw      \$2,-32644\(\$28\)
+#                                  ^ local GOT entry for f_lo_dc@micromipsplt
+.*:    fc5c 8030       lw      \$2,-32720\(\$28\)
+#                                  ^ local GOT entry for f_lo_ic@micromipsplt
+.*:    fc5c 8034       lw      \$2,-32716\(\$28\)
+#                                  ^ local GOT entry for f_lo_ic_dc@micromipsplt
+.*:    fc5c 8080       lw      \$2,-32640\(\$28\)
+#                                  ^ local GOT entry for f_lo_du@plt
+.*:    fc5c 8084       lw      \$2,-32636\(\$28\)
+#                                  ^ local GOT entry for f_lo_du_dc@plt
+.*:    fc5c 8038       lw      \$2,-32712\(\$28\)
+#                                  ^ local GOT entry for f_lo_du_ic@plt
+.*:    fc5c 803c       lw      \$2,-32708\(\$28\)
+#                                  ^ local GOT entry for f_lo_du_ic_dc@plt
+.*:    fc5c 805c       lw      \$2,-32676\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu@micromipsplt
+.*:    fc5c 8060       lw      \$2,-32672\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_dc@micromipsplt
+.*:    fc5c 8040       lw      \$2,-32704\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_ic@micromipsplt
+.*:    fc5c 8044       lw      \$2,-32700\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@micromipsplt
+.*:    fc5c 8064       lw      \$2,-32668\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_du@plt
+.*:    fc5c 8068       lw      \$2,-32664\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_du_dc@plt
+.*:    fc5c 8048       lw      \$2,-32696\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    fc5c 804c       lw      \$2,-32692\(\$28\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-got.rd b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-got.rd
new file mode 100644 (file)
index 0000000..2a4c337
--- /dev/null
@@ -0,0 +1,179 @@
+
+Dynamic section .*
+#...
+ 0x00000003 \(PLTGOT\)                     0x10201000
+#...
+ 0x70000013 \(MIPS_GOTSYM\)                0x1f
+ 0x00000014 \(PLTREL\)                     REL
+ 0x00000017 \(JMPREL\)                     0x10004000
+ 0x00000002 \(PLTRELSZ\)                   224 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\)                0x10200000
+#...
+Relocation section '\.rel\.plt' .*
+ Offset     Info    Type            Sym\.Value  Sym\. Name
+10200008  [^ ]+ R_MIPS_JUMP_SLOT  10100121   f_lo_iu
+1020000c  [^ ]+ R_MIPS_JUMP_SLOT  10100020   f_lo_iu_du_dc
+10200010  [^ ]+ R_MIPS_JUMP_SLOT  10100030   f_lo_du_ic_dc
+10200014  [^ ]+ R_MIPS_JUMP_SLOT  10100040   f_du_dc
+10200018  [^ ]+ R_MIPS_JUMP_SLOT  10100151   f_lo_iu_dc
+1020001c  [^ ]+ R_MIPS_JUMP_SLOT  10100050   f_iu_du_ic
+10200020  [^ ]+ R_MIPS_JUMP_SLOT  10100060   f_lo_du_ic
+10200024  [^ ]+ R_MIPS_JUMP_SLOT  1010015d   f_iu_dc
+10200028  [^ ]+ R_MIPS_JUMP_SLOT  10100169   f_lo_iu_ic
+1020002c  [^ ]+ R_MIPS_JUMP_SLOT  10100175   f_lo_ic
+10200030  [^ ]+ R_MIPS_JUMP_SLOT  10100070   f_lo_du_dc
+10200034  [^ ]+ R_MIPS_JUMP_SLOT  10100080   f_du
+10200038  [^ ]+ R_MIPS_JUMP_SLOT  10100090   f_du_ic_dc
+1020003c  [^ ]+ R_MIPS_JUMP_SLOT  101000a0   f_du_ic
+10200040  [^ ]+ R_MIPS_JUMP_SLOT  101000b0   f_iu_du_dc
+10200044  [^ ]+ R_MIPS_JUMP_SLOT  101001a5   f_lo_dc
+10200048  [^ ]+ R_MIPS_JUMP_SLOT  101000c0   f_iu_du
+1020004c  [^ ]+ R_MIPS_JUMP_SLOT  101000d0   f_lo_iu_du
+10200050  [^ ]+ R_MIPS_JUMP_SLOT  101001b1   f_dc
+10200054  [^ ]+ R_MIPS_JUMP_SLOT  101001bd   f_ic_dc
+10200058  [^ ]+ R_MIPS_JUMP_SLOT  101000e0   f_lo_du
+1020005c  [^ ]+ R_MIPS_JUMP_SLOT  101001c9   f_iu_ic_dc
+10200060  [^ ]+ R_MIPS_JUMP_SLOT  101000f0   f_iu_du_ic_dc
+10200064  [^ ]+ R_MIPS_JUMP_SLOT  101001e1   f_lo_iu_ic_dc
+10200068  [^ ]+ R_MIPS_JUMP_SLOT  10100100   f_lo_iu_du_ic
+1020006c  [^ ]+ R_MIPS_JUMP_SLOT  10100110   f_lo_iu_du_ic_dc
+10200070  [^ ]+ R_MIPS_JUMP_SLOT  101001f9   f_lo_ic_dc
+10200074  [^ ]+ R_MIPS_JUMP_SLOT  10100205   f_lo
+
+Symbol table '\.dynsym' .*
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+# All symbols have their address taken, so PLT symbols need to have a nonzero
+# value.  They must also have STO_MIPS_PLT in order to distinguish them from
+# old-style lazy-binding stubs).
+#
+# A MIPS (as opposed to microMIPS) PLT should be used as the symbol value
+# if and only if the function has a direct MIPS caller (du).
+    .*: 10100121     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu
+    .*: 10100020     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_dc
+#...
+    .*: 10100030     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic_dc
+    .*: 10100040     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du_dc
+    .*: 10100151     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_dc
+    .*: 10100050     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du_ic
+    .*: 10100060     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic
+    .*: 1010015d     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_dc
+    .*: 10100169     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic
+    .*: 10100175     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic
+    .*: 10100070     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_dc
+    .*: 10100080     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du
+    .*: 10100090     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du_ic_dc
+    .*: 101000a0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du_ic
+    .*: 101000b0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du_dc
+    .*: 101001a5     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_dc
+    .*: 101000c0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du
+    .*: 101000d0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du
+    .*: 101001b1     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_dc
+    .*: 101001bd     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_ic_dc
+    .*: 101000e0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du
+    .*: 101001c9     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_ic_dc
+    .*: 101000f0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du_ic_dc
+#...
+    .*: 101001e1     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic_dc
+    .*: 10100100     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic
+    .*: 10100110     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic_dc
+    .*: 101001f9     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic_dc
+    .*: 10100205     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo
+# The start of the GOT-mapped area.  This should only contain functions that
+# are accessed purely via the traditional psABI scheme.  Since the functions
+# have their addresses taken, they cannot use a lazy-binding stub.
+# The symbol values are therefore all zero.
+    31: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_ic
+    32: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_ic
+    33: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu
+    34: 00000000     0 FUNC    GLOBAL DEFAULT  UND f
+
+Symbol table '\.symtab' .*
+#...
+Primary GOT:
+ Canonical gp value: 10208ff0
+
+ Reserved entries:
+   Address     Access  Initial Purpose
+  10201000 -32752\(gp\) 00000000 Lazy resolver
+  10201004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+# See the disassembly output for the meaning of each entry.
+ Local entries:
+   Address     Access  Initial
+  10201008 -32744\(gp\) 101001bd
+  1020100c -32740\(gp\) 101000a0
+  10201010 -32736\(gp\) 10100090
+  10201014 -32732\(gp\) 101001c9
+  10201018 -32728\(gp\) 10100050
+  1020101c -32724\(gp\) 101000f0
+  10201020 -32720\(gp\) 10100175
+  10201024 -32716\(gp\) 101001f9
+  10201028 -32712\(gp\) 10100060
+  1020102c -32708\(gp\) 10100030
+  10201030 -32704\(gp\) 10100169
+  10201034 -32700\(gp\) 101001e1
+  10201038 -32696\(gp\) 10100100
+  1020103c -32692\(gp\) 10100110
+  10201040 -32688\(gp\) 1010015d
+  10201044 -32684\(gp\) 101000c0
+  10201048 -32680\(gp\) 101000b0
+  1020104c -32676\(gp\) 10100121
+  10201050 -32672\(gp\) 10100151
+  10201054 -32668\(gp\) 101000d0
+  10201058 -32664\(gp\) 10100020
+  1020105c -32660\(gp\) 101001b1
+  10201060 -32656\(gp\) 10100080
+  10201064 -32652\(gp\) 10100040
+  10201068 -32648\(gp\) 10100205
+  1020106c -32644\(gp\) 101001a5
+  10201070 -32640\(gp\) 101000e0
+  10201074 -32636\(gp\) 10100070
+
+ Global entries:
+   Address     Access  Initial Sym\.Val\. Type    Ndx Name
+  10201078 -32632\(gp\) 00000000 00000000 FUNC    UND f_iu_ic
+  1020107c -32628\(gp\) 00000000 00000000 FUNC    UND f_ic
+  10201080 -32624\(gp\) 00000000 00000000 FUNC    UND f_iu
+  10201084 -32620\(gp\) 00000000 00000000 FUNC    UND f
+
+
+PLT GOT:
+
+ Reserved entries:
+   Address  Initial Purpose
+  10200000 00000000 PLT lazy resolver
+  10200004 00000000 Module pointer
+
+ Entries:
+   Address  Initial Sym\.Val\. Type    Ndx Name
+  10200008 10100000 10100121 FUNC    UND f_lo_iu
+  1020000c 10100000 10100020 FUNC    UND f_lo_iu_du_dc
+  10200010 10100000 10100030 FUNC    UND f_lo_du_ic_dc
+  10200014 10100000 10100040 FUNC    UND f_du_dc
+  10200018 10100000 10100151 FUNC    UND f_lo_iu_dc
+  1020001c 10100000 10100050 FUNC    UND f_iu_du_ic
+  10200020 10100000 10100060 FUNC    UND f_lo_du_ic
+  10200024 10100000 1010015d FUNC    UND f_iu_dc
+  10200028 10100000 10100169 FUNC    UND f_lo_iu_ic
+  1020002c 10100000 10100175 FUNC    UND f_lo_ic
+  10200030 10100000 10100070 FUNC    UND f_lo_du_dc
+  10200034 10100000 10100080 FUNC    UND f_du
+  10200038 10100000 10100090 FUNC    UND f_du_ic_dc
+  1020003c 10100000 101000a0 FUNC    UND f_du_ic
+  10200040 10100000 101000b0 FUNC    UND f_iu_du_dc
+  10200044 10100000 101001a5 FUNC    UND f_lo_dc
+  10200048 10100000 101000c0 FUNC    UND f_iu_du
+  1020004c 10100000 101000d0 FUNC    UND f_lo_iu_du
+  10200050 10100000 101001b1 FUNC    UND f_dc
+  10200054 10100000 101001bd FUNC    UND f_ic_dc
+  10200058 10100000 101000e0 FUNC    UND f_lo_du
+  1020005c 10100000 101001c9 FUNC    UND f_iu_ic_dc
+  10200060 10100000 101000f0 FUNC    UND f_iu_du_ic_dc
+  10200064 10100000 101001e1 FUNC    UND f_lo_iu_ic_dc
+  10200068 10100000 10100100 FUNC    UND f_lo_iu_du_ic
+  1020006c 10100000 10100110 FUNC    UND f_lo_iu_du_ic_dc
+  10200070 10100000 101001f9 FUNC    UND f_lo_ic_dc
+  10200074 10100000 10100205 FUNC    UND f_lo
+
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-only.od b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-only.od
new file mode 100644 (file)
index 0000000..b7d7241
--- /dev/null
@@ -0,0 +1,111 @@
+
+.* file format .*
+
+
+Disassembly of section \.plt:
+
+# All entries must be microMIPS.
+10100000 <_PROCEDURE_LINKAGE_TABLE_>:
+.*:    7984 0000       addiu   \$3,\$pc,1048576
+.*:    ff23 0000       lw      \$25,0\(\$3\)
+.*:    0535            subu    \$2,\$2,\$3
+.*:    2525            srl     \$2,\$2,2
+.*:    3302 fffe       addiu   \$24,\$2,-2
+.*:    0dff            move    \$15,\$31
+.*:    45f9            jalrs   \$25
+.*:    0f83            move    \$28,\$3
+.*:    0c00            nop
+
+10100018 <f_lo_ic@micromipsplt>:
+.*:    7903 fffc       addiu   \$2,\$pc,1048560
+#                                  ^ 0x10200008
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100024 <f_lo_dc@micromipsplt>:
+.*:    7903 fffa       addiu   \$2,\$pc,1048552
+#                                  ^ 0x1020000c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100030 <f_dc@micromipsplt>:
+.*:    7903 fff8       addiu   \$2,\$pc,1048544
+#                                  ^ 0x10200010
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+1010003c <f_ic_dc@micromipsplt>:
+.*:    7903 fff6       addiu   \$2,\$pc,1048536
+#                                  ^ 0x10200014
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100048 <f_lo_ic_dc@micromipsplt>:
+.*:    7903 fff4       addiu   \$2,\$pc,1048528
+#                                  ^ 0x10200018
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100054 <f_lo@micromipsplt>:
+.*:    7903 fff2       addiu   \$2,\$pc,1048520
+#                                  ^ 0x1020001c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+Disassembly of section \.MIPS\.stubs:
+
+10101000 <_MIPS_STUBS_>:
+# Lazy-binding stub for f_ic.
+.*:    ff3c 8010       lw      \$25,-32752\(\$28\)
+.*:    0dff            move    \$15,\$31
+.*:    45d9            jalr    \$25
+.*:    3300 0009       li      \$24,9
+       \.\.\.
+
+Disassembly of section \.text\.a:
+
+10102000 <testc>:
+.*:    .... ....       jal     [0-9a-f]+ <f_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8024       lw      \$2,-32732\(\$3\)
+#                                  ^ global GOT entry for f_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8018       lw      \$2,-32744\(\$3\)
+#                                  ^ local GOT entry for f_ic_dc@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 801c       lw      \$2,-32740\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8020       lw      \$2,-32736\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic_dc@micromipsplt
+.*:    459f            jr      \$31
+
+Disassembly of section \.text\.c:
+
+10103000 <testlo>:
+.*:    3040 0055       li      \$2,85
+#                                  ^ low 16 bits of f_lo@micromipsplt
+.*:    3040 0025       li      \$2,37
+#                                  ^ low 16 bits of f_lo_dc@micromipsplt
+.*:    3040 0019       li      \$2,25
+#                                  ^ low 16 bits of f_lo_ic@micromipsplt
+.*:    3040 0049       li      \$2,73
+#                                  ^ low 16 bits of f_lo_ic_dc@micromipsplt
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-only.rd b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-only.rd
new file mode 100644 (file)
index 0000000..fd3e7c6
--- /dev/null
@@ -0,0 +1,81 @@
+
+Dynamic section .*
+#...
+ 0x00000003 \(PLTGOT\)                     0x10201000
+#...
+ 0x70000013 \(MIPS_GOTSYM\)                0x9
+ 0x00000014 \(PLTREL\)                     REL
+ 0x00000017 \(JMPREL\)                     0x10004000
+ 0x00000002 \(PLTRELSZ\)                   48 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\)                0x10200000
+#...
+Relocation section '\.rel\.plt' .*
+ Offset     Info    Type            Sym\.Value  Sym\. Name
+10200008  [^ ]+ R_MIPS_JUMP_SLOT  10100019   f_lo_ic
+1020000c  [^ ]+ R_MIPS_JUMP_SLOT  10100025   f_lo_dc
+10200010  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_dc
+10200014  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_ic_dc
+10200018  [^ ]+ R_MIPS_JUMP_SLOT  10100049   f_lo_ic_dc
+1020001c  [^ ]+ R_MIPS_JUMP_SLOT  10100055   f_lo
+
+Symbol table '\.dynsym' .*
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+# _lo symbols have their address taken, so their PLT symbols need to have
+# a nonzero value.  They must also have STO_MIPS_PLT in order to distinguish
+# them from old-style lazy-binding stubs.  Non-_lo symbols are only called,
+# so their PLT symbols should have a zero value and no STO_MIPS_PLT annotation.
+#
+# All PLTs should be microMIPS.
+#...
+    .*: 10100019     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic
+    .*: 10100025     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_ic_dc
+#...
+    .*: 10100049     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic_dc
+    .*: 10100055     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo
+# The start of the GOT-mapped area.  This should only contain functions that
+# are accessed purely via the traditional psABI scheme.  The symbol value
+# is the address of the lazy-binding stub.
+     9: 10101001     0 FUNC    GLOBAL DEFAULT  UND f_ic
+
+Symbol table '\.symtab' .*
+#...
+Primary GOT:
+ Canonical gp value: 10208ff0
+
+ Reserved entries:
+   Address     Access  Initial Purpose
+  10201000 -32752\(gp\) 00000000 Lazy resolver
+  10201004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+# See the disassembly output for the meaning of each entry.
+ Local entries:
+   Address     Access  Initial
+  10201008 -32744\(gp\) 1010003d
+  1020100c -32740\(gp\) 10100019
+  10201010 -32736\(gp\) 10100049
+
+ Global entries:
+   Address     Access  Initial Sym\.Val\. Type    Ndx Name
+  10201014 -32732\(gp\) 10101001 10101001 FUNC    UND f_ic
+
+
+PLT GOT:
+
+ Reserved entries:
+   Address  Initial Purpose
+  10200000 00000000 PLT lazy resolver
+  10200004 00000000 Module pointer
+
+ Entries:
+   Address  Initial Sym\.Val\. Type    Ndx Name
+  10200008 10100001 10100019 FUNC    UND f_lo_ic
+  1020000c 10100001 10100025 FUNC    UND f_lo_dc
+  10200010 10100001 00000000 FUNC    UND f_dc
+  10200014 10100001 00000000 FUNC    UND f_ic_dc
+  10200018 10100001 10100049 FUNC    UND f_lo_ic_dc
+  1020001c 10100001 10100055 FUNC    UND f_lo
+
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-word.od b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-word.od
new file mode 100644 (file)
index 0000000..4d0572b
--- /dev/null
@@ -0,0 +1,492 @@
+
+.* file format .*
+
+
+Disassembly of section \.plt:
+
+# Only _du (direct call from uncompressed code) functions should have
+# non-microMIPS PLTs.  All the rest must be microMIPS.
+10100000 <_PROCEDURE_LINKAGE_TABLE_>:
+.*:    3c1c1020        lui     \$28,0x1020
+.*:    8f990000        lw      \$25,0\(\$28\)
+.*:    279c0000        addiu   \$28,\$28,0
+.*:    031cc023        subu    \$24,\$24,\$28
+.*:    03e07821        move    \$15,\$31
+.*:    0018c082        srl     \$24,\$24,0x2
+.*:    0320f809        jalr    \$25
+.*:    2718fffe        addiu   \$24,\$24,-2
+
+10100020 <f_lo_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9000c        lw      \$25,12\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8000c        addiu   \$24,\$15,12
+
+10100030 <f_lo_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90010        lw      \$25,16\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80010        addiu   \$24,\$15,16
+
+10100040 <f_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90014        lw      \$25,20\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80014        addiu   \$24,\$15,20
+
+10100050 <f_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9001c        lw      \$25,28\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8001c        addiu   \$24,\$15,28
+
+10100060 <f_lo_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90020        lw      \$25,32\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80020        addiu   \$24,\$15,32
+
+10100070 <f_lo_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90030        lw      \$25,48\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80030        addiu   \$24,\$15,48
+
+10100080 <f_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90034        lw      \$25,52\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80034        addiu   \$24,\$15,52
+
+10100090 <f_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90038        lw      \$25,56\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80038        addiu   \$24,\$15,56
+
+101000a0 <f_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9003c        lw      \$25,60\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8003c        addiu   \$24,\$15,60
+
+101000b0 <f_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90040        lw      \$25,64\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80040        addiu   \$24,\$15,64
+
+101000c0 <f_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90048        lw      \$25,72\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80048        addiu   \$24,\$15,72
+
+101000d0 <f_lo_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9004c        lw      \$25,76\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8004c        addiu   \$24,\$15,76
+
+101000e0 <f_lo_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90058        lw      \$25,88\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80058        addiu   \$24,\$15,88
+
+101000f0 <f_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90060        lw      \$25,96\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80060        addiu   \$24,\$15,96
+
+10100100 <f_lo_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90068        lw      \$25,104\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80068        addiu   \$24,\$15,104
+
+10100110 <f_lo_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9006c        lw      \$25,108\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8006c        addiu   \$24,\$15,108
+
+10100120 <f_lo_iu@micromipsplt>:
+.*:    7903 ffba       addiu   \$2,\$pc,1048296
+#                                  ^ 0x10200008
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+1010012c <f_lo_iu_du_dc@micromipsplt>:
+.*:    7903 ffb8       addiu   \$2,\$pc,1048288
+#                                  ^ 0x1020000c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100138 <f_lo_du_ic_dc@micromipsplt>:
+.*:    7903 ffb6       addiu   \$2,\$pc,1048280
+#                                  ^ 0x10200010
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100144 <f_du_dc@micromipsplt>:
+.*:    7903 ffb4       addiu   \$2,\$pc,1048272
+#                                  ^ 0x10200014
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100150 <f_lo_iu_dc@micromipsplt>:
+.*:    7903 ffb2       addiu   \$2,\$pc,1048264
+#                                  ^ 0x10200018
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+1010015c <f_iu_dc@micromipsplt>:
+.*:    7903 ffb2       addiu   \$2,\$pc,1048264
+#                                  ^ 0x10200024
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100168 <f_lo_iu_ic@micromipsplt>:
+.*:    7903 ffb0       addiu   \$2,\$pc,1048256
+#                                  ^ 0x10200028
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100174 <f_lo_ic@micromipsplt>:
+.*:    7903 ffae       addiu   \$2,\$pc,1048248
+#                                  ^ 0x1020002c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100180 <f_lo_du_dc@micromipsplt>:
+.*:    7903 ffac       addiu   \$2,\$pc,1048240
+#                                  ^ 0x10200030
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+1010018c <f_du_ic_dc@micromipsplt>:
+.*:    7903 ffab       addiu   \$2,\$pc,1048236
+#                                  ^ 0x10200038
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100198 <f_iu_du_dc@micromipsplt>:
+.*:    7903 ffaa       addiu   \$2,\$pc,1048232
+#                                  ^ 0x10200040
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001a4 <f_lo_dc@micromipsplt>:
+.*:    7903 ffa8       addiu   \$2,\$pc,1048224
+#                                  ^ 0x10200044
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001b0 <f_dc@micromipsplt>:
+.*:    7903 ffa8       addiu   \$2,\$pc,1048224
+#                                  ^ 0x10200050
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001bc <f_ic_dc@micromipsplt>:
+.*:    7903 ffa6       addiu   \$2,\$pc,1048216
+#                                  ^ 0x10200054
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001c8 <f_iu_ic_dc@micromipsplt>:
+.*:    7903 ffa5       addiu   \$2,\$pc,1048212
+#                                  ^ 0x1020005c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001d4 <f_iu_du_ic_dc@micromipsplt>:
+.*:    7903 ffa3       addiu   \$2,\$pc,1048204
+#                                  ^ 0x10200060
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001e0 <f_lo_iu_ic_dc@micromipsplt>:
+.*:    7903 ffa1       addiu   \$2,\$pc,1048196
+#                                  ^ 0x10200064
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001ec <f_lo_iu_du_ic_dc@micromipsplt>:
+.*:    7903 ffa0       addiu   \$2,\$pc,1048192
+#                                  ^ 0x1020006c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001f8 <f_lo_ic_dc@micromipsplt>:
+.*:    7903 ff9e       addiu   \$2,\$pc,1048184
+#                                  ^ 0x10200070
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100204 <f_lo@micromipsplt>:
+.*:    7903 ff9c       addiu   \$2,\$pc,1048176
+#                                  ^ 0x10200074
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+Disassembly of section \.text\.a:
+
+10101000 <testc>:
+.*:    .... ....       jal     [0-9a-f]+ <f_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8070       lw      \$2,-32656\(\$3\)
+#                                  ^ global GOT entry for f_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8018       lw      \$2,-32744\(\$3\)
+#                                  ^ local GOT entry for f_ic_dc@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_du_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_du_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 801c       lw      \$2,-32740\(\$3\)
+#                                  ^ local GOT entry for f_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_du_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_du_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8020       lw      \$2,-32736\(\$3\)
+#                                  ^ local GOT entry for f_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_iu_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 806c       lw      \$2,-32660\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_iu_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8024       lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_du_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_iu_du_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8028       lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_du_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_iu_du_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 802c       lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8030       lw      \$2,-32720\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8034       lw      \$2,-32716\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic_dc@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_du_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_du_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8038       lw      \$2,-32712\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_du_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_du_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 803c       lw      \$2,-32708\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_iu_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8040       lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_iu_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8044       lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_du_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_iu_du_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8048       lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_iu_du_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 804c       lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    459f            jr      \$31
+
+Disassembly of section \.text\.b:
+
+10102000 <testu>:
+.*:    ........        jal     [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c628074        lw      \$2,-32652\(\$3\)
+#                                  ^ global GOT entry for f_iu
+.*:    8c628050        lw      \$2,-32688\(\$3\)
+#                                  ^ local GOT entry for f_iu_dc@micromipsplt
+.*:    8c62806c        lw      \$2,-32660\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    8c628024        lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@micromipsplt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628054        lw      \$2,-32684\(\$3\)
+#                                  ^ local GOT entry for f_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628058        lw      \$2,-32680\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628028        lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62802c        lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62805c        lw      \$2,-32676\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu@micromipsplt
+.*:    8c628060        lw      \$2,-32672\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_dc@micromipsplt
+.*:    8c628040        lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@micromipsplt
+.*:    8c628044        lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@micromipsplt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628064        lw      \$2,-32668\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628068        lw      \$2,-32664\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628048        lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62804c        lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    03e00008        jr      \$31
+
+Disassembly of section \.text\.c:
+
+10103000 <testlo>:
+.*:    3040 0205       li      \$2,517
+#                                  ^ low 16 bits of f_lo@micromipsplt
+.*:    3040 01a5       li      \$2,421
+#                                  ^ low 16 bits of f_lo_dc@micromipsplt
+.*:    3040 0175       li      \$2,373
+#                                  ^ low 16 bits of f_lo_ic@micromipsplt
+.*:    3040 01f9       li      \$2,505
+#                                  ^ low 16 bits of f_lo_ic_dc@micromipsplt
+.*:    3040 00e0       li      \$2,224
+#                                  ^ low 16 bits of f_lo_du@plt
+.*:    3040 0070       li      \$2,112
+#                                  ^ low 16 bits of f_lo_du_dc@plt
+.*:    3040 0060       li      \$2,96
+#                                  ^ low 16 bits of f_lo_du_ic@plt
+.*:    3040 0030       li      \$2,48
+#                                  ^ low 16 bits of f_lo_du_ic_dc@plt
+.*:    3040 0121       li      \$2,289
+#                                  ^ low 16 bits of f_lo_iu@micromipsplt
+.*:    3040 0151       li      \$2,337
+#                                  ^ low 16 bits of f_lo_iu_dc@micromipsplt
+.*:    3040 0169       li      \$2,361
+#                                  ^ low 16 bits of f_lo_iu_ic@micromipsplt
+.*:    3040 01e1       li      \$2,481
+#                                  ^ low 16 bits of f_lo_iu_ic_dc@micromipsplt
+.*:    3040 00d0       li      \$2,208
+#                                  ^ low 16 bits of f_lo_iu_du@plt
+.*:    3040 0020       li      \$2,32
+#                                  ^ low 16 bits of f_lo_iu_du_dc@plt
+.*:    3040 0100       li      \$2,256
+#                                  ^ low 16 bits of f_lo_iu_du_ic@plt
+.*:    3040 0110       li      \$2,272
+#                                  ^ low 16 bits of f_lo_iu_du_ic_dc@plt
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-word.rd b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips-word.rd
new file mode 100644 (file)
index 0000000..2c872af
--- /dev/null
@@ -0,0 +1,198 @@
+
+Dynamic section .*
+#...
+ 0x00000003 \(PLTGOT\)                     0x10202000
+#...
+ 0x70000013 \(MIPS_GOTSYM\)                0x1f
+ 0x00000014 \(PLTREL\)                     REL
+ 0x00000017 \(JMPREL\)                     0x10005000
+ 0x00000002 \(PLTRELSZ\)                   224 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\)                0x10200000
+#...
+Relocation section '\.rel\.dyn' .*
+# All symbols are referenced by a .word in the .data section, so pointer
+# equality matters.  If a PLT is needed to satisfy a direct call or %lo
+# relocation, the symbol should have a nonzero value and there should be
+# no dynamic relocations against it.  The only relocations here are for
+# undefined 0-value symbols.  Note that unlike x86, we do not create a PLT
+# for the uncalled symbol 'f' in order to maintain backward compatibility
+# with pre-PLT ld.sos.
+ Offset     Info    Type            Sym\.Value  Sym\. Name
+00000000  00000000 R_MIPS_NONE      
+10201028  00001f03 R_MIPS_REL32      00000000   f_iu_ic
+10201008  00002003 R_MIPS_REL32      00000000   f_ic
+10201020  00002103 R_MIPS_REL32      00000000   f_iu
+10201000  00002203 R_MIPS_REL32      00000000   f
+
+Relocation section '\.rel\.plt' .*
+ Offset     Info    Type            Sym\.Value  Sym\. Name
+10200008  [^ ]+ R_MIPS_JUMP_SLOT  10100121   f_lo_iu
+1020000c  [^ ]+ R_MIPS_JUMP_SLOT  10100020   f_lo_iu_du_dc
+10200010  [^ ]+ R_MIPS_JUMP_SLOT  10100030   f_lo_du_ic_dc
+10200014  [^ ]+ R_MIPS_JUMP_SLOT  10100040   f_du_dc
+10200018  [^ ]+ R_MIPS_JUMP_SLOT  10100151   f_lo_iu_dc
+1020001c  [^ ]+ R_MIPS_JUMP_SLOT  10100050   f_iu_du_ic
+10200020  [^ ]+ R_MIPS_JUMP_SLOT  10100060   f_lo_du_ic
+10200024  [^ ]+ R_MIPS_JUMP_SLOT  1010015d   f_iu_dc
+10200028  [^ ]+ R_MIPS_JUMP_SLOT  10100169   f_lo_iu_ic
+1020002c  [^ ]+ R_MIPS_JUMP_SLOT  10100175   f_lo_ic
+10200030  [^ ]+ R_MIPS_JUMP_SLOT  10100070   f_lo_du_dc
+10200034  [^ ]+ R_MIPS_JUMP_SLOT  10100080   f_du
+10200038  [^ ]+ R_MIPS_JUMP_SLOT  10100090   f_du_ic_dc
+1020003c  [^ ]+ R_MIPS_JUMP_SLOT  101000a0   f_du_ic
+10200040  [^ ]+ R_MIPS_JUMP_SLOT  101000b0   f_iu_du_dc
+10200044  [^ ]+ R_MIPS_JUMP_SLOT  101001a5   f_lo_dc
+10200048  [^ ]+ R_MIPS_JUMP_SLOT  101000c0   f_iu_du
+1020004c  [^ ]+ R_MIPS_JUMP_SLOT  101000d0   f_lo_iu_du
+10200050  [^ ]+ R_MIPS_JUMP_SLOT  101001b1   f_dc
+10200054  [^ ]+ R_MIPS_JUMP_SLOT  101001bd   f_ic_dc
+10200058  [^ ]+ R_MIPS_JUMP_SLOT  101000e0   f_lo_du
+1020005c  [^ ]+ R_MIPS_JUMP_SLOT  101001c9   f_iu_ic_dc
+10200060  [^ ]+ R_MIPS_JUMP_SLOT  101000f0   f_iu_du_ic_dc
+10200064  [^ ]+ R_MIPS_JUMP_SLOT  101001e1   f_lo_iu_ic_dc
+10200068  [^ ]+ R_MIPS_JUMP_SLOT  10100100   f_lo_iu_du_ic
+1020006c  [^ ]+ R_MIPS_JUMP_SLOT  10100110   f_lo_iu_du_ic_dc
+10200070  [^ ]+ R_MIPS_JUMP_SLOT  101001f9   f_lo_ic_dc
+10200074  [^ ]+ R_MIPS_JUMP_SLOT  10100205   f_lo
+
+Symbol table '\.dynsym' .*
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+# All symbols have their address taken, so PLT symbols need to have a nonzero
+# value.  They must also have STO_MIPS_PLT in order to distinguish them from
+# old-style lazy-binding stubs).
+#
+# A MIPS (as opposed to microMIPS) PLT should be used as the symbol value
+# if and only if the function has a direct MIPS caller (du).
+    .*: 10100121     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu
+    .*: 10100020     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_dc
+#...
+    .*: 10100030     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic_dc
+    .*: 10100040     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du_dc
+    .*: 10100151     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_dc
+    .*: 10100050     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du_ic
+    .*: 10100060     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic
+    .*: 1010015d     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_dc
+    .*: 10100169     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic
+    .*: 10100175     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic
+    .*: 10100070     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_dc
+    .*: 10100080     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du
+    .*: 10100090     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du_ic_dc
+    .*: 101000a0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_du_ic
+    .*: 101000b0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du_dc
+    .*: 101001a5     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_dc
+    .*: 101000c0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du
+    .*: 101000d0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du
+    .*: 101001b1     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_dc
+    .*: 101001bd     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_ic_dc
+    .*: 101000e0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du
+    .*: 101001c9     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_ic_dc
+    .*: 101000f0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_iu_du_ic_dc
+#...
+    .*: 101001e1     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic_dc
+    .*: 10100100     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic
+    .*: 10100110     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic_dc
+    .*: 101001f9     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic_dc
+    .*: 10100205     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo
+# The start of the GOT-mapped area.  This should only contain functions that
+# are accessed purely via the traditional psABI scheme.  Since the functions
+# have their addresses taken, they cannot use a lazy-binding stub.
+# The symbol values are therefore all zero.
+    31: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_ic
+    32: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_ic
+    33: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu
+    34: 00000000     0 FUNC    GLOBAL DEFAULT  UND f
+
+Symbol table '\.symtab' .*
+#...
+Hex dump of section '\.data':
+  0x10201000 (00000000|00000000) (101001b1|b1011010) (00000000|00000000) (101001bd|bd011010) .*
+  0x10201010 (10100080|80001010) (10100040|40001010) (101000a0|a0001010) (10100090|90001010) .*
+  0x10201020 (00000000|00000000) (1010015d|5d011010) (00000000|00000000) (101001c9|c9011010) .*
+  0x10201030 (101000c0|c0001010) (101000b0|b0001010) (10100050|50001010) (101000f0|f0001010) .*
+  0x10201040 (10100205|05021010) (101001a5|a5011010) (10100175|75011010) (101001f9|f9011010) .*
+  0x10201050 (101000e0|e0001010) (10100070|70001010) (10100060|60001010) (10100030|30001010) .*
+  0x10201060 (10100121|21011010) (10100151|51011010) (10100169|69011010) (101001e1|e1011010) .*
+  0x10201070 (101000d0|d0001010) (10100020|20001010) (10100100|00011010) (10100110|10011010) .*
+
+
+Primary GOT:
+ Canonical gp value: 10209ff0
+
+ Reserved entries:
+   Address     Access  Initial Purpose
+  10202000 -32752\(gp\) 00000000 Lazy resolver
+  10202004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+# See the disassembly output for the meaning of each entry.
+ Local entries:
+   Address     Access  Initial
+  10202008 -32744\(gp\) 101001bd
+  1020200c -32740\(gp\) 101000a0
+  10202010 -32736\(gp\) 10100090
+  10202014 -32732\(gp\) 101001c9
+  10202018 -32728\(gp\) 10100050
+  1020201c -32724\(gp\) 101000f0
+  10202020 -32720\(gp\) 10100175
+  10202024 -32716\(gp\) 101001f9
+  10202028 -32712\(gp\) 10100060
+  1020202c -32708\(gp\) 10100030
+  10202030 -32704\(gp\) 10100169
+  10202034 -32700\(gp\) 101001e1
+  10202038 -32696\(gp\) 10100100
+  1020203c -32692\(gp\) 10100110
+  10202040 -32688\(gp\) 1010015d
+  10202044 -32684\(gp\) 101000c0
+  10202048 -32680\(gp\) 101000b0
+  1020204c -32676\(gp\) 10100121
+  10202050 -32672\(gp\) 10100151
+  10202054 -32668\(gp\) 101000d0
+  10202058 -32664\(gp\) 10100020
+
+ Global entries:
+   Address     Access  Initial Sym\.Val\. Type    Ndx Name
+  1020205c -32660\(gp\) 00000000 00000000 FUNC    UND f_iu_ic
+  10202060 -32656\(gp\) 00000000 00000000 FUNC    UND f_ic
+  10202064 -32652\(gp\) 00000000 00000000 FUNC    UND f_iu
+  10202068 -32648\(gp\) 00000000 00000000 FUNC    UND f
+
+
+PLT GOT:
+
+ Reserved entries:
+   Address  Initial Purpose
+  10200000 00000000 PLT lazy resolver
+  10200004 00000000 Module pointer
+
+ Entries:
+   Address  Initial Sym\.Val\. Type    Ndx Name
+  10200008 10100000 10100121 FUNC    UND f_lo_iu
+  1020000c 10100000 10100020 FUNC    UND f_lo_iu_du_dc
+  10200010 10100000 10100030 FUNC    UND f_lo_du_ic_dc
+  10200014 10100000 10100040 FUNC    UND f_du_dc
+  10200018 10100000 10100151 FUNC    UND f_lo_iu_dc
+  1020001c 10100000 10100050 FUNC    UND f_iu_du_ic
+  10200020 10100000 10100060 FUNC    UND f_lo_du_ic
+  10200024 10100000 1010015d FUNC    UND f_iu_dc
+  10200028 10100000 10100169 FUNC    UND f_lo_iu_ic
+  1020002c 10100000 10100175 FUNC    UND f_lo_ic
+  10200030 10100000 10100070 FUNC    UND f_lo_du_dc
+  10200034 10100000 10100080 FUNC    UND f_du
+  10200038 10100000 10100090 FUNC    UND f_du_ic_dc
+  1020003c 10100000 101000a0 FUNC    UND f_du_ic
+  10200040 10100000 101000b0 FUNC    UND f_iu_du_dc
+  10200044 10100000 101001a5 FUNC    UND f_lo_dc
+  10200048 10100000 101000c0 FUNC    UND f_iu_du
+  1020004c 10100000 101000d0 FUNC    UND f_lo_iu_du
+  10200050 10100000 101001b1 FUNC    UND f_dc
+  10200054 10100000 101001bd FUNC    UND f_ic_dc
+  10200058 10100000 101000e0 FUNC    UND f_lo_du
+  1020005c 10100000 101001c9 FUNC    UND f_iu_ic_dc
+  10200060 10100000 101000f0 FUNC    UND f_iu_du_ic_dc
+  10200064 10100000 101001e1 FUNC    UND f_lo_iu_ic_dc
+  10200068 10100000 10100100 FUNC    UND f_lo_iu_du_ic
+  1020006c 10100000 10100110 FUNC    UND f_lo_iu_du_ic_dc
+  10200070 10100000 101001f9 FUNC    UND f_lo_ic_dc
+  10200074 10100000 10100205 FUNC    UND f_lo
+
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips.od b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips.od
new file mode 100644 (file)
index 0000000..416509f
--- /dev/null
@@ -0,0 +1,512 @@
+
+.* file format .*
+
+
+Disassembly of section \.plt:
+
+# Only _du (direct call from uncompressed code) functions should have
+# non-microMIPS PLTs.  All the rest must be microMIPS.
+10100000 <_PROCEDURE_LINKAGE_TABLE_>:
+.*:    3c1c1020        lui     \$28,0x1020
+.*:    8f990000        lw      \$25,0\(\$28\)
+.*:    279c0000        addiu   \$28,\$28,0
+.*:    031cc023        subu    \$24,\$24,\$28
+.*:    03e07821        move    \$15,\$31
+.*:    0018c082        srl     \$24,\$24,0x2
+.*:    0320f809        jalr    \$25
+.*:    2718fffe        addiu   \$24,\$24,-2
+
+10100020 <f_lo_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9000c        lw      \$25,12\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8000c        addiu   \$24,\$15,12
+
+10100030 <f_lo_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90010        lw      \$25,16\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80010        addiu   \$24,\$15,16
+
+10100040 <f_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90014        lw      \$25,20\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80014        addiu   \$24,\$15,20
+
+10100050 <f_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9001c        lw      \$25,28\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8001c        addiu   \$24,\$15,28
+
+10100060 <f_lo_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90020        lw      \$25,32\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80020        addiu   \$24,\$15,32
+
+10100070 <f_lo_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90030        lw      \$25,48\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80030        addiu   \$24,\$15,48
+
+10100080 <f_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90034        lw      \$25,52\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80034        addiu   \$24,\$15,52
+
+10100090 <f_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90038        lw      \$25,56\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80038        addiu   \$24,\$15,56
+
+101000a0 <f_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9003c        lw      \$25,60\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8003c        addiu   \$24,\$15,60
+
+101000b0 <f_iu_du_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90040        lw      \$25,64\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80040        addiu   \$24,\$15,64
+
+101000c0 <f_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90048        lw      \$25,72\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80048        addiu   \$24,\$15,72
+
+101000d0 <f_lo_iu_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9004c        lw      \$25,76\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8004c        addiu   \$24,\$15,76
+
+101000e0 <f_lo_du@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90058        lw      \$25,88\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80058        addiu   \$24,\$15,88
+
+101000f0 <f_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90060        lw      \$25,96\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80060        addiu   \$24,\$15,96
+
+10100100 <f_lo_iu_du_ic@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df90068        lw      \$25,104\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f80068        addiu   \$24,\$15,104
+
+10100110 <f_lo_iu_du_ic_dc@plt>:
+.*:    3c0f1020        lui     \$15,0x1020
+.*:    8df9006c        lw      \$25,108\(\$15\)
+.*:    03200008        jr      \$25
+.*:    25f8006c        addiu   \$24,\$15,108
+
+10100120 <f_lo_iu@micromipsplt>:
+.*:    7903 ffba       addiu   \$2,\$pc,1048296
+#                                  ^ 0x10200008
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+1010012c <f_lo_iu_du_dc@micromipsplt>:
+.*:    7903 ffb8       addiu   \$2,\$pc,1048288
+#                                  ^ 0x1020000c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100138 <f_lo_du_ic_dc@micromipsplt>:
+.*:    7903 ffb6       addiu   \$2,\$pc,1048280
+#                                  ^ 0x10200010
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100144 <f_du_dc@micromipsplt>:
+.*:    7903 ffb4       addiu   \$2,\$pc,1048272
+#                                  ^ 0x10200014
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100150 <f_lo_iu_dc@micromipsplt>:
+.*:    7903 ffb2       addiu   \$2,\$pc,1048264
+#                                  ^ 0x10200018
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+1010015c <f_iu_dc@micromipsplt>:
+.*:    7903 ffb2       addiu   \$2,\$pc,1048264
+#                                  ^ 0x10200024
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100168 <f_lo_iu_ic@micromipsplt>:
+.*:    7903 ffb0       addiu   \$2,\$pc,1048256
+#                                  ^ 0x10200028
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100174 <f_lo_ic@micromipsplt>:
+.*:    7903 ffae       addiu   \$2,\$pc,1048248
+#                                  ^ 0x1020002c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100180 <f_lo_du_dc@micromipsplt>:
+.*:    7903 ffac       addiu   \$2,\$pc,1048240
+#                                  ^ 0x10200030
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+1010018c <f_du_ic_dc@micromipsplt>:
+.*:    7903 ffab       addiu   \$2,\$pc,1048236
+#                                  ^ 0x10200038
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100198 <f_iu_du_dc@micromipsplt>:
+.*:    7903 ffaa       addiu   \$2,\$pc,1048232
+#                                  ^ 0x10200040
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001a4 <f_lo_dc@micromipsplt>:
+.*:    7903 ffa8       addiu   \$2,\$pc,1048224
+#                                  ^ 0x10200044
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001b0 <f_dc@micromipsplt>:
+.*:    7903 ffa8       addiu   \$2,\$pc,1048224
+#                                  ^ 0x10200050
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001bc <f_ic_dc@micromipsplt>:
+.*:    7903 ffa6       addiu   \$2,\$pc,1048216
+#                                  ^ 0x10200054
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001c8 <f_iu_ic_dc@micromipsplt>:
+.*:    7903 ffa5       addiu   \$2,\$pc,1048212
+#                                  ^ 0x1020005c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001d4 <f_iu_du_ic_dc@micromipsplt>:
+.*:    7903 ffa3       addiu   \$2,\$pc,1048204
+#                                  ^ 0x10200060
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001e0 <f_lo_iu_ic_dc@micromipsplt>:
+.*:    7903 ffa1       addiu   \$2,\$pc,1048196
+#                                  ^ 0x10200064
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001ec <f_lo_iu_du_ic_dc@micromipsplt>:
+.*:    7903 ffa0       addiu   \$2,\$pc,1048192
+#                                  ^ 0x1020006c
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+101001f8 <f_lo_ic_dc@micromipsplt>:
+.*:    7903 ff9e       addiu   \$2,\$pc,1048184
+#                                  ^ 0x10200070
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+10100204 <f_lo@micromipsplt>:
+.*:    7903 ff9c       addiu   \$2,\$pc,1048176
+#                                  ^ 0x10200074
+.*:    ff22 0000       lw      \$25,0\(\$2\)
+.*:    4599            jr      \$25
+.*:    0f02            move    \$24,\$2
+
+Disassembly of section \.MIPS\.stubs:
+
+10101000 <_MIPS_STUBS_>:
+# Lazy-binding stub for f_iu.
+.*:    ff3c 8010       lw      \$25,-32752\(\$28\)
+.*:    0dff            move    \$15,\$31
+.*:    45d9            jalr    \$25
+.*:    3300 0021       li      \$24,33
+# Lazy-binding stub for f_ic.
+.*:    ff3c 8010       lw      \$25,-32752\(\$28\)
+.*:    0dff            move    \$15,\$31
+.*:    45d9            jalr    \$25
+.*:    3300 0020       li      \$24,32
+# Lazy-binding stub for f_iu_ic.
+.*:    ff3c 8010       lw      \$25,-32752\(\$28\)
+.*:    0dff            move    \$15,\$31
+.*:    45d9            jalr    \$25
+.*:    3300 001f       li      \$24,31
+       \.\.\.
+
+Disassembly of section \.text\.a:
+
+10102000 <testc>:
+.*:    .... ....       jal     [0-9a-f]+ <f_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8070       lw      \$2,-32656\(\$3\)
+#                                  ^ global GOT entry for f_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8018       lw      \$2,-32744\(\$3\)
+#                                  ^ local GOT entry for f_ic_dc@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_du_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_du_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 801c       lw      \$2,-32740\(\$3\)
+#                                  ^ local GOT entry for f_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_du_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_du_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8020       lw      \$2,-32736\(\$3\)
+#                                  ^ local GOT entry for f_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_iu_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 806c       lw      \$2,-32660\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_iu_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8024       lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_du_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_iu_du_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8028       lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_iu_du_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_iu_du_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 802c       lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8030       lw      \$2,-32720\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8034       lw      \$2,-32716\(\$3\)
+#                                  ^ local GOT entry for f_lo_ic_dc@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_du_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_du_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8038       lw      \$2,-32712\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_du_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_du_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 803c       lw      \$2,-32708\(\$3\)
+#                                  ^ local GOT entry for f_lo_du_ic_dc@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_iu_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8040       lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_iu_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8044       lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@micromipsplt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_du_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_iu_du_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 8048       lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    .... ....       jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@micromipsplt>
+.*:    0000 0000       nop
+.*:    .... ....       j       [0-9a-f]+ <f_lo_iu_du_ic_dc@micromipsplt>
+.*:    0c00            nop
+.*:    fc43 804c       lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    459f            jr      \$31
+
+Disassembly of section \.text\.b:
+
+10103000 <testu>:
+.*:    ........        jal     [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c628074        lw      \$2,-32652\(\$3\)
+#                                  ^ global GOT entry for f_iu
+.*:    8c628050        lw      \$2,-32688\(\$3\)
+#                                  ^ local GOT entry for f_iu_dc@micromipsplt
+.*:    8c62806c        lw      \$2,-32660\(\$3\)
+#                                  ^ global GOT entry for f_iu_ic
+.*:    8c628024        lw      \$2,-32732\(\$3\)
+#                                  ^ local GOT entry for f_iu_ic_dc@micromipsplt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628054        lw      \$2,-32684\(\$3\)
+#                                  ^ local GOT entry for f_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628058        lw      \$2,-32680\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628028        lw      \$2,-32728\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62802c        lw      \$2,-32724\(\$3\)
+#                                  ^ local GOT entry for f_iu_du_ic_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        jal     [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62805c        lw      \$2,-32676\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu@micromipsplt
+.*:    8c628060        lw      \$2,-32672\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_dc@micromipsplt
+.*:    8c628040        lw      \$2,-32704\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic@micromipsplt
+.*:    8c628044        lw      \$2,-32700\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_ic_dc@micromipsplt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du@plt>
+.*:    00000000        nop
+.*:    8c628064        lw      \$2,-32668\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_dc@plt>
+.*:    00000000        nop
+.*:    8c628068        lw      \$2,-32664\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_dc@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic@plt>
+.*:    00000000        nop
+.*:    8c628048        lw      \$2,-32696\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic@plt
+.*:    ........        jal     [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    ........        j       [0-9a-f]+ <f_lo_iu_du_ic_dc@plt>
+.*:    00000000        nop
+.*:    8c62804c        lw      \$2,-32692\(\$3\)
+#                                  ^ local GOT entry for f_lo_iu_du_ic_dc@plt
+.*:    03e00008        jr      \$31
+
+Disassembly of section \.text\.c:
+
+10104000 <testlo>:
+.*:    3040 0205       li      \$2,517
+#                                  ^ low 16 bits of f_lo@micromipsplt
+.*:    3040 01a5       li      \$2,421
+#                                  ^ low 16 bits of f_lo_dc@micromipsplt
+.*:    3040 0175       li      \$2,373
+#                                  ^ low 16 bits of f_lo_ic@micromipsplt
+.*:    3040 01f9       li      \$2,505
+#                                  ^ low 16 bits of f_lo_ic_dc@micromipsplt
+.*:    3040 00e0       li      \$2,224
+#                                  ^ low 16 bits of f_lo_du@plt
+.*:    3040 0070       li      \$2,112
+#                                  ^ low 16 bits of f_lo_du_dc@plt
+.*:    3040 0060       li      \$2,96
+#                                  ^ low 16 bits of f_lo_du_ic@plt
+.*:    3040 0030       li      \$2,48
+#                                  ^ low 16 bits of f_lo_du_ic_dc@plt
+.*:    3040 0121       li      \$2,289
+#                                  ^ low 16 bits of f_lo_iu@micromipsplt
+.*:    3040 0151       li      \$2,337
+#                                  ^ low 16 bits of f_lo_iu_dc@micromipsplt
+.*:    3040 0169       li      \$2,361
+#                                  ^ low 16 bits of f_lo_iu_ic@micromipsplt
+.*:    3040 01e1       li      \$2,481
+#                                  ^ low 16 bits of f_lo_iu_ic_dc@micromipsplt
+.*:    3040 00d0       li      \$2,208
+#                                  ^ low 16 bits of f_lo_iu_du@plt
+.*:    3040 0020       li      \$2,32
+#                                  ^ low 16 bits of f_lo_iu_du_dc@plt
+.*:    3040 0100       li      \$2,256
+#                                  ^ low 16 bits of f_lo_iu_du_ic@plt
+.*:    3040 0110       li      \$2,272
+#                                  ^ low 16 bits of f_lo_iu_du_ic_dc@plt
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips.rd b/ld/testsuite/ld-mips-elf/compressed-plt-1-o32-umips.rd
new file mode 100644 (file)
index 0000000..8f7d85c
--- /dev/null
@@ -0,0 +1,170 @@
+
+Dynamic section .*
+#...
+ 0x00000003 \(PLTGOT\)                     0x10201000
+#...
+ 0x70000013 \(MIPS_GOTSYM\)                0x1f
+ 0x00000014 \(PLTREL\)                     REL
+ 0x00000017 \(JMPREL\)                     0x10004000
+ 0x00000002 \(PLTRELSZ\)                   224 \(bytes\)
+ 0x70000032 \(MIPS_PLTGOT\)                0x10200000
+#...
+Relocation section '\.rel\.plt' .*
+ Offset     Info    Type            Sym\.Value  Sym\. Name
+10200008  [^ ]+ R_MIPS_JUMP_SLOT  10100121   f_lo_iu
+1020000c  [^ ]+ R_MIPS_JUMP_SLOT  10100020   f_lo_iu_du_dc
+10200010  [^ ]+ R_MIPS_JUMP_SLOT  10100030   f_lo_du_ic_dc
+10200014  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du_dc
+10200018  [^ ]+ R_MIPS_JUMP_SLOT  10100151   f_lo_iu_dc
+1020001c  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du_ic
+10200020  [^ ]+ R_MIPS_JUMP_SLOT  10100060   f_lo_du_ic
+10200024  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_dc
+10200028  [^ ]+ R_MIPS_JUMP_SLOT  10100169   f_lo_iu_ic
+1020002c  [^ ]+ R_MIPS_JUMP_SLOT  10100175   f_lo_ic
+10200030  [^ ]+ R_MIPS_JUMP_SLOT  10100070   f_lo_du_dc
+10200034  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du
+10200038  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du_ic_dc
+1020003c  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_du_ic
+10200040  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du_dc
+10200044  [^ ]+ R_MIPS_JUMP_SLOT  101001a5   f_lo_dc
+10200048  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du
+1020004c  [^ ]+ R_MIPS_JUMP_SLOT  101000d0   f_lo_iu_du
+10200050  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_dc
+10200054  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_ic_dc
+10200058  [^ ]+ R_MIPS_JUMP_SLOT  101000e0   f_lo_du
+1020005c  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_ic_dc
+10200060  [^ ]+ R_MIPS_JUMP_SLOT  00000000   f_iu_du_ic_dc
+10200064  [^ ]+ R_MIPS_JUMP_SLOT  101001e1   f_lo_iu_ic_dc
+10200068  [^ ]+ R_MIPS_JUMP_SLOT  10100100   f_lo_iu_du_ic
+1020006c  [^ ]+ R_MIPS_JUMP_SLOT  10100110   f_lo_iu_du_ic_dc
+10200070  [^ ]+ R_MIPS_JUMP_SLOT  101001f9   f_lo_ic_dc
+10200074  [^ ]+ R_MIPS_JUMP_SLOT  10100205   f_lo
+
+Symbol table '\.dynsym' .*
+   Num:    Value  Size Type    Bind   Vis      Ndx Name
+     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
+# _lo symbols have their address taken, so their PLT symbols need to have
+# a nonzero value.  They must also have STO_MIPS_PLT in order to distinguish
+# them from old-style lazy-binding stubs.  Non-_lo symbols are only called,
+# so their PLT symbols should have a zero value and no STO_MIPS_PLT annotation.
+#
+# A MIPS (as opposed to microMIPS) PLT should be used as the symbol value
+# if and only if the function has a direct MIPS caller (du).
+    .*: 10100121     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu
+    .*: 10100020     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_dc
+#...
+    .*: 10100030     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du_dc
+    .*: 10100151     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du_ic
+    .*: 10100060     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_ic
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_dc
+    .*: 10100169     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic
+    .*: 10100175     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic
+    .*: 10100070     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du_ic_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_du_ic
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du_dc
+    .*: 101001a5     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du
+    .*: 101000d0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_ic_dc
+    .*: 101000e0     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_du
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_ic_dc
+    .*: 00000000     0 FUNC    GLOBAL DEFAULT  UND f_iu_du_ic_dc
+#...
+    .*: 101001e1     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_ic_dc
+    .*: 10100100     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic
+    .*: 10100110     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_iu_du_ic_dc
+    .*: 101001f9     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo_ic_dc
+    .*: 10100205     0 FUNC    GLOBAL DEFAULT \[MIPS PLT\]   UND f_lo
+# The start of the GOT-mapped area.  This should only contain functions that
+# are accessed purely via the traditional psABI scheme.  The symbol value
+# is the address of the lazy-binding stub.
+    31: 10101019     0 FUNC    GLOBAL DEFAULT  UND f_iu_ic
+    32: 1010100d     0 FUNC    GLOBAL DEFAULT  UND f_ic
+    33: 10101001     0 FUNC    GLOBAL DEFAULT  UND f_iu
+
+Symbol table '\.symtab' .*
+#...
+Primary GOT:
+ Canonical gp value: 10208ff0
+
+ Reserved entries:
+   Address     Access  Initial Purpose
+  10201000 -32752\(gp\) 00000000 Lazy resolver
+  10201004 -32748\(gp\) 80000000 Module pointer \(GNU extension\)
+
+# See the disassembly output for the meaning of each entry.
+ Local entries:
+   Address     Access  Initial
+  10201008 -32744\(gp\) 101001bd
+  1020100c -32740\(gp\) 101000a0
+  10201010 -32736\(gp\) 10100090
+  10201014 -32732\(gp\) 101001c9
+  10201018 -32728\(gp\) 10100050
+  1020101c -32724\(gp\) 101000f0
+  10201020 -32720\(gp\) 10100175
+  10201024 -32716\(gp\) 101001f9
+  10201028 -32712\(gp\) 10100060
+  1020102c -32708\(gp\) 10100030
+  10201030 -32704\(gp\) 10100169
+  10201034 -32700\(gp\) 101001e1
+  10201038 -32696\(gp\) 10100100
+  1020103c -32692\(gp\) 10100110
+  10201040 -32688\(gp\) 1010015d
+  10201044 -32684\(gp\) 101000c0
+  10201048 -32680\(gp\) 101000b0
+  1020104c -32676\(gp\) 10100121
+  10201050 -32672\(gp\) 10100151
+  10201054 -32668\(gp\) 101000d0
+  10201058 -32664\(gp\) 10100020
+
+ Global entries:
+   Address     Access  Initial Sym\.Val\. Type    Ndx Name
+  1020105c -32660\(gp\) 10101019 10101019 FUNC    UND f_iu_ic
+  10201060 -32656\(gp\) 1010100d 1010100d FUNC    UND f_ic
+  10201064 -32652\(gp\) 10101001 10101001 FUNC    UND f_iu
+
+
+PLT GOT:
+
+ Reserved entries:
+   Address  Initial Purpose
+  10200000 00000000 PLT lazy resolver
+  10200004 00000000 Module pointer
+
+ Entries:
+   Address  Initial Sym\.Val\. Type    Ndx Name
+  10200008 10100000 10100121 FUNC    UND f_lo_iu
+  1020000c 10100000 10100020 FUNC    UND f_lo_iu_du_dc
+  10200010 10100000 10100030 FUNC    UND f_lo_du_ic_dc
+  10200014 10100000 00000000 FUNC    UND f_du_dc
+  10200018 10100000 10100151 FUNC    UND f_lo_iu_dc
+  1020001c 10100000 00000000 FUNC    UND f_iu_du_ic
+  10200020 10100000 10100060 FUNC    UND f_lo_du_ic
+  10200024 10100000 00000000 FUNC    UND f_iu_dc
+  10200028 10100000 10100169 FUNC    UND f_lo_iu_ic
+  1020002c 10100000 10100175 FUNC    UND f_lo_ic
+  10200030 10100000 10100070 FUNC    UND f_lo_du_dc
+  10200034 10100000 00000000 FUNC    UND f_du
+  10200038 10100000 00000000 FUNC    UND f_du_ic_dc
+  1020003c 10100000 00000000 FUNC    UND f_du_ic
+  10200040 10100000 00000000 FUNC    UND f_iu_du_dc
+  10200044 10100000 101001a5 FUNC    UND f_lo_dc
+  10200048 10100000 00000000 FUNC    UND f_iu_du
+  1020004c 10100000 101000d0 FUNC    UND f_lo_iu_du
+  10200050 10100000 00000000 FUNC    UND f_dc
+  10200054 10100000 00000000 FUNC    UND f_ic_dc
+  10200058 10100000 101000e0 FUNC    UND f_lo_du
+  1020005c 10100000 00000000 FUNC    UND f_iu_ic_dc
+  10200060 10100000 00000000 FUNC    UND f_iu_du_ic_dc
+  10200064 10100000 101001e1 FUNC    UND f_lo_iu_ic_dc
+  10200068 10100000 10100100 FUNC    UND f_lo_iu_du_ic
+  1020006c 10100000 10100110 FUNC    UND f_lo_iu_du_ic_dc
+  10200070 10100000 101001f9 FUNC    UND f_lo_ic_dc
+  10200074 10100000 10100205 FUNC    UND f_lo
+
+
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1.ld b/ld/testsuite/ld-mips-elf/compressed-plt-1.ld
new file mode 100644 (file)
index 0000000..9f15af9
--- /dev/null
@@ -0,0 +1,38 @@
+SECTIONS
+{
+  . = 0x10000000;
+  .interp : { *(.interp) }
+  .reginfo : { *(.reginfo) }
+  .hash : { *(.hash) }
+  . = ALIGN(0x1000);
+  .dynsym : { *(.dynsym) }
+  . = ALIGN(0x1000);
+  .dynstr : { *(.dynstr) }
+  . = ALIGN(0x1000);
+  .dynamic : { *(.dynamic) }
+  . = ALIGN(0x1000);
+  .rel.dyn : { *(.rel.dyn) }
+  . = ALIGN(0x1000);
+  .rel.plt : { *(.rel.plt) }
+  . = 0x10100000;
+  .plt : { *(.plt) }
+  . = ALIGN(0x1000);
+  .MIPS.stubs : { *(.MIPS.stubs) }
+  . = ALIGN(0x1000);
+  .text.a : { *(.text.a) }
+  . = ALIGN(0x1000);
+  .text.b : { *(.text.b) }
+  . = ALIGN(0x1000);
+  .text.c : { *(.text.c) }
+  . = ALIGN(0x1000);
+  .text.d : { *(.text.d) }
+  . = 0x10200000;
+  .got.plt : { *(.got.plt) }
+  . = ALIGN(0x1000);
+  .data : { *(.data) }
+  . = ALIGN(0x1000);
+  _gp = . + 0x7ff0;
+  .got : { *(.got) }
+  . = ALIGN(0x1000);
+  .rld_map : { *(.rld_map) }
+}
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1.s b/ld/testsuite/ld-mips-elf/compressed-plt-1.s
new file mode 100644 (file)
index 0000000..aa0b497
--- /dev/null
@@ -0,0 +1,62 @@
+       .macro  call_stub, name
+       .set    push
+       .set    nomips16
+       .section .mips16.call.\name, "ax", @progbits
+       .ent    __call_stub_\name
+       .type   __call_stub_\name, @function
+__call_stub_\name:
+       la      $25, \name
+       jr      $25
+       .set    pop
+       .endm
+
+       # Flags to specify how a particular function is referenced
+
+       .equ    DC, 1           # Direct call from "compressed" code
+       .equ    IC, 2           # Indirect call from "compressed" code
+       .equ    DU, 4           # Direct call from "uncompressed" code
+       .equ    IU, 8           # Indirect call from "uncompressed" code
+       .equ    LO, 16          # Direct address reference (%lo)
+
+       # A wrapper around a macro called test_one, which is defined by
+       # the file that includes this one.  NAME is the name of a function
+       # that is referenced in the way described by FLAGS, an inclusive OR
+       # of the flags above.  The wrapper filters out any functions whose
+       # FLAGS are not a subset of FILTER.
+
+       .macro  test_filter, name, flags
+       .if     (\flags & filter) == \flags
+       test_one \name, \flags
+       .endif
+       .endm
+
+       .macro  test_all_dc, name, flags
+       test_filter \name, \flags
+       test_filter \name\()_dc, (\flags | DC)
+       .endm
+
+       .macro  test_all_ic, name, flags
+       test_all_dc \name, \flags
+       test_all_dc \name\()_ic, (\flags | IC)
+       .endm
+
+       .macro  test_all_du, name, flags
+       test_all_ic \name, \flags
+       test_all_ic \name\()_du, (\flags | DU)
+       .endm
+
+       .macro  test_all_iu, name, flags
+       test_all_du \name, \flags
+       test_all_du \name\()_iu, (\flags | IU)
+       .endm
+
+       .macro  test_all_lo, name, flags
+       test_all_iu \name, \flags
+       test_all_iu \name\()_lo, (\flags | LO)
+       .endm
+
+       # Test all the combinations of interest.
+
+       .macro  test_all
+       test_all_lo f, 0
+       .endm
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1a.s b/ld/testsuite/ld-mips-elf/compressed-plt-1a.s
new file mode 100644 (file)
index 0000000..d5c6b4f
--- /dev/null
@@ -0,0 +1,37 @@
+# Define a function with all "compressed" (dc and ic) references.
+
+       .abicalls
+       .option pic0
+
+       .include "compressed-plt-1.s"
+
+       .macro  test_one, name, types
+       .if     (\types) & DC
+       jal     \name
+       nop
+       .if     micromips
+       .ifdef  o32
+       j       \name
+       nop
+       .endif
+       .endif
+       .endif
+       .if     (\types) & IC
+       lw      $2, %call16(\name)($3)
+       .endif
+       .endm
+
+       .if     micromips
+       .set    micromips
+       .else
+       .set    mips16
+       .endif
+
+       .section .text.a, "ax", @progbits
+       .globl  testc
+       .ent    testc
+       .set    noreorder
+testc:
+       test_all
+       jr      $31
+       .end    testc
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1b.s b/ld/testsuite/ld-mips-elf/compressed-plt-1b.s
new file mode 100644 (file)
index 0000000..33deccb
--- /dev/null
@@ -0,0 +1,27 @@
+# Define a function with all "uncompressed" (du and iu) references.
+
+       .abicalls
+       .option pic0
+
+       .include "compressed-plt-1.s"
+
+       .macro  test_one, name, types
+       .if     (\types) & DU
+       jal     \name
+       nop
+       j       \name
+       nop
+       .endif
+       .if     (\types) & IU
+       lw      $2, %call16(\name)($3)
+       .endif
+       .endm
+
+       .section .text.b, "ax", @progbits
+       .globl  testu
+       .ent    testu
+       .set    noreorder
+testu:
+       test_all
+       jr      $31
+       .end    testu
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1c.s b/ld/testsuite/ld-mips-elf/compressed-plt-1c.s
new file mode 100644 (file)
index 0000000..651424b
--- /dev/null
@@ -0,0 +1,24 @@
+# Define a function with all direct (%lo) references.
+
+       .abicalls
+       .option pic0
+
+       .include "compressed-plt-1.s"
+
+       .macro  test_one, name, types
+       .if     (\types) & LO
+       li      $2,%lo(\name)
+       .endif
+       .endm
+
+       .if     micromips
+       .set    micromips
+       .endif
+
+       .section .text.c, "ax", @progbits
+       .globl  testlo
+       .ent    testlo
+       .set    noreorder
+testlo:
+       test_all
+       .end    testlo
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1d.s b/ld/testsuite/ld-mips-elf/compressed-plt-1d.s
new file mode 100644 (file)
index 0000000..8163c8e
--- /dev/null
@@ -0,0 +1,22 @@
+# Create a GOT reference for every function under test.
+
+       .abicalls
+       .option pic2
+
+       .include "compressed-plt-1.s"
+
+       .macro  test_one, name, types
+       lw      $2,%got(\name)($gp)
+       .endm
+
+       .if     micromips
+       .set    micromips
+       .endif
+
+       .section .text.d, "ax", @progbits
+       .globl  testgot
+       .ent    testgot
+       .set    noreorder
+testgot:
+       test_all
+       .end    testgot
diff --git a/ld/testsuite/ld-mips-elf/compressed-plt-1e.s b/ld/testsuite/ld-mips-elf/compressed-plt-1e.s
new file mode 100644 (file)
index 0000000..4084a6f
--- /dev/null
@@ -0,0 +1,13 @@
+# Create a .word reference for every function under test.
+
+       .abicalls
+       .option pic2
+
+       .include "compressed-plt-1.s"
+
+       .macro  test_one, name, types
+       .word   \name
+       .endm
+
+       .data
+       test_all
index 827181b..988b64b 100644 (file)
@@ -751,3 +751,79 @@ foreach { abi } $abis {
            [list "objdump -d jalr3.dd"] \
            "jalr3-${abi}"]]
 }
+
+proc build_mips_plt_lib { abi } {
+    global abi_asflags
+    global abi_ldflags
+
+    run_ld_link_tests [list \
+       [list "Shared $abi library for compressed PLT tests" \
+             "-shared $abi_ldflags($abi)" "" \
+             "$abi_asflags($abi)" \
+             { compressed-plt-1-dyn.s } \
+             {} \
+             "compressed-plt-1-${abi}-dyn.so"]]
+}
+
+proc run_mips_plt_test { name abi filter micromips suffix {extra {}} } {
+    global abi_asflags
+    global abi_ldflags
+
+    set as_flags "$abi_asflags($abi) --defsym filter=$filter"
+    append as_flags " --defsym micromips=$micromips --defsym $abi=1"
+    if {[string equal $abi o32]} {
+       append as_flags " -march=mips2"
+    }
+    set ld_flags "$abi_ldflags($abi) -T compressed-plt-1.ld"
+    set dynobj "tmpdir/compressed-plt-1-${abi}-dyn.so"
+    set files [list]
+    if { $filter & 3 } {
+       lappend files compressed-plt-1a.s
+    }
+    if { $filter & 12 } {
+       lappend files compressed-plt-1b.s
+    }
+    if { $filter & 16 } {
+       lappend files compressed-plt-1c.s
+    }
+    eval [list lappend files] $extra
+    set readelf_flags "-A --syms --relocs -d"
+    if { [string match "*word*" $suffix] } {
+       append readelf_flags " -x.data"
+    }
+    set objdump_flags "-d -Mgpr-names=numeric"
+    set basename "compressed-plt-1-${abi}-${suffix}"
+    run_ld_link_tests [list \
+       [list "$name" $ld_flags $dynobj \
+             "$as_flags" $files \
+             [list [list readelf $readelf_flags ${basename}.rd] \
+                   [list objdump $objdump_flags ${basename}.od]] \
+             $basename]]
+}
+
+if { $linux_gnu } {
+    build_mips_plt_lib o32
+    run_mips_plt_test "o32 PLTs for standard encoding" o32 28 0 se
+    run_mips_plt_test "o32 PLTs for MIPS16 encoding" o32 19 0 mips16-only
+    run_mips_plt_test "o32 PLTs for microMIPS encoding" o32 19 1 umips-only
+    run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16" \
+       o32 -1 0 mips16
+    run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 with %got" \
+       o32 -1 0 mips16-got compressed-plt-1d.s
+    run_mips_plt_test "o32 PLTs for mixed MIPS and MIPS16 with .word" \
+       o32 -1 0 mips16-word compressed-plt-1e.s
+    run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS" \
+       o32 -1 1 umips
+    run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS with %got" \
+       o32 -1 1 umips-got compressed-plt-1d.s
+    run_mips_plt_test "o32 PLTs for mixed MIPS and microMIPS with .word" \
+       o32 -1 1 umips-word compressed-plt-1e.s
+
+    if $has_newabi {
+       build_mips_plt_lib n32
+       run_mips_plt_test "n32 PLTs for mixed MIPS and MIPS16" \
+           n32 -1 0 mips16
+       run_mips_plt_test "n32 PLTs for mixed MIPS and microMIPS" \
+           n32 -1 1 umips
+    }
+}
index 64ac7b2..67c429f 100644 (file)
@@ -331,10 +331,12 @@ proc default_ld_compile { cc source object } {
 proc default_ld_assemble { as in_flags source object } {
     global ASFLAGS
     global host_triplet
+    global srcdir
+    global subdir
 
     if ![info exists ASFLAGS] { set ASFLAGS "" }
 
-    set flags [big_or_little_endian]
+    set flags "[big_or_little_endian] -I$srcdir/$subdir"
     set exec_output [run_host_cmd "$as" "$flags $in_flags $ASFLAGS -o $object $source"]
     set exec_output [prune_warnings $exec_output]
     if [string match "" $exec_output] then {