elf: Do not add a copy of _dl_find_object to libc.so
Checks
Context |
Check |
Description |
redhat-pt-bot/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
linaro-tcwg-bot/tcwg_glibc_build--master-aarch64 |
success
|
Build passed
|
redhat-pt-bot/TryBot-32bit |
success
|
Build for i686
|
linaro-tcwg-bot/tcwg_glibc_build--master-arm |
success
|
Build passed
|
linaro-tcwg-bot/tcwg_glibc_check--master-arm |
success
|
Test passed
|
linaro-tcwg-bot/tcwg_glibc_check--master-aarch64 |
success
|
Test passed
|
Commit Message
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.
---
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(-)
base-commit: eaf4fc516a4c91de0c0f88d2d7b544751ea6f72b
Comments
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
>
@@ -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 \
@@ -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
@@ -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
@@ -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;