diff --git a/elf/Makefile b/elf/Makefile index e262f3e6b1..8640138a72 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -325,6 +325,7 @@ static-dlopen-environment = \ LD_LIBRARY_PATH=$(ld-library-path):$(common-objpfx)dlfcn tst-tls9-static-ENV = $(static-dlopen-environment) tst-single_threaded-static-dlopen-ENV = $(static-dlopen-environment) +tst-rootdir-ENV = LD_LIBRARY_PATH=/ tests += \ argv0test \ @@ -506,6 +507,7 @@ tests-container += \ tst-dlopen-tlsmodid-container \ tst-pldd \ tst-preload-pthread-libc \ + tst-rootdir \ # tests-container test-srcs = \ @@ -855,6 +857,7 @@ modules-names += \ tst-relsort1mod1 \ tst-relsort1mod2 \ tst-ro-dynamic-mod \ + tst-rootdir-lib \ tst-single_threaded-mod1 \ tst-single_threaded-mod2 \ tst-single_threaded-mod3 \ diff --git a/elf/tst-rootdir-lib.c b/elf/tst-rootdir-lib.c new file mode 100644 index 0000000000..007c4b0095 --- /dev/null +++ b/elf/tst-rootdir-lib.c @@ -0,0 +1,23 @@ +/* Simple library for testing locating library in root directories. + Copyright The GNU Toolchain Authors. + 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 + . */ + +const char * +test_func (void) +{ + return "Success"; +} diff --git a/elf/tst-rootdir.c b/elf/tst-rootdir.c new file mode 100644 index 0000000000..83284ea59e --- /dev/null +++ b/elf/tst-rootdir.c @@ -0,0 +1,37 @@ +/* Test code for locating libraries in root directories. + Copyright The GNU Toolchain Authors. + 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 + . */ + +#include +#include +#include +#include + +static int +do_test (void) +{ + void *handle = dlopen ("libtest.so", RTLD_LAZY); + TEST_VERIFY_EXIT (handle != NULL); + typedef const char *(test_func_t) (void); + test_func_t *func = dlsym (handle, "test_func"); + assert (func != NULL); + TEST_COMPARE_STRING (func (), "Success"); + dlclose (handle); + return 0; +} + +#include diff --git a/elf/tst-rootdir.root/preclean.req b/elf/tst-rootdir.root/preclean.req new file mode 100644 index 0000000000..e69de29bb2 diff --git a/elf/tst-rootdir.script b/elf/tst-rootdir.script new file mode 100644 index 0000000000..f852c0ec34 --- /dev/null +++ b/elf/tst-rootdir.script @@ -0,0 +1 @@ +cp $B/elf/tst-rootdir-lib.so /libtest.so