Browse Source
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
13 changed files with 169 additions and 0 deletions
@ -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_386_GOT32 +0+ +bar |
|||
#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_386_32 +0+ +foo |
|||
#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_386_GOT32 +0+ +bar |
|||
#... |
|||
[0-9a-f ]+R_386_PLT32 +0+ +bar |
|||
#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_386_GOT32 +0+ +foo |
|||
#... |
|||
[0-9a-f ]+R_386_PLT32 +0+ +foo |
|||
#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; |
|||
} |
|||
Loading…
Reference in new issue