aboutsummaryrefslogtreecommitdiff
path: root/elf/rtld.c
diff options
context:
space:
mode:
authorPaul Pluzhnikov <ppluzhnikov@google.com>2014-03-12 15:58:39 -0700
committerPaul Pluzhnikov <ppluzhnikov@google.com>2014-03-12 15:58:39 -0700
commit798212a01311491d5e14fcda687460b75f8ca286 (patch)
tree97d78fbe6bd1a25dd6f1d181ae3a0efc90479d52 /elf/rtld.c
parentabe6d90cc8c1c212dab7cde4468f9ed895d6ba86 (diff)
downloadglibc-798212a01311491d5e14fcda687460b75f8ca286.zip
glibc-798212a01311491d5e14fcda687460b75f8ca286.tar.gz
glibc-798212a01311491d5e14fcda687460b75f8ca286.tar.bz2
2014-03-12 Paul Pluzhnikov <ppluzhnikov@google.com>
[BZ #16381] * elf/Makefile (tests): Add tst-pie2. (tests-pie): Add tst-pie2. * elf/tst-pie2.c: New file. * elf/dl-load.c (_dl_map_object_from_fd): Assert correct l_type for ET_EXEC. * elf/rtld.c (map_doit): Load executable as lt_executable. (dl_main): Likewise.
Diffstat (limited to 'elf/rtld.c')
-rw-r--r--elf/rtld.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/elf/rtld.c b/elf/rtld.c
index 7f1413a..63e92d3 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -623,7 +623,8 @@ static void
map_doit (void *a)
{
struct map_args *args = (struct map_args *) a;
- args->map = _dl_map_object (args->loader, args->str, lt_library, 0,
+ int type = (args->mode == __RTLD_OPENEXEC) ? lt_executable : lt_library;
+ args->map = _dl_map_object (args->loader, args->str, type, 0,
args->mode, LM_ID_BASE);
}
@@ -1075,7 +1076,7 @@ of this helper program; chances are you did not intend to run this program.\n\
else
{
HP_TIMING_NOW (start);
- _dl_map_object (NULL, rtld_progname, lt_library, 0,
+ _dl_map_object (NULL, rtld_progname, lt_executable, 0,
__RTLD_OPENEXEC, LM_ID_BASE);
HP_TIMING_NOW (stop);