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