2006-02-28 Richard Sandiford <richard@codesourcery.com>
+ * ld-i386/vxworks1-lib.s, ld-i386/vxworks1-lib.dd,
+ * ld-i386/vxworks1-lib.rd, ld-i386/vxworks1.s, ld-i386/vxworks1.dd,
+ * ld-i386/vxworks1.rd, ld-i386/vxworks1.ld: New test.
+ * ld-i386/i386.exp: Run it.
+
+2006-02-28 Richard Sandiford <richard@codesourcery.com>
+
* ld-i386/emit-relocs.s, ld-i386/emit-relocs.d: New test.
* ld-i386/i386.exp: Run it.
# Test i386 linking; all types of relocs. This tests the assembler and
# tools like objdump as well as the linker.
+if {[istarget "i?86-*-vxworks"]} {
+ set i386tests {
+ {"VxWorks shared library test 1" "-shared -Tvxworks1.ld"
+ "" {vxworks1-lib.s}
+ {{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}}
+ "libvxworks1.so"}
+ {"VxWorks dynamic executable test 1" \
+ "tmpdir/libvxworks1.so -Tvxworks1.ld -q" "" {vxworks1.s}
+ {{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
+ "vxworks1"}
+ }
+ run_ld_link_tests $i386tests
+}
+
if { !([istarget "i?86-*-elf*"]
|| ([istarget "i?86-*-linux*"]
&& ![istarget "*-*-*aout*"]
--- /dev/null
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080300 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80300: ff b3 04 00 00 00 pushl 0x4\(%ebx\)
+ 80306: ff a3 08 00 00 00 jmp \*0x8\(%ebx\)
+ 8030c: 90 nop
+ 8030d: 90 nop
+ 8030e: 90 nop
+ 8030f: 90 nop
+
+00080310 <sexternal@plt>:
+ 80310: ff a3 0c 00 00 00 jmp \*0xc\(%ebx\)
+ 80316: 68 00 00 00 00 push \$0x0
+ 8031b: e9 e0 ff ff ff jmp 80300 <_PROCEDURE_LINKAGE_TABLE_>
+
+00080320 <sglobal@plt>:
+ 80320: ff a3 10 00 00 00 jmp \*0x10\(%ebx\)
+ 80326: 68 08 00 00 00 push \$0x8
+ 8032b: e9 d0 ff ff ff jmp 80300 <_PROCEDURE_LINKAGE_TABLE_>
+Disassembly of section \.text:
+
+00080400 <foo>:
+ 80400: 53 push %ebx
+ 80401: 8b 1d 00 00 00 00 mov 0x0,%ebx
+ 80407: 8b 99 00 00 00 00 mov 0x0\(%ecx\),%ebx
+ 8040d: 8b 83 14 00 00 00 mov 0x14\(%ebx\),%eax
+ 80413: ff 00 incl \(%eax\)
+ 80415: e8 0c 00 00 00 call 80426 <slocal>
+ 8041a: e8 01 ff ff ff call 80320 <sglobal@plt>
+ 8041f: e8 ec fe ff ff call 80310 <sexternal@plt>
+ 80424: 5b pop %ebx
+ 80425: c3 ret
+
+00080426 <slocal>:
+ 80426: c3 ret
+
+00080427 <sglobal>:
+ 80427: c3 ret
--- /dev/null
+
+Relocation section '\.rel\.plt' at offset 0x1218 contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name
+0008110c 00000507 R_386_JUMP_SLOT 00000000 sexternal
+00081110 00000807 R_386_JUMP_SLOT 00080427 sglobal
+
+Relocation section '\.rel\.dyn' at offset 0x1200 contains 3 entries:
+ Offset Info Type Sym\.Value Sym\. Name
+00080403 00000601 R_386_32 00000000 __GOTT_BASE__
+00080409 00000701 R_386_32 00000000 __GOTT_INDEX__
+00081114 00000406 R_386_GLOB_DAT 00080000 x
--- /dev/null
+ .text
+ .globl foo
+ .type foo, @function
+foo:
+ push %ebx
+ movl __GOTT_BASE__, %ebx
+ movl __GOTT_INDEX__(%ecx), %ebx
+ movl x@GOT(%ebx), %eax
+ incl (%eax)
+ call slocal@plt
+ call sglobal@plt
+ call sexternal@plt
+ pop %ebx
+ ret
+ .size foo, .-foo
+
+ .type slocal, @function
+slocal:
+ ret
+ .size slocal, .-slocal
+
+ .globl sglobal
+ .type sglobal, @function
+sglobal:
+ ret
+ .size sglobal, .-sglobal
+
+ .comm x,4,4
--- /dev/null
+
+.*: file format .*
+
+Disassembly of section \.plt:
+
+00080200 <_PROCEDURE_LINKAGE_TABLE_>:
+ 80200: ff 35 04 11 08 00 pushl 0x81104
+ 80202: R_386_32 _GLOBAL_OFFSET_TABLE_
+ 80206: ff 25 08 11 08 00 jmp \*0x81108
+ 80208: R_386_32 _GLOBAL_OFFSET_TABLE_
+ 8020c: 90 nop
+ 8020d: 90 nop
+ 8020e: 90 nop
+ 8020f: 90 nop
+
+00080210 <sglobal@plt>:
+ 80210: ff 25 0c 11 08 00 jmp \*0x8110c
+ 80212: R_386_32 _GLOBAL_OFFSET_TABLE_
+ 80216: 68 00 00 00 00 push \$0x0
+ 8021b: e9 e0 ff ff ff jmp 80200 <_PROCEDURE_LINKAGE_TABLE_>
+
+00080220 <foo@plt>:
+ 80220: ff 25 10 11 08 00 jmp \*0x81110
+ 80222: R_386_32 _GLOBAL_OFFSET_TABLE_
+ 80226: 68 08 00 00 00 push \$0x8
+ 8022b: e9 d0 ff ff ff jmp 80200 <_PROCEDURE_LINKAGE_TABLE_>
+Disassembly of section \.text:
+
+00080300 <_start>:
+ 80300: e8 1b ff ff ff call 80220 <foo@plt>
+ 80301: R_386_PLT32 \.plt
+ 80305: e8 05 00 00 00 call 8030f <sexternal>
+ 80306: R_386_PLT32 sexternal
+ 8030a: e9 01 ff ff ff jmp 80210 <sglobal@plt>
+ 8030b: R_386_PLT32 \.plt
+
+0008030f <sexternal>:
+ 8030f: c3 ret
--- /dev/null
+SECTIONS
+{
+ . = 0x80000;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+
+ . = ALIGN (0x100);
+ .rel.dyn : { *(.rel.dyn) }
+ .rel.plt : { *(.rel.plt) }
+
+ . = ALIGN (0x100);
+ .plt : { *(.plt) }
+
+ . = ALIGN (0x100);
+ .text : { *(.text) }
+
+ . = ALIGN (0x1000);
+ .dynamic : { *(.dynamic) }
+
+ . = ALIGN (0x100);
+ .got : { *(.got.plt) *(.got) }
+}
--- /dev/null
+
+Relocation section '\.rel\.plt' at offset .* contains 2 entries:
+ Offset Info Type Sym\.Value Sym\. Name
+0008110c .*07 R_386_JUMP_SLOT 00000000 sglobal
+00081110 .*07 R_386_JUMP_SLOT 00000000 foo
+
+Relocation section '\.rel\.text' at offset .* contains 3 entries:
+ Offset Info Type Sym.Value Sym. Name
+00080301 .*04 R_386_PLT32 00080200 .plt
+00080306 .*04 R_386_PLT32 0008030f sexternal
+0008030b .*04 R_386_PLT32 00080200 .plt
+
+Relocation section '\.rel\.plt\.unloaded' at offset .* contains 6 entries:
+ Offset Info Type Sym\.Value Sym\. Name
+00080202 .*01 R_386_32 00081100 _GLOBAL_OFFSET_TABLE_
+00080208 .*01 R_386_32 00081100 _GLOBAL_OFFSET_TABLE_
+00080212 .*01 R_386_32 00081100 _GLOBAL_OFFSET_TABLE_
+0008110c .*01 R_386_32 00080200 _PROCEDURE_LINKAGE_TAB.*
+00080222 .*01 R_386_32 00081100 _GLOBAL_OFFSET_TABLE_
+00081110 .*01 R_386_32 00080200 _PROCEDURE_LINKAGE_TAB.*
--- /dev/null
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ call foo@plt
+ call sexternal@plt
+ jmp sglobal@plt
+ .size _start, .-_start
+
+ .globl sexternal
+ .type sexternal,@function
+sexternal:
+ ret
+ .size sexternal, .-sexternal