about summary refs log tree commit diff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-11-13 08:02:39 -0800
committerH.J. Lu <hjl.tools@gmail.com>2017-11-13 08:02:52 -0800
commit4a306ef1c8ff1cac292c2fd56a3b91d7bfdecefc (patch)
tree48c4360f23ee98ce4355b932ba66b4c1226de0a7
parente69897bf202e18034cbef26f363bae64de70a196 (diff)
downloadglibc-4a306ef1c8ff1cac292c2fd56a3b91d7bfdecefc.tar.gz
glibc-4a306ef1c8ff1cac292c2fd56a3b91d7bfdecefc.tar.xz
glibc-4a306ef1c8ff1cac292c2fd56a3b91d7bfdecefc.zip
ld.so: Add architecture specific fields
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 with build-many-glibcs.py.

	* 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.
-rw-r--r--ChangeLog9
-rw-r--r--elf/dl-support.c1
-rw-r--r--include/link.h2
-rw-r--r--sysdeps/generic/dl-procruntime.c1
-rw-r--r--sysdeps/generic/ldsodefs.h11
-rw-r--r--sysdeps/generic/link_map.h1
6 files changed, 21 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index fad2bd0d1c..8f5de79bbb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2017-11-13  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* 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.
+
 2017-11-12  Paul Eggert  <eggert@cs.ucla.edu>
 
 	timezone: pacify GCC -Wstringop-truncation
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.  */