diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2018-05-27 07:15:35 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2018-06-06 08:32:12 -0700 |
commit | 3bc6d308ef8ba549e0ef072692903ea2afa883d1 (patch) | |
tree | 22933829d15bdc05f258a7f7cb1e01af1209c8ed /elf/ifuncpreload1.c | |
parent | 3fe2b141c2d2bd2c7274f860cdf8a0aa061bb5bd (diff) |
Check non-lazy binding with LD_PRELOAD and weak referencehjl/pr23240/fw
Check non-lazy binding with
1. Reference to unrelocated IFUNC function with LD_PRELOAD.
2. Weak reference.
[BZ #23176]
[BZ #23240]
* elf/Makefile (tests): Add reldep6a.
(tests-internal): Add ifuncpreload1
(modules-names): Add ifuncpreloadmod1a and ifuncpreloadmod1b.
($(objpfx)reldep6a): New.
($(objpfx)reldep6a.out): Likewise.
(reldep6a-ENV): Likewise.
($(objpfx)ifuncpreload1): Likewise.
($(objpfx)ifuncpreload1.out): Likewise.
(ifuncpreload1-ENV): Likewise.
* elf/ifuncpreload1.c: New file.
* elf/ifuncpreloadmod1a.c: Likewise.
* elf/ifuncpreloadmod1b.c: Likewise.
* elf/reldep6a.c: Likewise.
Diffstat (limited to 'elf/ifuncpreload1.c')
-rw-r--r-- | elf/ifuncpreload1.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/elf/ifuncpreload1.c b/elf/ifuncpreload1.c new file mode 100644 index 0000000000..172df33ac3 --- /dev/null +++ b/elf/ifuncpreload1.c @@ -0,0 +1,39 @@ +/* Test for relocation over with IFUNC symbols. + Copyright (C) 2018 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 <support/check.h> +#include <support/support.h> +#include <support/test-driver.h> + +extern void bar (char *, const char *, unsigned int); + +static int +do_test (void) +{ + char dst[50]; + const char src[] = + { + "This is a test" + }; + bar (dst, src, sizeof (src)); + if (__builtin_memcmp (dst, src, sizeof (src)) != 0) + __builtin_abort (); + return 0; +} + +#include <support/test-driver.c> |