You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.6 KiB
47 lines
1.6 KiB
2 years ago
|
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>
|
||
|
|
||
|
diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c
|
||
|
index 4335f1bd24289b01..cf7df8a8d5eabe9d 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_complete (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 b026a3270cd24819..9266ec532f3f3376 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_complete (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. */
|