mirror of https://gitee.com/Nocallback/glibc.git
Browse Source
* elf/order2.c: New file. * elf/order2mod1.c: New file. * elf/order2mod2.c: New file. * elf/order2mod3.c: New file. * elf/order2mod4.c: New file.cvs/glibc-2_5-branch
7 changed files with 128 additions and 3 deletions
@ -0,0 +1,46 @@ |
|||||
|
#include <dlfcn.h> |
||||
|
#include <stdio.h> |
||||
|
|
||||
|
|
||||
|
int call_puts; |
||||
|
|
||||
|
static int |
||||
|
do_test (void) |
||||
|
{ |
||||
|
call_puts = 1; |
||||
|
|
||||
|
void *h1 = dlopen ("$ORIGIN/order2mod1.so", RTLD_LAZY | RTLD_GLOBAL); |
||||
|
if (h1 == NULL) |
||||
|
{ |
||||
|
puts ("cannot load order2mod1"); |
||||
|
return 1; |
||||
|
} |
||||
|
void *h2 = dlopen ("$ORIGIN/order2mod2.so", RTLD_LAZY); |
||||
|
if (h2 == NULL) |
||||
|
{ |
||||
|
puts ("cannot load order2mod2"); |
||||
|
return 1; |
||||
|
} |
||||
|
if (dlclose (h1) != 0) |
||||
|
{ |
||||
|
puts ("dlclose order2mod1 failed"); |
||||
|
return 1; |
||||
|
} |
||||
|
if (dlclose (h2) != 0) |
||||
|
{ |
||||
|
puts ("dlclose order2mod2 failed"); |
||||
|
return 1; |
||||
|
} |
||||
|
return 0; |
||||
|
} |
||||
|
|
||||
|
#define TEST_FUNCTION do_test () |
||||
|
#include "../test-skeleton.c" |
||||
|
|
||||
|
static void |
||||
|
__attribute__ ((destructor)) |
||||
|
fini (void) |
||||
|
{ |
||||
|
if (call_puts) |
||||
|
puts ("5"); |
||||
|
} |
||||
@ -0,0 +1,8 @@ |
|||||
|
#include <stdio.h> |
||||
|
|
||||
|
static void |
||||
|
__attribute__ ((destructor)) |
||||
|
fini (void) |
||||
|
{ |
||||
|
putchar ('1'); |
||||
|
} |
||||
@ -0,0 +1,18 @@ |
|||||
|
#include <stdio.h> |
||||
|
|
||||
|
extern int foo (void); |
||||
|
extern int bar (void); |
||||
|
|
||||
|
void |
||||
|
__attribute__ ((constructor)) |
||||
|
init (void) |
||||
|
{ |
||||
|
foo () - bar (); |
||||
|
} |
||||
|
|
||||
|
static void |
||||
|
__attribute__ ((destructor)) |
||||
|
fini (void) |
||||
|
{ |
||||
|
putchar ('2'); |
||||
|
} |
||||
@ -0,0 +1,14 @@ |
|||||
|
#include <stdio.h> |
||||
|
|
||||
|
int |
||||
|
bar (void) |
||||
|
{ |
||||
|
return 1; |
||||
|
} |
||||
|
|
||||
|
static void |
||||
|
__attribute__ ((destructor)) |
||||
|
fini (void) |
||||
|
{ |
||||
|
putchar ('4'); |
||||
|
} |
||||
@ -0,0 +1,16 @@ |
|||||
|
#include <stdio.h> |
||||
|
|
||||
|
extern int bar (void); |
||||
|
|
||||
|
int |
||||
|
foo (void) |
||||
|
{ |
||||
|
return 42 + bar (); |
||||
|
} |
||||
|
|
||||
|
static void |
||||
|
__attribute__ ((destructor)) |
||||
|
fini (void) |
||||
|
{ |
||||
|
putchar ('3'); |
||||
|
} |
||||
Loading…
Reference in new issue