diff options
author | Roland McGrath <roland@hack.frob.com> | 2015-01-22 11:30:37 -0800 |
---|---|---|
committer | Roland McGrath <roland@hack.frob.com> | 2015-01-22 11:30:37 -0800 |
commit | 7c78e343799368f2b1a664e88a988ce4ec79eaa3 (patch) | |
tree | 33f168cc5453df7e73b4c8b234298ce737c05697 | |
parent | 0a6e4c2bb8875ddf33c2326cbc4080f8af2f896f (diff) | |
download | glibc-7c78e343799368f2b1a664e88a988ce4ec79eaa3.tar glibc-7c78e343799368f2b1a664e88a988ce4ec79eaa3.tar.gz glibc-7c78e343799368f2b1a664e88a988ce4ec79eaa3.tar.bz2 glibc-7c78e343799368f2b1a664e88a988ce4ec79eaa3.zip |
Separate IRT tables in rtld.
-rw-r--r-- | sysdeps/nacl/Makefile | 32 | ||||
-rw-r--r-- | sysdeps/nacl/Versions | 2 | ||||
-rw-r--r-- | sysdeps/nacl/nacl-interface-list.h | 31 | ||||
-rw-r--r-- | sysdeps/nacl/nacl-interface-table.c | 5 | ||||
-rw-r--r-- | sysdeps/nacl/nacl-interfaces.h | 15 | ||||
-rw-r--r-- | sysdeps/nacl/nacl-interfaces.mk.in | 19 | ||||
-rw-r--r-- | sysdeps/nacl/shlib-versions | 2 |
7 files changed, 74 insertions, 32 deletions
diff --git a/sysdeps/nacl/Makefile b/sysdeps/nacl/Makefile index 86d84650ca..693cd4cf31 100644 --- a/sysdeps/nacl/Makefile +++ b/sysdeps/nacl/Makefile @@ -20,6 +20,7 @@ # will probably never be useful for NaCl, just elide the directory rather # than implementing stuff to make it compile (and never get used). subdirs := $(filter-out nptl_db,$(subdirs)) +sorted-subdirs := $(filter-out nptl_db,$(sorted-subdirs)) # The (required) --with-headers option to configure sets sysheaders to the # location of the native_client/.. source directory. We'll get necessary @@ -62,16 +63,24 @@ ifeq ($(subdir),misc) # install it. sysdep_headers += bits/mman-linux.h -$(objpfx)nacl-interfaces.v.i: $(nacl)/nacl-interfaces.mk.in \ +# XXX temp test +others += hello hellow +others-static += hello + +endif + + +$(common-objpfx)nacl-interfaces.v.i: $(nacl)/nacl-interfaces.mk.in \ $(nacl)/nacl-interface-list.h --include $(objpfx)nacl-interfaces.v +-include $(common-objpfx)nacl-interfaces.v nacl-all-interfaces = $(nacl-mandatory-interfaces) $(nacl-optional-interfaces) nacl-interface-routines = $(nacl-all-interfaces:%=nacl-interface-%) define nacl-interface-table-command (echo '#define INTERFACE_CATEGORY $1'; \ - echo '#define INTERFACE_TYPE $*'; \ + echo '#define INTERFACE_MODULE $(firstword $(subst -, ,$*))'; \ + echo '#define INTERFACE_TYPE $(word 2,$(subst -, ,$*))'; \ echo '#define INTERFACE_STRING $(nacl-$*-string)'; \ echo '#include "nacl-interface-table.c"' \ ) > $@T @@ -81,21 +90,24 @@ endef nacl-interface-pattern = $(objpfx)nacl-interface-%.c $(nacl-mandatory-interfaces:%=$(nacl-interface-pattern)): \ - $(nacl-interface-pattern): $(nacl)/Makefile $(objpfx)nacl-interfaces.v + $(nacl-interface-pattern): $(nacl)/Makefile $(common-objpfx)nacl-interfaces.v $(make-target-directory) $(call nacl-interface-table-command,mandatory) $(nacl-optional-interfaces:%=$(nacl-interface-pattern)): \ - $(nacl-interface-pattern): $(nacl)/Makefile $(objpfx)nacl-interfaces.v + $(nacl-interface-pattern): $(nacl)/Makefile $(common-objpfx)nacl-interfaces.v $(make-target-directory) $(call nacl-interface-table-command,optional) -sysdep_routines += nacl_interface_query \ - nacl-interfaces $(nacl-interface-routines) +nacl-routines-of = $(filter nacl-interface-$1-%,$(nacl-interface-routines)) -# XXX temp test -others += hello hellow -others-static += hello +ifeq ($(subdir),csu) +sysdep_routines += nacl_interface_query \ + nacl-interfaces $(call nacl-routines-of,libc) +endif +ifeq ($(subdir),elf) +sysdep-dl-routines += $(call nacl-routines-of,rtld) +sysdep-rtld-routines += nacl-interfaces $(call nacl-routines-of,rtld) endif ifeq ($(subdir),io) diff --git a/sysdeps/nacl/Versions b/sysdeps/nacl/Versions index 60f1e92d49..32eb77241a 100644 --- a/sysdeps/nacl/Versions +++ b/sysdeps/nacl/Versions @@ -15,5 +15,7 @@ libc { __libc_open; __libc_close; __libc_fork; + + __nacl_irt_*; } } diff --git a/sysdeps/nacl/nacl-interface-list.h b/sysdeps/nacl/nacl-interface-list.h index 3206eb75f9..2e6afd731c 100644 --- a/sysdeps/nacl/nacl-interface-list.h +++ b/sysdeps/nacl/nacl-interface-list.h @@ -1,11 +1,20 @@ -NACL_MANDATORY_INTERFACE (NACL_IRT_BASIC_v0_1, nacl_irt_basic) -NACL_MANDATORY_INTERFACE (NACL_IRT_FDIO_v0_1, nacl_irt_fdio) -NACL_MANDATORY_INTERFACE (NACL_IRT_FILENAME_v0_1, nacl_irt_filename) -NACL_MANDATORY_INTERFACE (NACL_IRT_MEMORY_v0_3, nacl_irt_memory) -NACL_MANDATORY_INTERFACE (NACL_IRT_DYNCODE_v0_1, nacl_irt_dyncode) -NACL_MANDATORY_INTERFACE (NACL_IRT_THREAD_v0_1, nacl_irt_thread) -NACL_MANDATORY_INTERFACE (NACL_IRT_FUTEX_v0_1, nacl_irt_futex) -NACL_MANDATORY_INTERFACE (NACL_IRT_TLS_v0_1, nacl_irt_tls) -NACL_MANDATORY_INTERFACE (NACL_IRT_RESOURCE_OPEN_v0_1, nacl_irt_resource_open) -NACL_OPTIONAL_INTERFACE (NACL_IRT_CLOCK_v0_1, nacl_irt_clock) -NACL_OPTIONAL_INTERFACE (NACL_IRT_DEV_GETPID_v0_1, nacl_irt_dev_getpid) +NACL_MANDATORY_INTERFACE (rtld, + NACL_IRT_BASIC_v0_1, nacl_irt_basic) +NACL_MANDATORY_INTERFACE (rtld, + NACL_IRT_FDIO_v0_1, nacl_irt_fdio) +NACL_MANDATORY_INTERFACE (rtld, + NACL_IRT_FILENAME_v0_1, nacl_irt_filename) +NACL_MANDATORY_INTERFACE (rtld, + NACL_IRT_MEMORY_v0_3, nacl_irt_memory) +NACL_MANDATORY_INTERFACE (libc, + NACL_IRT_THREAD_v0_1, nacl_irt_thread) +NACL_MANDATORY_INTERFACE (rtld, + NACL_IRT_FUTEX_v0_1, nacl_irt_futex) +NACL_MANDATORY_INTERFACE (rtld, + NACL_IRT_TLS_v0_1, nacl_irt_tls) +NACL_MANDATORY_INTERFACE (libc, + NACL_IRT_RESOURCE_OPEN_v0_1, nacl_irt_resource_open) +NACL_OPTIONAL_INTERFACE (libc, + NACL_IRT_CLOCK_v0_1, nacl_irt_clock) +NACL_OPTIONAL_INTERFACE (rtld, + NACL_IRT_DEV_GETPID_v0_1, nacl_irt_dev_getpid) diff --git a/sysdeps/nacl/nacl-interface-table.c b/sysdeps/nacl/nacl-interface-table.c index 5a53fbdb0d..e5401983f9 100644 --- a/sysdeps/nacl/nacl-interface-table.c +++ b/sysdeps/nacl/nacl-interface-table.c @@ -23,6 +23,10 @@ #define STRINGIFY(x) STRINGIFY_1 (x) #define STRINGIFY_1(x) #x +#if IS_IN (rtld) && PASTE (MODULE_, INTERFACE_MODULE) != MODULE_rtld +# error "This interface is also needed in rtld." +#endif + #define SECTION(which) \ section ("nacl_" STRINGIFY (INTERFACE_CATEGORY) "_interface_" #which) @@ -36,3 +40,4 @@ static const struct nacl_interface PASTE (desc_, INTERFACE_TYPE) struct INTERFACE_TYPE PASTE (__, INTERFACE_TYPE) __attribute__ ((SECTION (tables))); +PASTE (INTERFACE_MODULE, _hidden_data_def) (PASTE (__, INTERFACE_TYPE)) diff --git a/sysdeps/nacl/nacl-interfaces.h b/sysdeps/nacl/nacl-interfaces.h index 524ca8d75c..8d28e1a6df 100644 --- a/sysdeps/nacl/nacl-interfaces.h +++ b/sysdeps/nacl/nacl-interfaces.h @@ -75,8 +75,19 @@ next_nacl_interface (const struct nacl_interface *i) & -align); } -#define NACL_MANDATORY_INTERFACE(id, type) extern struct type __##type; -#define NACL_OPTIONAL_INTERFACE(id, type) extern struct type __##type; +#if IS_IN (libpthread) +# define libpthread_hidden_proto(name) hidden_proto (name) +#else +# define libpthread_hidden_proto(name) +#endif + +#define DECLARE_INTERFACE(module, type) \ + extern struct type __##type; module##_hidden_proto (__##type); + +#define NACL_MANDATORY_INTERFACE(module, id, type) \ + DECLARE_INTERFACE (module, type) +#define NACL_OPTIONAL_INTERFACE(module, id, type) \ + DECLARE_INTERFACE (module, type) #include "nacl-interface-list.h" #undef NACL_MANDATORY_INTERFACE #undef NACL_OPTIONAL_INTERFACE diff --git a/sysdeps/nacl/nacl-interfaces.mk.in b/sysdeps/nacl/nacl-interfaces.mk.in index 5d8c36e99f..92ff3c6afe 100644 --- a/sysdeps/nacl/nacl-interfaces.mk.in +++ b/sysdeps/nacl/nacl-interfaces.mk.in @@ -1,20 +1,23 @@ /* Might as well be -*- C -*-. - This generates a makefile that sets the two variables - nacl-mandatory-interfaces and nacl-optional-interfaces + + This generates a makefile that sets the variable pairs + nacl-MODULE-mandatory-interfaces and nacl-MODULE-optional-interfaces based on the nacl-interface-list.h list. */ -%define NACL_MANDATORY_INTERFACE(id, type) \ - nacl-mandatory-interfaces += type -%define NACL_OPTIONAL_INTERFACE(id, type) \ - nacl-optional-interfaces += type +%define NACL_MANDATORY_INTERFACE(module, id, type) \ + nacl-mandatory-interfaces += module-type +%define NACL_OPTIONAL_INTERFACE(module, id, type) \ + nacl-optional-interfaces += module-type %include "nacl-interface-list.h" %undef NACL_MANDATORY_INTERFACE %undef NACL_OPTIONAL_INTERFACE -%define NACL_MANDATORY_INTERFACE(id, type) nacl-type-string := id -%define NACL_OPTIONAL_INTERFACE(id, type) nacl-type-string := id +%define NACL_MANDATORY_INTERFACE(module, id, type) \ + nacl-module-type-string := id +%define NACL_OPTIONAL_INTERFACE(module, id, type) \ + nacl-module-type-string := id %include "nacl-interface-list.h" diff --git a/sysdeps/nacl/shlib-versions b/sysdeps/nacl/shlib-versions index dc122bf3f5..2658047209 100644 --- a/sysdeps/nacl/shlib-versions +++ b/sysdeps/nacl/shlib-versions @@ -1,6 +1,6 @@ # DEFAULT Earliest symbol set # ------- ------------------- -DEFAULT GLIBC_2.20 +DEFAULT GLIBC_2.21 # Library=version Earliest symbol set (optional) # --------------- ------------------------------ |