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:
H.J. Lu 2014-11-20 12:41:11 -08:00
parent 731885c1ad
commit 76e7af5ffa
13 changed files with 154 additions and 0 deletions

View File

@ -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.

View File

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

View File

@ -0,0 +1 @@
OK

View File

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

View File

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

View File

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

View File

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

View 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 ();
}

View File

@ -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

View 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 ();
}

View File

@ -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

View 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;
}

View File

@ -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*"]} {