Index: glibc/elf/dl-machine-main-map-setup.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ glibc/elf/dl-machine-main-map-setup.h 2015-11-10 14:06:46.530434265 +0000
@@ -0,0 +1,33 @@
+/* Machine-dependent main link map setup for the ELF loader.
+ Copyright (C) 2015 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
+ . */
+
+#ifndef _DL_MACHINE_MAIN_MAP_SETUP
+#define _DL_MACHINE_MAIN_MAP_SETUP 1
+
+#include
+
+/* Set up machine-dependent parts of the main link map. Return 0
+ if successful. */
+
+static inline int
+elf_machine_main_map_setup (struct link_map *map, bool rtld_is_main)
+{
+ return 0;
+}
+
+#endif /* dl-machine-main-map-setup.h */
Index: glibc/elf/dl-support.c
===================================================================
--- glibc.orig/elf/dl-support.c 2015-11-10 13:56:21.472052201 +0000
+++ glibc/elf/dl-support.c 2015-11-10 14:06:46.548882325 +0000
@@ -27,6 +27,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -311,6 +312,12 @@ _dl_non_dynamic_init (void)
_dl_main_map.l_phdr = GL(dl_phdr);
_dl_main_map.l_phnum = GL(dl_phnum);
+ int err = elf_machine_main_map_setup (&_dl_main_map, false);
+ if (__glibc_unlikely (err))
+ _dl_signal_error (err, NULL,
+ N_ ("error while initializing executable"),
+ N_ ("platform setup error"));
+
if (HP_SMALL_TIMING_AVAIL)
HP_TIMING_NOW (_dl_cpuclock_offset);
Index: glibc/elf/rtld.c
===================================================================
--- glibc.orig/elf/rtld.c 2015-11-10 13:56:21.493513731 +0000
+++ glibc/elf/rtld.c 2015-11-10 14:06:46.617728628 +0000
@@ -19,6 +19,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -36,6 +37,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -1453,6 +1455,13 @@ ERROR: ld.so: object '%s' cannot be load
GL(dl_rtld_map).l_info[DT_DEBUG]->d_un.d_ptr = (ElfW(Addr)) r;
#endif
+ /* Let any machine setup process the main map before objects are added. */
+ int err = elf_machine_main_map_setup (main_map, rtld_is_main);
+ if (__glibc_unlikely (err))
+ _dl_signal_error (err, NULL,
+ N_ ("error while initializing executable"),
+ N_ ("platform setup error"));
+
/* We start adding objects. */
r->r_state = RT_ADD;
_dl_debug_state ();