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.
44 lines
1.5 KiB
44 lines
1.5 KiB
commit b2f32e746492615a6eb3e66fac1e766e32e8deb1 |
|
Author: Florian Weimer <fweimer@redhat.com> |
|
Date: Thu Jul 21 12:12:08 2022 +0200 |
|
|
|
malloc: Simplify implementation of __malloc_assert |
|
|
|
It is prudent not to run too much code after detecting heap |
|
corruption, and __fxprintf is really complex. The line number |
|
and file name do not carry much information, so it is not included |
|
in the error message. (__libc_message only supports %s formatting.) |
|
The function name and assertion should provide some context. |
|
|
|
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org> |
|
(cherry picked from commit ac8047cdf326504f652f7db97ec96c0e0cee052f) |
|
|
|
diff --git a/malloc/malloc.c b/malloc/malloc.c |
|
index 7882c70f0a0312d1..d31e985ecce968fe 100644 |
|
--- a/malloc/malloc.c |
|
+++ b/malloc/malloc.c |
|
@@ -294,19 +294,14 @@ |
|
# define __assert_fail(assertion, file, line, function) \ |
|
__malloc_assert(assertion, file, line, function) |
|
|
|
-extern const char *__progname; |
|
- |
|
-static void |
|
+_Noreturn static void |
|
__malloc_assert (const char *assertion, const char *file, unsigned int line, |
|
const char *function) |
|
{ |
|
- (void) __fxprintf (NULL, "%s%s%s:%u: %s%sAssertion `%s' failed.\n", |
|
- __progname, __progname[0] ? ": " : "", |
|
- file, line, |
|
- function ? function : "", function ? ": " : "", |
|
- assertion); |
|
- fflush (stderr); |
|
- abort (); |
|
+ __libc_message (do_abort, "\ |
|
+Fatal glibc error: malloc assertion failure in %s: %s\n", |
|
+ function, assertion); |
|
+ __builtin_unreachable (); |
|
} |
|
#endif |
|
#endif
|
|
|