mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-08 22:30:07 +00:00
Add a dlopen/getpagesize static executable test.
This commit is contained in:
parent
f91f1c0fb8
commit
3d0f5d0c7a
@ -1,5 +1,13 @@
|
|||||||
2013-06-28 Maciej W. Rozycki <macro@codesourcery.com>
|
2013-06-28 Maciej W. Rozycki <macro@codesourcery.com>
|
||||||
|
|
||||||
|
* dlfcn/modstatic5.c: New file.
|
||||||
|
* dlfcn/tststatic5.c: New file.
|
||||||
|
* dlfcn/Makefile (tests): Add tststatic5.
|
||||||
|
(tests-static): Likewise.
|
||||||
|
(modules-names): Add modstatic5.
|
||||||
|
(tststatic5-ENV): New variable.
|
||||||
|
($(objpfx)tststatic5, $(objpfx)tststatic5.out): New dependencies.
|
||||||
|
|
||||||
[BZ #15022]
|
[BZ #15022]
|
||||||
* elf/dl-support.c (_dl_main_map): New variable.
|
* elf/dl-support.c (_dl_main_map): New variable.
|
||||||
(_dl_ns): Use it to initialize [LM_ID_BASE] element.
|
(_dl_ns): Use it to initialize [LM_ID_BASE] element.
|
||||||
|
@ -47,13 +47,14 @@ glreflib2.so-no-z-defs = yes
|
|||||||
errmsg1mod.so-no-z-defs = yes
|
errmsg1mod.so-no-z-defs = yes
|
||||||
|
|
||||||
ifeq (yes,$(build-shared))
|
ifeq (yes,$(build-shared))
|
||||||
tests += tststatic tststatic2 tststatic3 tststatic4
|
tests += tststatic tststatic2 tststatic3 tststatic4 tststatic5
|
||||||
tests-static += tststatic tststatic2 tststatic3 tststatic4
|
tests-static += tststatic tststatic2 tststatic3 tststatic4 tststatic5
|
||||||
modules-names += modstatic modstatic2 modstatic3
|
modules-names += modstatic modstatic2 modstatic3 modstatic5
|
||||||
tststatic-ENV = LD_LIBRARY_PATH=$(objpfx):$(common-objpfx):$(common-objpfx)elf
|
tststatic-ENV = LD_LIBRARY_PATH=$(objpfx):$(common-objpfx):$(common-objpfx)elf
|
||||||
tststatic2-ENV = $(tststatic-ENV)
|
tststatic2-ENV = $(tststatic-ENV)
|
||||||
tststatic3-ENV = $(tststatic-ENV)
|
tststatic3-ENV = $(tststatic-ENV)
|
||||||
tststatic4-ENV = $(tststatic-ENV)
|
tststatic4-ENV = $(tststatic-ENV)
|
||||||
|
tststatic5-ENV = $(tststatic-ENV)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
extra-test-objs += $(modules-names:=.os)
|
extra-test-objs += $(modules-names:=.os)
|
||||||
@ -112,6 +113,9 @@ $(objpfx)tststatic3.out: $(objpfx)tststatic3 $(objpfx)modstatic3.so
|
|||||||
$(objpfx)tststatic4: $(objpfx)libdl.a
|
$(objpfx)tststatic4: $(objpfx)libdl.a
|
||||||
$(objpfx)tststatic4.out: $(objpfx)tststatic4 $(objpfx)modstatic3.so
|
$(objpfx)tststatic4.out: $(objpfx)tststatic4 $(objpfx)modstatic3.so
|
||||||
|
|
||||||
|
$(objpfx)tststatic5: $(objpfx)libdl.a
|
||||||
|
$(objpfx)tststatic5.out: $(objpfx)tststatic5 $(objpfx)modstatic5.so
|
||||||
|
|
||||||
$(objpfx)bug-dlopen1: $(libdl)
|
$(objpfx)bug-dlopen1: $(libdl)
|
||||||
|
|
||||||
$(objpfx)bug-dlsym1: $(libdl) $(objpfx)bug-dlsym1-lib2.so
|
$(objpfx)bug-dlsym1: $(libdl) $(objpfx)bug-dlsym1-lib2.so
|
||||||
|
26
dlfcn/modstatic5.c
Normal file
26
dlfcn/modstatic5.c
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/* DSO used for GLRO(dl_pagesize) initialization testing with a static
|
||||||
|
executable.
|
||||||
|
Copyright (C) 2013 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with the GNU C Library; if not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
my_getpagesize (void)
|
||||||
|
{
|
||||||
|
return getpagesize ();
|
||||||
|
}
|
76
dlfcn/tststatic5.c
Normal file
76
dlfcn/tststatic5.c
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
/* GLRO(dl_pagesize) initialization DSO test with a static executable.
|
||||||
|
Copyright (C) 2013 Free Software Foundation, Inc.
|
||||||
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2.1 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The GNU C Library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with the GNU C Library; if not, see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
/* Check that the same page size is reported both directly and by a DSO
|
||||||
|
mapped from a static executable.
|
||||||
|
|
||||||
|
On targets that support different page sizes, the kernel communicates
|
||||||
|
the size currently in use via the auxiliary vector. This vector is
|
||||||
|
available to initial startup, but not any DSOs loaded later on. As
|
||||||
|
static executables do not export their symbols a DSO cannot access
|
||||||
|
the value obtained by initial startup and the value therefore has to
|
||||||
|
be passed on to the DSO and stored within its data area explicitly.
|
||||||
|
This is performed by a call to DL_STATIC_INIT that is defined in a
|
||||||
|
target-dependent way, and that on variable page size targets stores
|
||||||
|
it in the GLRO(dl_pagesize) variable of the DSO's dynamic linker. */
|
||||||
|
static int
|
||||||
|
do_test (void)
|
||||||
|
{
|
||||||
|
int pagesize = getpagesize ();
|
||||||
|
int (*my_getpagesize) (void);
|
||||||
|
int my_pagesize;
|
||||||
|
void *handle;
|
||||||
|
|
||||||
|
/* Try to map a module. */
|
||||||
|
handle = dlopen ("modstatic5.so", RTLD_LAZY | RTLD_LOCAL);
|
||||||
|
if (handle == NULL)
|
||||||
|
{
|
||||||
|
printf ("dlopen (modstatic5.so): %s\n", dlerror ());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get at its symbol. */
|
||||||
|
my_getpagesize = dlsym (handle, "my_getpagesize");
|
||||||
|
if (my_getpagesize == NULL)
|
||||||
|
{
|
||||||
|
printf ("dlsym (my_getpagesize): %s\n", dlerror ());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure the page size reported is the same either way. */
|
||||||
|
my_pagesize = my_getpagesize ();
|
||||||
|
if (my_pagesize != pagesize)
|
||||||
|
{
|
||||||
|
printf ("my_getpagesize: got %i, expected %i\n", my_pagesize, pagesize);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* All done, clean up. */
|
||||||
|
my_getpagesize = NULL;
|
||||||
|
dlclose (handle);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define TEST_FUNCTION do_test ()
|
||||||
|
#include "../test-skeleton.c"
|
Loading…
Reference in New Issue
Block a user