Add function and function pointer tests
This patch adds tests for function and function pointer. * ld-x86-64/plt-lib.c: New file. * ld-x86-64/plt-main.out: Likewise. * ld-x86-64/plt-main1.c: Likewise. * ld-x86-64/plt-main1.rd: Likewise. * ld-x86-64/plt-main2.c: Likewise. * ld-x86-64/plt-main2.rd: Likewise. * ld-x86-64/plt-main3.c: Likewise. * ld-x86-64/plt-main3.rd: Likewise. * ld-x86-64/plt-main4.c: Likewise. * ld-x86-64/plt-main4.rd: Likewise. * ld-x86-64/plt-main5.c: Likewise. * ld-x86-64/x86-64.exp: Run plt-main tests.
This commit is contained in:
parent
731885c1ad
commit
76e7af5ffa
|
@ -1,3 +1,19 @@
|
|||
2014-11-20 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* ld-x86-64/plt-lib.c: New file.
|
||||
* ld-x86-64/plt-main.out: Likewise.
|
||||
* ld-x86-64/plt-main1.c: Likewise.
|
||||
* ld-x86-64/plt-main1.rd: Likewise.
|
||||
* ld-x86-64/plt-main2.c: Likewise.
|
||||
* ld-x86-64/plt-main2.rd: Likewise.
|
||||
* ld-x86-64/plt-main3.c: Likewise.
|
||||
* ld-x86-64/plt-main3.rd: Likewise.
|
||||
* ld-x86-64/plt-main4.c: Likewise.
|
||||
* ld-x86-64/plt-main4.rd: Likewise.
|
||||
* ld-x86-64/plt-main5.c: Likewise.
|
||||
|
||||
* ld-x86-64/x86-64.exp: Run plt-main tests.
|
||||
|
||||
2014-11-20 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* ld-ifunc/ifunc-main.c (get_bar): New function.
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
int
|
||||
foo (void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
bar (void)
|
||||
{
|
||||
return -1;
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
OK
|
|
@ -0,0 +1,8 @@
|
|||
extern int bar(void);
|
||||
typedef int (*func_p) (void);
|
||||
|
||||
func_p
|
||||
get_bar (void)
|
||||
{
|
||||
return bar;
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
#...
|
||||
[0-9a-f ]+R_X86_64_GOTPCREL +0+ bar - 4
|
||||
#pass
|
|
@ -0,0 +1,3 @@
|
|||
extern int foo(void);
|
||||
typedef int (*func_p) (void);
|
||||
func_p foo_ptr = foo;
|
|
@ -0,0 +1,3 @@
|
|||
#...
|
||||
[0-9a-f ]+R_X86_64_64 +0+ foo \+ 0
|
||||
#pass
|
|
@ -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 ();
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
#...
|
||||
[0-9a-f ]+R_X86_64_GOTPCREL +0+ bar - 4
|
||||
#...
|
||||
[0-9a-f ]+R_X86_64_PLT32 +0+ bar - 4
|
||||
#pass
|
|
@ -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 ();
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
#...
|
||||
[0-9a-f ]+R_X86_64_GOTPCREL +0+ foo - 4
|
||||
#...
|
||||
[0-9a-f ]+R_X86_64_PLT32 +0+ foo - 4
|
||||
#pass
|
|
@ -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;
|
||||
}
|
|
@ -332,6 +332,61 @@ if { [isnative] && [which $CC] != 0 } {
|
|||
"-shared -melf32_x86_64 tmpdir/simple-x32.o" "" "--x32"
|
||||
{dummy.s} {{readelf {-s --wide} x86-64-x32.rd}} "x86-64-x32"}
|
||||
}
|
||||
|
||||
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" \
|
||||
] \
|
||||
]
|
||||
}
|
||||
|
||||
if { ![istarget "x86_64-*-linux*"]} {
|
||||
|
|
Loading…
Reference in New Issue