mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-10 15:20:10 +00:00
864198ed30
There is a configure test for assembler support for the gnu_unique_object symbol type. This support was added in binutils 2.20, so is present in all versions supported for building glibc. Thus, I think the configure test can be removed; this patch does so. Now, there is a caveat that the gas NEWS entry refers to this as a feature for GNU/Linux targets. But the condition is use of ELFOSABI_GNU or ELFOSABI_NONE. ELFOSABI_GNU covers Hurd as well as GNU/Linux (as was the case with the older ELFOSABI_LINUX name), and ELFOSABI_NONE means this is effectively OS-independent. Furthermore, I think a correct binutils port for any glibc target ought to support this feature for use with glibc; glibc supports this as an OS-independent feature (the configure test is only about glibc testcases). Tested for x86_64 (testsuite, and that installed shared libraries are unchanged by the patch). * configure.ac (libc_cv_asm_unique_object): Remove configure test. * configure: Regenerated. * config.h.in (HAVE_ASM_UNIQUE_OBJECT): Remove #undef. * elf/tst-unique1.c (do_test) [HAVE_ASM_UNIQUE_OBJECT]: Make code unconditional. * elf/tst-unique1mod1.c [HAVE_ASM_UNIQUE_OBJECT]: Likewise. * elf/tst-unique1mod2.c [HAVE_ASM_UNIQUE_OBJECT]: Likewise. * elf/tst-unique2.c (do_test) [HAVE_ASM_UNIQUE_OBJECT]: Likewise. (do_test) [!HAVE_ASM_UNIQUE_OBJECT]: Remove conditional code. * elf/tst-unique2mod1.c [HAVE_ASM_UNIQUE_OBJECT]: Make code unconditional. * elf/tst-unique2mod2.c [HAVE_ASM_UNIQUE_OBJECT]: Likewise.
75 lines
1.5 KiB
C
75 lines
1.5 KiB
C
#include <config.h>
|
|
#include <dlfcn.h>
|
|
#include <stdio.h>
|
|
#include <sys/mman.h>
|
|
|
|
static int
|
|
do_test (void)
|
|
{
|
|
void *h1 = dlopen ("tst-unique1mod1.so", RTLD_LAZY);
|
|
if (h1 == NULL)
|
|
{
|
|
puts ("cannot load tst-unique1mod1");
|
|
return 1;
|
|
}
|
|
int *(*f1) (void) = dlsym (h1, "f");
|
|
if (f1 == NULL)
|
|
{
|
|
puts ("cannot locate f in tst-unique1mod1");
|
|
return 1;
|
|
}
|
|
void *h2 = dlopen ("tst-unique1mod2.so", RTLD_LAZY);
|
|
if (h2 == NULL)
|
|
{
|
|
puts ("cannot load tst-unique1mod2");
|
|
return 1;
|
|
}
|
|
int (*f2) (int *) = dlsym (h2, "f");
|
|
if (f2 == NULL)
|
|
{
|
|
puts ("cannot locate f in tst-unique1mod2");
|
|
return 1;
|
|
}
|
|
if (f2 (f1 ()))
|
|
{
|
|
puts ("f from tst-unique1mod2 failed");
|
|
return 1;
|
|
}
|
|
dlclose (h2);
|
|
dlclose (h1);
|
|
mmap (NULL, 1024 * 1024 * 16, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
|
h2 = dlopen ("tst-unique1mod2.so", RTLD_LAZY);
|
|
if (h2 == NULL)
|
|
{
|
|
puts ("cannot load tst-unique1mod2");
|
|
return 1;
|
|
}
|
|
f2 = dlsym (h2, "f");
|
|
if (f2 == NULL)
|
|
{
|
|
puts ("cannot locate f in tst-unique1mod2");
|
|
return 1;
|
|
}
|
|
h1 = dlopen ("tst-unique1mod1.so", RTLD_LAZY);
|
|
if (h1 == NULL)
|
|
{
|
|
puts ("cannot load tst-unique1mod1");
|
|
return 1;
|
|
}
|
|
f1 = dlsym (h1, "f");
|
|
if (f1 == NULL)
|
|
{
|
|
puts ("cannot locate f in tst-unique1mod1");
|
|
return 1;
|
|
}
|
|
if (f2 (f1 ()))
|
|
{
|
|
puts ("f from tst-unique1mod2 failed");
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
#define TEST_FUNCTION do_test ()
|
|
#include "../test-skeleton.c"
|