|
|
29e444 |
From 16552c01a66633c9e412984d9d92616bd4e5303c Mon Sep 17 00:00:00 2001
|
|
|
29e444 |
From: Andreas Schwab <schwab@redhat.com>
|
|
|
29e444 |
Date: Fri, 11 Jun 2010 11:04:11 +0200
|
|
|
29e444 |
Subject: [PATCH] Properly set __libc_multiple_libcs
|
|
|
29e444 |
|
|
|
29e444 |
* elf/rtld.c (_dl_starting_up): Always define.
|
|
|
29e444 |
(dl_main): Always set _dl_starting_up.
|
|
|
29e444 |
* elf/dl-support.c (_dl_starting_up): Always define.
|
|
|
29e444 |
* elf/dl-init.c (_dl_init): Always clear _dl_starting_up.
|
|
|
29e444 |
|
|
|
29e444 |
---
|
|
|
29e444 |
ChangeLog | 7 +++++++
|
|
|
29e444 |
elf/dl-init.c | 4 ----
|
|
|
29e444 |
elf/dl-support.c | 2 --
|
|
|
29e444 |
elf/rtld.c | 4 ----
|
|
|
29e444 |
4 files changed, 7 insertions(+), 10 deletions(-)
|
|
|
29e444 |
|
|
|
12745e |
--- glibc-2.17-c758a686/elf/dl-init.c
|
|
|
12745e |
+++ glibc-2.17-c758a686/elf/dl-init.c
|
|
|
29e444 |
@@ -23,11 +23,9 @@
|
|
|
29e444 |
/* Type of the initializer. */
|
|
|
29e444 |
typedef void (*init_t) (int, char **, char **);
|
|
|
29e444 |
|
|
|
29e444 |
-#ifndef HAVE_INLINED_SYSCALLS
|
|
|
29e444 |
/* Flag, nonzero during startup phase. */
|
|
|
29e444 |
extern int _dl_starting_up;
|
|
|
29e444 |
extern int _dl_starting_up_internal attribute_hidden;
|
|
|
29e444 |
-#endif
|
|
|
29e444 |
|
|
|
29e444 |
|
|
|
29e444 |
static void
|
|
|
29e444 |
@@ -132,9 +130,7 @@ _dl_init (struct link_map *main_map, int argc, char **argv, char **env)
|
|
|
29e444 |
while (i-- > 0)
|
|
|
29e444 |
call_init (main_map->l_initfini[i], argc, argv, env);
|
|
|
29e444 |
|
|
|
29e444 |
-#ifndef HAVE_INLINED_SYSCALLS
|
|
|
29e444 |
/* Finished starting up. */
|
|
|
29e444 |
INTUSE(_dl_starting_up) = 0;
|
|
|
29e444 |
-#endif
|
|
|
29e444 |
}
|
|
|
29e444 |
INTDEF (_dl_init)
|
|
|
12745e |
--- glibc-2.17-c758a686/elf/dl-support.c
|
|
|
12745e |
+++ glibc-2.17-c758a686/elf/dl-support.c
|
|
|
29e444 |
@@ -81,10 +81,8 @@ unsigned long long _dl_load_adds;
|
|
|
29e444 |
create a fake scope containing nothing. */
|
|
|
29e444 |
struct r_scope_elem _dl_initial_searchlist;
|
|
|
29e444 |
|
|
|
29e444 |
-#ifndef HAVE_INLINED_SYSCALLS
|
|
|
29e444 |
/* Nonzero during startup. */
|
|
|
29e444 |
int _dl_starting_up = 1;
|
|
|
29e444 |
-#endif
|
|
|
29e444 |
|
|
|
29e444 |
/* Random data provided by the kernel. */
|
|
|
29e444 |
void *_dl_random;
|
|
|
12745e |
--- glibc-2.17-c758a686/elf/rtld.c
|
|
|
12745e |
+++ glibc-2.17-c758a686/elf/rtld.c
|
|
|
29e444 |
@@ -106,7 +106,6 @@ static struct audit_list
|
|
|
29e444 |
struct audit_list *next;
|
|
|
29e444 |
} *audit_list;
|
|
|
29e444 |
|
|
|
29e444 |
-#ifndef HAVE_INLINED_SYSCALLS
|
|
|
29e444 |
/* Set nonzero during loading and initialization of executable and
|
|
|
29e444 |
libraries, cleared before the executable's entry point runs. This
|
|
|
29e444 |
must not be initialized to nonzero, because the unused dynamic
|
|
|
29e444 |
@@ -116,7 +115,6 @@ static struct audit_list
|
|
|
29e444 |
never be called. */
|
|
|
29e444 |
int _dl_starting_up = 0;
|
|
|
29e444 |
INTVARDEF(_dl_starting_up)
|
|
|
29e444 |
-#endif
|
|
|
29e444 |
|
|
|
29e444 |
/* This is the structure which defines all variables global to ld.so
|
|
|
29e444 |
(except those which cannot be added for some reason). */
|
|
|
29e444 |
@@ -929,10 +927,8 @@ dl_main (const ElfW(Phdr) *phdr,
|
|
|
29e444 |
/* Process the environment variable which control the behaviour. */
|
|
|
29e444 |
process_envvars (&mode);
|
|
|
29e444 |
|
|
|
29e444 |
-#ifndef HAVE_INLINED_SYSCALLS
|
|
|
29e444 |
/* Set up a flag which tells we are just starting. */
|
|
|
29e444 |
INTUSE(_dl_starting_up) = 1;
|
|
|
29e444 |
-#endif
|
|
|
29e444 |
|
|
|
29e444 |
if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
|
|
|
29e444 |
{
|