Message ID | 87le325yj3.fsf@oldenburg.str.redhat.com |
---|---|
State | New |
Headers | show |
Series | elf: Do not add a copy of _dl_find_object to libc.so | expand |
On 18/06/24 07:35, Florian Weimer wrote: > This reduces code size and dependencies on ld.so internals from > libc.so. > > Fixes commit f4c142bb9fe6b02c0af8cfca8a920091e2dba44b > ("arm: Use _dl_find_object on __gnu_Unwind_Find_exidx (BZ 31405)"). > > Tested on x86_64-linux-gnu and built with build-many-glibcs.py. LGTM, thanks. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> > > --- > elf/Makefile | 2 +- > elf/dl-find_object.c | 5 ++--- > include/dlfcn.h | 3 +-- > sysdeps/arm/find_exidx.c | 3 ++- > 4 files changed, 6 insertions(+), 7 deletions(-) > > diff --git a/elf/Makefile b/elf/Makefile > index bb6cd06dec..52b63a4be2 100644 > --- a/elf/Makefile > +++ b/elf/Makefile > @@ -34,7 +34,6 @@ routines = \ > dl-addr \ > dl-addr-obj \ > dl-early_allocate \ > - dl-find_object \ > dl-iteratephdr \ > dl-libc \ > dl-origin \ > @@ -61,6 +60,7 @@ dl-routines = \ > dl-deps \ > dl-exception \ > dl-execstack \ > + dl-find_object \ > dl-fini \ > dl-init \ > dl-load \ > diff --git a/elf/dl-find_object.c b/elf/dl-find_object.c > index 449302eda3..940fa5c223 100644 > --- a/elf/dl-find_object.c > +++ b/elf/dl-find_object.c > @@ -356,7 +356,7 @@ _dlfo_lookup (uintptr_t pc, struct dl_find_object_internal *first1, size_t size) > } > > int > -__dl_find_object (void *pc1, struct dl_find_object *result) > +_dl_find_object (void *pc1, struct dl_find_object *result) > { > uintptr_t pc = (uintptr_t) pc1; > > @@ -463,8 +463,7 @@ __dl_find_object (void *pc1, struct dl_find_object *result) > return -1; > } /* Transaction retry loop. */ > } > -hidden_def (__dl_find_object) > -weak_alias (__dl_find_object, _dl_find_object) > +rtld_hidden_def (_dl_find_object) > > /* _dlfo_process_initial is called twice. First to compute the array > sizes from the initial loaded mappings. Second to fill in the > diff --git a/include/dlfcn.h b/include/dlfcn.h > index f49ee1b0c9..a44420fa37 100644 > --- a/include/dlfcn.h > +++ b/include/dlfcn.h > @@ -4,8 +4,7 @@ > #include <link.h> /* For ElfW. */ > #include <stdbool.h> > > -extern __typeof (_dl_find_object) __dl_find_object; > -hidden_proto (__dl_find_object) > +rtld_hidden_proto (_dl_find_object) > > /* Internally used flag. */ > #define __RTLD_DLOPEN 0x80000000 > diff --git a/sysdeps/arm/find_exidx.c b/sysdeps/arm/find_exidx.c > index a924d59b9f..4257c26838 100644 > --- a/sysdeps/arm/find_exidx.c > +++ b/sysdeps/arm/find_exidx.c > @@ -15,6 +15,7 @@ > License along with the GNU C Library. If not, see > <https://www.gnu.org/licenses/>. */ > > +#include <ldsodefs.h> > #include <link.h> > > /* Find the exception index table containing PC. */ > @@ -23,7 +24,7 @@ _Unwind_Ptr > __gnu_Unwind_Find_exidx (_Unwind_Ptr pc, int * pcount) > { > struct dl_find_object data; > - if (__dl_find_object ((void *) pc, &data) < 0) > + if (GLRO(dl_find_object) ((void *) pc, &data) < 0) > return 0; > *pcount = data.dlfo_eh_count; > return (_Unwind_Ptr) data.dlfo_eh_frame; > > base-commit: eaf4fc516a4c91de0c0f88d2d7b544751ea6f72b >
diff --git a/elf/Makefile b/elf/Makefile index bb6cd06dec..52b63a4be2 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -34,7 +34,6 @@ routines = \ dl-addr \ dl-addr-obj \ dl-early_allocate \ - dl-find_object \ dl-iteratephdr \ dl-libc \ dl-origin \ @@ -61,6 +60,7 @@ dl-routines = \ dl-deps \ dl-exception \ dl-execstack \ + dl-find_object \ dl-fini \ dl-init \ dl-load \ diff --git a/elf/dl-find_object.c b/elf/dl-find_object.c index 449302eda3..940fa5c223 100644 --- a/elf/dl-find_object.c +++ b/elf/dl-find_object.c @@ -356,7 +356,7 @@ _dlfo_lookup (uintptr_t pc, struct dl_find_object_internal *first1, size_t size) } int -__dl_find_object (void *pc1, struct dl_find_object *result) +_dl_find_object (void *pc1, struct dl_find_object *result) { uintptr_t pc = (uintptr_t) pc1; @@ -463,8 +463,7 @@ __dl_find_object (void *pc1, struct dl_find_object *result) return -1; } /* Transaction retry loop. */ } -hidden_def (__dl_find_object) -weak_alias (__dl_find_object, _dl_find_object) +rtld_hidden_def (_dl_find_object) /* _dlfo_process_initial is called twice. First to compute the array sizes from the initial loaded mappings. Second to fill in the diff --git a/include/dlfcn.h b/include/dlfcn.h index f49ee1b0c9..a44420fa37 100644 --- a/include/dlfcn.h +++ b/include/dlfcn.h @@ -4,8 +4,7 @@ #include <link.h> /* For ElfW. */ #include <stdbool.h> -extern __typeof (_dl_find_object) __dl_find_object; -hidden_proto (__dl_find_object) +rtld_hidden_proto (_dl_find_object) /* Internally used flag. */ #define __RTLD_DLOPEN 0x80000000 diff --git a/sysdeps/arm/find_exidx.c b/sysdeps/arm/find_exidx.c index a924d59b9f..4257c26838 100644 --- a/sysdeps/arm/find_exidx.c +++ b/sysdeps/arm/find_exidx.c @@ -15,6 +15,7 @@ License along with the GNU C Library. If not, see <https://www.gnu.org/licenses/>. */ +#include <ldsodefs.h> #include <link.h> /* Find the exception index table containing PC. */ @@ -23,7 +24,7 @@ _Unwind_Ptr __gnu_Unwind_Find_exidx (_Unwind_Ptr pc, int * pcount) { struct dl_find_object data; - if (__dl_find_object ((void *) pc, &data) < 0) + if (GLRO(dl_find_object) ((void *) pc, &data) < 0) return 0; *pcount = data.dlfo_eh_count; return (_Unwind_Ptr) data.dlfo_eh_frame;