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.
This commit is contained in:
parent
ce641d0b6b
commit
4a7a792388
@ -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.
|
||||
|
@ -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
Normal file
11
ld/testsuite/ld-i386/plt-lib.c
Normal file
@ -0,0 +1,11 @@
|
||||
int
|
||||
foo (void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
bar (void)
|
||||
{
|
||||
return -1;
|
||||
}
|
1
ld/testsuite/ld-i386/plt-main.out
Normal file
1
ld/testsuite/ld-i386/plt-main.out
Normal file
@ -0,0 +1 @@
|
||||
OK
|
8
ld/testsuite/ld-i386/plt-main1.c
Normal file
8
ld/testsuite/ld-i386/plt-main1.c
Normal file
@ -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
Normal file
3
ld/testsuite/ld-i386/plt-main1.rd
Normal file
@ -0,0 +1,3 @@
|
||||
#...
|
||||
[0-9a-f ]+R_386_GOT32 +0+ +bar
|
||||
#pass
|
3
ld/testsuite/ld-i386/plt-main2.c
Normal file
3
ld/testsuite/ld-i386/plt-main2.c
Normal file
@ -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
Normal file
3
ld/testsuite/ld-i386/plt-main2.rd
Normal file
@ -0,0 +1,3 @@
|
||||
#...
|
||||
[0-9a-f ]+R_386_32 +0+ +foo
|
||||
#pass
|
15
ld/testsuite/ld-i386/plt-main3.c
Normal file
15
ld/testsuite/ld-i386/plt-main3.c
Normal file
@ -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
Normal file
5
ld/testsuite/ld-i386/plt-main3.rd
Normal file
@ -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
Normal file
14
ld/testsuite/ld-i386/plt-main4.c
Normal file
@ -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
Normal file
5
ld/testsuite/ld-i386/plt-main4.rd
Normal file
@ -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
Normal file
15
ld/testsuite/ld-i386/plt-main5.c
Normal file
@ -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…
Reference in New Issue
Block a user