Message ID | 20171031163712.GA10434@gmail.com |
---|---|
State | New |
Headers | show |
Series | ld.so: Add architecture specific fields | expand |
On Tue, Oct 31, 2017 at 9:37 AM, H.J. Lu <hongjiu.lu@intel.com> wrote: > To support Intel Control-flow Enforcement Technology (CET) run-time > control: > > 1. An architecture specific field in the writable ld.so namespace is > needed to indicate if CET features are enabled at run-time. > 2. An architecture specific field in struct link_map is needed if > CET features are enabled in an ELF module. > > This patch adds dl-procruntime.c to the writable ld.so namespace and > link_map.h to struct link_map. > > Tested on x86-64. > > Any comments? > > H.J. > -- > * elf/dl-support.c: Include <dl-procruntime.c>. > * include/link.h: Include <link_map.h>. > * sysdeps/generic/dl-procruntime.c: New file. > * sysdeps/generic/link_map.h: Likewise. > * sysdeps/generic/ldsodefs.h: Include <dl-procruntime.c> in > the writable ld.so namespace. > --- > elf/dl-support.c | 1 + > include/link.h | 2 ++ > sysdeps/generic/dl-procruntime.c | 1 + > sysdeps/generic/ldsodefs.h | 11 +++++++---- > sysdeps/generic/link_map.h | 1 + > 5 files changed, 12 insertions(+), 4 deletions(-) > create mode 100644 sysdeps/generic/dl-procruntime.c > create mode 100644 sysdeps/generic/link_map.h > > diff --git a/elf/dl-support.c b/elf/dl-support.c > index 5e3de90598..235d3a7f46 100644 > --- a/elf/dl-support.c > +++ b/elf/dl-support.c > @@ -126,6 +126,7 @@ int _dl_starting_up = 1; > void *_dl_random; > > /* Get architecture specific initializer. */ > +#include <dl-procruntime.c> > #include <dl-procinfo.c> > > /* Initial value of the CPU clock. */ > diff --git a/include/link.h b/include/link.h > index 3e1b2aefb7..82b77a6b41 100644 > --- a/include/link.h > +++ b/include/link.h > @@ -203,6 +203,8 @@ struct link_map > freed, ie. not allocated with > the dummy malloc in ld.so. */ > > +#include <link_map.h> > + > /* Collected information about own RPATH directories. */ > struct r_search_path_struct l_rpath_dirs; > > diff --git a/sysdeps/generic/dl-procruntime.c b/sysdeps/generic/dl-procruntime.c > new file mode 100644 > index 0000000000..a056184690 > --- /dev/null > +++ b/sysdeps/generic/dl-procruntime.c > @@ -0,0 +1 @@ > +/* No architecture specific definitions. */ > diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h > index 5efae2d96d..52a792a597 100644 > --- a/sysdeps/generic/ldsodefs.h > +++ b/sysdeps/generic/ldsodefs.h > @@ -373,6 +373,13 @@ struct rtld_global > EXTERN void (*_dl_rtld_unlock_recursive) (void *); > #endif > > + /* Get architecture specific definitions. */ > +#define PROCINFO_DECL > +#ifndef PROCINFO_CLASS > +# define PROCINFO_CLASS EXTERN > +#endif > +#include <dl-procruntime.c> > + > /* If loading a shared object requires that we make the stack executable > when it was not, we do it by calling this function. > It returns an errno code or zero on success. */ > @@ -529,10 +536,6 @@ struct rtld_global_ro > #endif > > /* Get architecture specific definitions. */ > -#define PROCINFO_DECL > -#ifndef PROCINFO_CLASS > -# define PROCINFO_CLASS EXTERN > -#endif > #include <dl-procinfo.c> > > /* Names of shared object for which the RPATH should be ignored. */ > diff --git a/sysdeps/generic/link_map.h b/sysdeps/generic/link_map.h > new file mode 100644 > index 0000000000..a056184690 > --- /dev/null > +++ b/sysdeps/generic/link_map.h > @@ -0,0 +1 @@ > +/* No architecture specific definitions. */ > -- > 2.13.6 > I tested it with build-many-glibcs.py. If there are no objections, I will check it next week. Thanks.
On Wed, Nov 8, 2017 at 3:03 PM, H.J. Lu <hjl.tools@gmail.com> wrote: > On Tue, Oct 31, 2017 at 9:37 AM, H.J. Lu <hongjiu.lu@intel.com> wrote: >> To support Intel Control-flow Enforcement Technology (CET) run-time >> control: >> >> 1. An architecture specific field in the writable ld.so namespace is >> needed to indicate if CET features are enabled at run-time. >> 2. An architecture specific field in struct link_map is needed if >> CET features are enabled in an ELF module. >> >> This patch adds dl-procruntime.c to the writable ld.so namespace and >> link_map.h to struct link_map. >> >> Tested on x86-64. >> >> Any comments? >> >> H.J. >> -- >> * elf/dl-support.c: Include <dl-procruntime.c>. >> * include/link.h: Include <link_map.h>. >> * sysdeps/generic/dl-procruntime.c: New file. >> * sysdeps/generic/link_map.h: Likewise. >> * sysdeps/generic/ldsodefs.h: Include <dl-procruntime.c> in >> the writable ld.so namespace. >> --- >> elf/dl-support.c | 1 + >> include/link.h | 2 ++ >> sysdeps/generic/dl-procruntime.c | 1 + >> sysdeps/generic/ldsodefs.h | 11 +++++++---- >> sysdeps/generic/link_map.h | 1 + >> 5 files changed, 12 insertions(+), 4 deletions(-) >> create mode 100644 sysdeps/generic/dl-procruntime.c >> create mode 100644 sysdeps/generic/link_map.h >> >> diff --git a/elf/dl-support.c b/elf/dl-support.c >> index 5e3de90598..235d3a7f46 100644 >> --- a/elf/dl-support.c >> +++ b/elf/dl-support.c >> @@ -126,6 +126,7 @@ int _dl_starting_up = 1; >> void *_dl_random; >> >> /* Get architecture specific initializer. */ >> +#include <dl-procruntime.c> >> #include <dl-procinfo.c> >> >> /* Initial value of the CPU clock. */ >> diff --git a/include/link.h b/include/link.h >> index 3e1b2aefb7..82b77a6b41 100644 >> --- a/include/link.h >> +++ b/include/link.h >> @@ -203,6 +203,8 @@ struct link_map >> freed, ie. not allocated with >> the dummy malloc in ld.so. */ >> >> +#include <link_map.h> >> + >> /* Collected information about own RPATH directories. */ >> struct r_search_path_struct l_rpath_dirs; >> >> diff --git a/sysdeps/generic/dl-procruntime.c b/sysdeps/generic/dl-procruntime.c >> new file mode 100644 >> index 0000000000..a056184690 >> --- /dev/null >> +++ b/sysdeps/generic/dl-procruntime.c >> @@ -0,0 +1 @@ >> +/* No architecture specific definitions. */ >> diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h >> index 5efae2d96d..52a792a597 100644 >> --- a/sysdeps/generic/ldsodefs.h >> +++ b/sysdeps/generic/ldsodefs.h >> @@ -373,6 +373,13 @@ struct rtld_global >> EXTERN void (*_dl_rtld_unlock_recursive) (void *); >> #endif >> >> + /* Get architecture specific definitions. */ >> +#define PROCINFO_DECL >> +#ifndef PROCINFO_CLASS >> +# define PROCINFO_CLASS EXTERN >> +#endif >> +#include <dl-procruntime.c> >> + >> /* If loading a shared object requires that we make the stack executable >> when it was not, we do it by calling this function. >> It returns an errno code or zero on success. */ >> @@ -529,10 +536,6 @@ struct rtld_global_ro >> #endif >> >> /* Get architecture specific definitions. */ >> -#define PROCINFO_DECL >> -#ifndef PROCINFO_CLASS >> -# define PROCINFO_CLASS EXTERN >> -#endif >> #include <dl-procinfo.c> >> >> /* Names of shared object for which the RPATH should be ignored. */ >> diff --git a/sysdeps/generic/link_map.h b/sysdeps/generic/link_map.h >> new file mode 100644 >> index 0000000000..a056184690 >> --- /dev/null >> +++ b/sysdeps/generic/link_map.h >> @@ -0,0 +1 @@ >> +/* No architecture specific definitions. */ >> -- >> 2.13.6 >> > > I tested it with build-many-glibcs.py. If there are no objections, I will > check it next week. > > I am checking it in.
diff --git a/elf/dl-support.c b/elf/dl-support.c index 5e3de90598..235d3a7f46 100644 --- a/elf/dl-support.c +++ b/elf/dl-support.c @@ -126,6 +126,7 @@ int _dl_starting_up = 1; void *_dl_random; /* Get architecture specific initializer. */ +#include <dl-procruntime.c> #include <dl-procinfo.c> /* Initial value of the CPU clock. */ diff --git a/include/link.h b/include/link.h index 3e1b2aefb7..82b77a6b41 100644 --- a/include/link.h +++ b/include/link.h @@ -203,6 +203,8 @@ struct link_map freed, ie. not allocated with the dummy malloc in ld.so. */ +#include <link_map.h> + /* Collected information about own RPATH directories. */ struct r_search_path_struct l_rpath_dirs; diff --git a/sysdeps/generic/dl-procruntime.c b/sysdeps/generic/dl-procruntime.c new file mode 100644 index 0000000000..a056184690 --- /dev/null +++ b/sysdeps/generic/dl-procruntime.c @@ -0,0 +1 @@ +/* No architecture specific definitions. */ diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 5efae2d96d..52a792a597 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -373,6 +373,13 @@ struct rtld_global EXTERN void (*_dl_rtld_unlock_recursive) (void *); #endif + /* Get architecture specific definitions. */ +#define PROCINFO_DECL +#ifndef PROCINFO_CLASS +# define PROCINFO_CLASS EXTERN +#endif +#include <dl-procruntime.c> + /* If loading a shared object requires that we make the stack executable when it was not, we do it by calling this function. It returns an errno code or zero on success. */ @@ -529,10 +536,6 @@ struct rtld_global_ro #endif /* Get architecture specific definitions. */ -#define PROCINFO_DECL -#ifndef PROCINFO_CLASS -# define PROCINFO_CLASS EXTERN -#endif #include <dl-procinfo.c> /* Names of shared object for which the RPATH should be ignored. */ diff --git a/sysdeps/generic/link_map.h b/sysdeps/generic/link_map.h new file mode 100644 index 0000000000..a056184690 --- /dev/null +++ b/sysdeps/generic/link_map.h @@ -0,0 +1 @@ +/* No architecture specific definitions. */