[02/28] elf: Implement __rtld_malloc_is_full

Message ID bd7ec4292a698ad867c64673c2f17049e2fb070b.1601569371.git.fweimer@redhat.com
State Committed
Headers
Series glibc-hwcaps support |

Commit Message

Florian Weimer Oct. 1, 2020, 4:31 p.m. UTC
  In some cases, it is difficult to determine the kind of malloc
based on the execution context, so a function to determine that
is helpful.
---
 elf/dl-minimal.c      | 8 ++++++++
 include/rtld-malloc.h | 4 ++++
 2 files changed, 12 insertions(+)
  

Comments

Adhemerval Zanella Oct. 1, 2020, 6:23 p.m. UTC | #1
On 01/10/2020 13:31, Florian Weimer via Libc-alpha wrote:
> In some cases, it is difficult to determine the kind of malloc
> based on the execution context, so a function to determine that
> is helpful.

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  elf/dl-minimal.c      | 8 ++++++++
>  include/rtld-malloc.h | 4 ++++
>  2 files changed, 12 insertions(+)
> 
> diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c
> index 7c64e24c87..dc79f02458 100644
> --- a/elf/dl-minimal.c
> +++ b/elf/dl-minimal.c
> @@ -59,6 +59,14 @@ __rtld_malloc_init_stubs (void)
>    __rtld_realloc = &rtld_realloc;
>  }
>  
> +bool
> +__rtld_malloc_is_full (void)
> +{
> +  /* The caller assumes that there is an active malloc.  */
> +  assert (__rtld_malloc != NULL);
> +  return __rtld_malloc != &rtld_malloc;
> +}
> +

The 'full' is somewhat confusing, maybe 'complete'?

>  /* Lookup NAME at VERSION in the scope of MATCH.  */
>  static void *
>  lookup_malloc_symbol (struct link_map *main_map, const char *name,
> diff --git a/include/rtld-malloc.h b/include/rtld-malloc.h
> index b026a3270c..54f53f7888 100644
> --- a/include/rtld-malloc.h
> +++ b/include/rtld-malloc.h
> @@ -66,6 +66,10 @@ realloc (void *ptr, size_t size)
>     implementation.  */
>  void __rtld_malloc_init_stubs (void) attribute_hidden;
>  
> +/* Return false if the active malloc is the ld.so minimal malloc, true
> +   if it is the full implementation from libc.so.  */
> +_Bool __rtld_malloc_is_full (void) attribute_hidden;
> +
>  /* Called shortly before the final self-relocation (when RELRO
>     variables are still writable) to activate the real malloc
>     implementation.  MAIN_MAP is the link map of the executable.  */
>
  
Florian Weimer Oct. 8, 2020, 9:44 a.m. UTC | #2
* Adhemerval Zanella via Libc-alpha:

> On 01/10/2020 13:31, Florian Weimer via Libc-alpha wrote:
>> In some cases, it is difficult to determine the kind of malloc
>> based on the execution context, so a function to determine that
>> is helpful.
>
> LGTM, thanks.
>
> Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

Thanks, pushed as:

commit 72d36ffd7db55ae599f4c77feb0eae25a0f3714e
Author: Florian Weimer <fweimer@redhat.com>
Date:   Thu Oct 8 10:57:09 2020 +0200

    elf: Implement __rtld_malloc_is_complete
    
    In some cases, it is difficult to determine the kind of malloc
    based on the execution context, so a function to determine that
    is helpful.
    
    Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

Florian
  

Patch

diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c
index 7c64e24c87..dc79f02458 100644
--- a/elf/dl-minimal.c
+++ b/elf/dl-minimal.c
@@ -59,6 +59,14 @@  __rtld_malloc_init_stubs (void)
   __rtld_realloc = &rtld_realloc;
 }
 
+bool
+__rtld_malloc_is_full (void)
+{
+  /* The caller assumes that there is an active malloc.  */
+  assert (__rtld_malloc != NULL);
+  return __rtld_malloc != &rtld_malloc;
+}
+
 /* Lookup NAME at VERSION in the scope of MATCH.  */
 static void *
 lookup_malloc_symbol (struct link_map *main_map, const char *name,
diff --git a/include/rtld-malloc.h b/include/rtld-malloc.h
index b026a3270c..54f53f7888 100644
--- a/include/rtld-malloc.h
+++ b/include/rtld-malloc.h
@@ -66,6 +66,10 @@  realloc (void *ptr, size_t size)
    implementation.  */
 void __rtld_malloc_init_stubs (void) attribute_hidden;
 
+/* Return false if the active malloc is the ld.so minimal malloc, true
+   if it is the full implementation from libc.so.  */
+_Bool __rtld_malloc_is_full (void) attribute_hidden;
+
 /* Called shortly before the final self-relocation (when RELRO
    variables are still writable) to activate the real malloc
    implementation.  MAIN_MAP is the link map of the executable.  */