diff mbox series

V2 [PATCH] rtld: Get architecture specific initializer in rtld_global

Message ID CAMe9rOqZP3i1mztT+nnkUm5KOYNDdaC02WVui=gEM5yAwcR+Dg@mail.gmail.com
State New
Headers show
Series V2 [PATCH] rtld: Get architecture specific initializer in rtld_global | expand

Commit Message

H.J. Lu May 16, 2020, 6:24 p.m. UTC
On Sat, May 16, 2020 at 11:07 AM Florian Weimer <fw@deneb.enyo.de> wrote:
>
> * H. J. Lu:
>
> > On Sat, May 16, 2020 at 10:52 AM Florian Weimer <fw@deneb.enyo.de> wrote:
> >>
> >> * H. J. Lu via Libc-alpha:
> >>
> >> > Include <dl-procruntime.c> to get architecture specific initializer in
> >> > rtld_global.
> >> > ---
> >> >  elf/rtld.c | 2 ++
> >> >  1 file changed, 2 insertions(+)
> >> >
> >> > diff --git a/elf/rtld.c b/elf/rtld.c
> >> > index 0016db86a7..44b9fb0b3c 100644
> >> > --- a/elf/rtld.c
> >> > +++ b/elf/rtld.c
> >> > @@ -315,6 +315,8 @@ rtld_hidden_def (_dl_starting_up)
> >> >     (except those which cannot be added for some reason).  */
> >> >  struct rtld_global _rtld_global =
> >> >    {
> >> > +    /* Get architecture specific initializer.  */
> >> > +#include <dl-procruntime.c>
> >> >      /* Generally the default presumption without further information is an
> >> >       * executable stack but this is not true for all platforms.  */
> >> >      ._dl_stack_flags = DEFAULT_STACK_PERMS,
> >>
> >> This patch does not build on its own.  I'm surprised that it works in
> >> combination with the third patch.
> >
> > It should build.
>
> It doesn't if I do not apply the third patch.

Fixed.

> >> Is _rtld_global really the right place for this data?  Is it even
> >> needed from outside the dynamic loader?
> >
> > Yes,  it matches:
> >
> > struct rtld_global
> > {
> > ...
> > #include <dl-procruntime.c>
> > ...
> > };
> >
> > in sysdeps/generic/ldsodefs.h.
>
> I mean conceptually—it's not clear to me why these fields have to be
> in _rtld_global.  It makes things harder to maintain.  Sorry, this is
> a more general question, it's not about the patch itself.

What is the alternative?  These fields are initialized very early
and don't change after it.

Here is the updated patch.  OK for master?
diff mbox series

Patch

From 83015ce9f4e56faa772bfab4f9717365af353ced Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.tools@gmail.com>
Date: Tue, 28 Apr 2020 10:05:25 -0700
Subject: [PATCH] rtld: Get architecture specific initializer in rtld_global

Include <dl-procruntime.c> to get architecture specific initializer in
rtld_global.
---
 elf/rtld.c                   | 2 ++
 sysdeps/x86/dl-procruntime.c | 5 +++++
 2 files changed, 7 insertions(+)

diff --git a/elf/rtld.c b/elf/rtld.c
index 5ccc3c2dbb..882b070cc0 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -315,6 +315,8 @@  rtld_hidden_def (_dl_starting_up)
    (except those which cannot be added for some reason).  */
 struct rtld_global _rtld_global =
   {
+    /* Get architecture specific initializer.  */
+#include <dl-procruntime.c>
     /* Generally the default presumption without further information is an
      * executable stack but this is not true for all platforms.  */
     ._dl_stack_flags = DEFAULT_STACK_PERMS,
diff --git a/sysdeps/x86/dl-procruntime.c b/sysdeps/x86/dl-procruntime.c
index 5e39a38133..88a7cac646 100644
--- a/sysdeps/x86/dl-procruntime.c
+++ b/sysdeps/x86/dl-procruntime.c
@@ -49,6 +49,11 @@ 
 # else
 PROCINFO_CLASS unsigned int _dl_x86_feature_1[2]
 # endif
+# ifndef PROCINFO_DECL
+= {
+    0,
+  }
+# endif
 # if !defined SHARED || defined PROCINFO_DECL
 ;
 # else
-- 
2.26.2