[1/3] Mark __libc_multiple_libcs with attribute_hidden [BZ #18822]
Commit Message
On Mon, Aug 21, 2017 at 4:19 AM, Florian Weimer <fweimer@redhat.com> wrote:
> On 08/21/2017 01:16 PM, H.J. Lu wrote:
>> On Mon, Aug 21, 2017 at 3:03 AM, Florian Weimer <fweimer@redhat.com> wrote:
>>> On 08/20/2017 04:12 PM, H.J. Lu wrote:
>>>> +/* Set nonzero if we have to be prepared for more than one libc being
>>>> + used in the process. */
>>>> +extern int __libc_multiple_libcs attribute_hidden;
>>>
>>> I think the comment gives the wrong impression. The flag is not always
>>> set if there are multiple libcs in the process, and it certainly is not
>>> set just because we might end up having multiple libcs in the future
>>> (which is why the “have to be prepared” part irks me).
>>
>> I copied it from csu/init-first.c:
>>
>> /* Set nonzero if we have to be prepared for more than one libc being
>> used in the process. Safe assumption if initializer never runs. */
>> int __libc_multiple_libcs attribute_hidden = 1;
>
> Ahh, that's only appropriate for this particular definition.
>
>> Should I just leave out the comments?
>
> Yes please, unless someone can describe what the flag actually means (I
> tried to use it in the past, and it did not work reliably with inner libcs).
>
Here is the updated patch. I will check it in shortly.
Thanks.
Comments
On 08/21/2017 01:48 PM, H.J. Lu wrote:
> [BZ #18822]
> * csu/libc-start.c (__libc_multiple_libcs): Removed.
> * elf/dl-open.c: Include <libc-internal.h>.
> (__libc_multiple_libcs): Removed.
> * elf/dl-sysdep.c: Include <libc-internal.h> instead of
> <hp-timing.h>.
> * include/libc-internal.h (__libc_multiple_libcs): New.
> * misc/sbrk.c: Include <libc-internal.h>.
> (__libc_multiple_libcs): Removed.
Okay.
Florian
From 54b8fdadfb2d6ee877a7cee64ab9b2353c37ecc3 Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Fri, 18 Aug 2017 12:19:28 -0700
Subject: [PATCH] Mark __libc_multiple_libcs with attribute_hidden [BZ #18822]
Since __libc_multiple_libcs is defined as hidden symbol in init-first.c,
it should be always marked with attribute_hidden.
[BZ #18822]
* csu/libc-start.c (__libc_multiple_libcs): Removed.
* elf/dl-open.c: Include <libc-internal.h>.
(__libc_multiple_libcs): Removed.
* elf/dl-sysdep.c: Include <libc-internal.h> instead of
<hp-timing.h>.
* include/libc-internal.h (__libc_multiple_libcs): New.
* misc/sbrk.c: Include <libc-internal.h>.
(__libc_multiple_libcs): Removed.
---
csu/libc-start.c | 2 --
elf/dl-open.c | 3 +--
elf/dl-sysdep.c | 2 +-
include/libc-internal.h | 2 ++
misc/sbrk.c | 4 +---
5 files changed, 5 insertions(+), 8 deletions(-)
@@ -27,8 +27,6 @@
extern void __libc_init_first (int argc, char **argv, char **envp);
-extern int __libc_multiple_libcs;
-
#include <tls.h>
#ifndef SHARED
# include <dl-osinfo.h>
@@ -33,12 +33,11 @@
#include <tls.h>
#include <stap-probe.h>
#include <atomic.h>
+#include <libc-internal.h>
#include <dl-dst.h>
-extern int __libc_multiple_libcs; /* Defined in init-first.c. */
-
/* We must be careful not to leave us in an inconsistent state. Thus we
catch any error and re-raise it after cleaning up. */
@@ -41,7 +41,7 @@
#include <dl-machine.h>
#include <dl-procinfo.h>
#include <dl-osinfo.h>
-#include <hp-timing.h>
+#include <libc-internal.h>
#include <tls.h>
#include <dl-tunables.h>
@@ -53,4 +53,6 @@ extern void __init_misc (int, char **, char **);
extern __typeof (__profile_frequency) __profile_frequency attribute_hidden;
# endif
+extern int __libc_multiple_libcs attribute_hidden;
+
#endif /* _LIBC_INTERNAL */
@@ -18,14 +18,12 @@
#include <errno.h>
#include <stdint.h>
#include <unistd.h>
+#include <libc-internal.h>
/* Defined in brk.c. */
extern void *__curbrk;
extern int __brk (void *addr);
-/* Defined in init-first.c. */
-extern int __libc_multiple_libcs attribute_hidden;
-
/* Extend the process's data space by INCREMENT.
If INCREMENT is negative, shrink data space by - INCREMENT.
Return start of new space allocated, or -1 for errors. */
--
2.13.5