Browse Source

Add function and function pointer tests for i386

This patch adds tests for function and function pointer for i386.

	* ld-i386/plt-lib.c: New file.
	* ld-i386/plt-main.out: Likewise.
	* ld-i386/plt-main1.c: Likewise.
	* ld-i386/plt-main1.rd: Likewise.
	* ld-i386/plt-main2.c: Likewise.
	* ld-i386/plt-main2.rd: Likewise.
	* ld-i386/plt-main3.c: Likewise.
	* ld-i386/plt-main3.rd: Likewise.
	* ld-i386/plt-main4.c: Likewise.
	* ld-i386/plt-main4.rd: Likewise.
	* ld-i386/plt-main5.c: Likewise.

	* ld-i386/i386.exp: Run plt-main tests.
gdb-7.9-branch
H.J. Lu 12 years ago
parent
commit
4a7a792388
  1. 16
      ld/testsuite/ChangeLog
  2. 70
      ld/testsuite/ld-i386/i386.exp
  3. 11
      ld/testsuite/ld-i386/plt-lib.c
  4. 1
      ld/testsuite/ld-i386/plt-main.out
  5. 8
      ld/testsuite/ld-i386/plt-main1.c
  6. 3
      ld/testsuite/ld-i386/plt-main1.rd
  7. 3
      ld/testsuite/ld-i386/plt-main2.c
  8. 3
      ld/testsuite/ld-i386/plt-main2.rd
  9. 15
      ld/testsuite/ld-i386/plt-main3.c
  10. 5
      ld/testsuite/ld-i386/plt-main3.rd
  11. 14
      ld/testsuite/ld-i386/plt-main4.c
  12. 5
      ld/testsuite/ld-i386/plt-main4.rd
  13. 15
      ld/testsuite/ld-i386/plt-main5.c

16
ld/testsuite/ChangeLog

@ -1,3 +1,19 @@
2014-11-21 H.J. Lu <hongjiu.lu@intel.com>
* ld-i386/plt-lib.c: New file.
* ld-i386/plt-main.out: Likewise.
* ld-i386/plt-main1.c: Likewise.
* ld-i386/plt-main1.rd: Likewise.
* ld-i386/plt-main2.c: Likewise.
* ld-i386/plt-main2.rd: Likewise.
* ld-i386/plt-main3.c: Likewise.
* ld-i386/plt-main3.rd: Likewise.
* ld-i386/plt-main4.c: Likewise.
* ld-i386/plt-main4.rd: Likewise.
* ld-i386/plt-main5.c: Likewise.
* ld-i386/i386.exp: Run plt-main tests.
2014-11-21 H.J. Lu <hongjiu.lu@intel.com>
* ld-x86-64/x86-64.exp: Run plt-main test with -pie.

70
ld/testsuite/ld-i386/i386.exp

@ -263,3 +263,73 @@ run_dump_test "pr12627"
run_dump_test "pr13302"
run_dump_test "pr14215"
run_dump_test "pr17057"
# Must be Linux native with the C compiler
if { [isnative]
&& [istarget "i?86-*-linux*"]
&& [which $CC] != 0 } {
run_cc_link_tests [list \
[list \
"Build plt-lib.so" \
"-shared" \
"-fPIC" \
{ plt-lib.c } \
{} \
"libplt-lib.so" \
] \
[list \
"Build libplt-main1.a" \
"" \
"-fPIC" \
{ plt-main1.c } \
{{readelf {-Wr} plt-main1.rd}} \
"libplt-main1.a" \
] \
[list \
"Build libplt-main2.a" \
"" \
"-fPIC" \
{ plt-main2.c } \
{{readelf {-Wr} plt-main2.rd}} \
"libplt-main2.a" \
] \
[list \
"Build libplt-main3.a" \
"" \
"-fPIC" \
{ plt-main3.c } \
{{readelf {-Wr} plt-main3.rd}} \
"libplt-main3.a" \
] \
[list \
"Build libplt-main4.a" \
"" \
"-fPIC" \
{ plt-main4.c } \
{{readelf {-Wr} plt-main4.rd}} \
"libplt-main4.a" \
] \
]
run_ld_link_exec_tests [] [list \
[list \
"Run plt-main" \
"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
tmpdir/plt-main4.o tmpdir/libplt-lib.so" \
"" \
{ plt-main5.c } \
"plt-main" \
"plt-main.out" \
] \
[list \
"Run plt-main with PIE" \
"tmpdir/plt-main1.o tmpdir/plt-main2.o tmpdir/plt-main3.o \
tmpdir/plt-main4.o tmpdir/libplt-lib.so -pie" \
"" \
{ plt-main5.c } \
"plt-main-pie" \
"plt-main.out" \
"-fPIC" \
] \
]
}

11
ld/testsuite/ld-i386/plt-lib.c

@ -0,0 +1,11 @@
int
foo (void)
{
return 1;
}
int
bar (void)
{
return -1;
}

1
ld/testsuite/ld-i386/plt-main.out

@ -0,0 +1 @@
OK

8
ld/testsuite/ld-i386/plt-main1.c

@ -0,0 +1,8 @@
extern int bar(void);
typedef int (*func_p) (void);
func_p
get_bar (void)
{
return bar;
}

3
ld/testsuite/ld-i386/plt-main1.rd

@ -0,0 +1,3 @@
#...
[0-9a-f ]+R_386_GOT32 +0+ +bar
#pass

3
ld/testsuite/ld-i386/plt-main2.c

@ -0,0 +1,3 @@
extern int foo(void);
typedef int (*func_p) (void);
func_p foo_ptr = foo;

3
ld/testsuite/ld-i386/plt-main2.rd

@ -0,0 +1,3 @@
#...
[0-9a-f ]+R_386_32 +0+ +foo
#pass

15
ld/testsuite/ld-i386/plt-main3.c

@ -0,0 +1,15 @@
extern int bar(void);
typedef int (*func_p) (void);
extern func_p get_bar (void);
void
check_bar (void)
{
func_p bar_ptr = get_bar ();
if (bar_ptr != bar)
__builtin_abort ();
if (bar_ptr() != -1)
__builtin_abort ();
if (bar() != -1)
__builtin_abort ();
}

5
ld/testsuite/ld-i386/plt-main3.rd

@ -0,0 +1,5 @@
#...
[0-9a-f ]+R_386_GOT32 +0+ +bar
#...
[0-9a-f ]+R_386_PLT32 +0+ +bar
#pass

14
ld/testsuite/ld-i386/plt-main4.c

@ -0,0 +1,14 @@
extern int foo(void);
typedef int (*func_p) (void);
extern func_p foo_ptr;
void
check_foo (void)
{
if (foo_ptr != foo)
__builtin_abort ();
if (foo_ptr() != 1)
__builtin_abort ();
if (foo() != 1)
__builtin_abort ();
}

5
ld/testsuite/ld-i386/plt-main4.rd

@ -0,0 +1,5 @@
#...
[0-9a-f ]+R_386_GOT32 +0+ +foo
#...
[0-9a-f ]+R_386_PLT32 +0+ +foo
#pass

15
ld/testsuite/ld-i386/plt-main5.c

@ -0,0 +1,15 @@
#include <stdio.h>
extern void check_foo (void);
extern void check_bar (void);
int
main (void)
{
check_foo ();
check_bar ();
printf ("OK\n");
return 0;
}
Loading…
Cancel
Save