aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS4
-rw-r--r--malloc/mtrace.c57
2 files changed, 24 insertions, 37 deletions
diff --git a/NEWS b/NEWS
index 60933bd..8e72946 100644
--- a/NEWS
+++ b/NEWS
@@ -93,6 +93,10 @@ Deprecated and removed features, and other changes affecting compatibility:
package managers that delete removed files late during the package
upgrade or downgrade process.
+* The symbols mallwatch and tr_break are now deprecated and no longer used in
+ mtrace. Similar functionality can be achieved by using conditional
+ breakpoints within mtrace functions from within gdb.
+
Changes to build and runtime requirements:
* On Linux, the shm_open, sem_open, and related functions now expect the
diff --git a/malloc/mtrace.c b/malloc/mtrace.c
index b65b21a..6c2c58b 100644
--- a/malloc/mtrace.c
+++ b/malloc/mtrace.c
@@ -50,8 +50,25 @@ static char *malloc_trace_buffer;
__libc_lock_define_initialized (static, lock);
-/* Address to breakpoint on accesses to... */
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_34)
+/* Compatibility symbols that were introduced to help break at allocation sites
+ for specific memory allocations. This is unusable with ASLR, although gdb
+ may allow predictable allocation addresses. Even then, gdb has watchpoint
+ and conditional breakpoint support which should provide the same
+ functionality without having this kludge. These symbols are preserved in
+ case some applications ended up linking against them but they don't actually
+ do anything anymore; not that they did much before anyway. */
+
void *mallwatch;
+compat_symbol (libc, mallwatch, mallwatch, GLIBC_2_0);
+
+void
+tr_break (void)
+{
+}
+compat_symbol (libc, tr_break, tr_break, GLIBC_2_0);
+#endif
+
/* Old hook values. */
static void (*tr_old_free_hook) (void *ptr, const void *);
@@ -61,19 +78,6 @@ static void *(*tr_old_realloc_hook) (void *ptr, size_t size,
static void *(*tr_old_memalign_hook) (size_t __alignment, size_t __size,
const void *);
-/* This function is called when the block being alloc'd, realloc'd, or
- freed has an address matching the variable "mallwatch". In a debugger,
- set "mallwatch" to the address of interest, then put a breakpoint on
- tr_break. */
-
-extern void tr_break (void) __THROW;
-libc_hidden_proto (tr_break)
-void
-tr_break (void)
-{
-}
-libc_hidden_def (tr_break)
-
static void
tr_where (const void *caller, Dl_info *info)
{
@@ -167,12 +171,6 @@ tr_freehook (void *ptr, const void *caller)
tr_where (caller, info);
/* Be sure to print it first. */
fprintf (mallstream, "- %p\n", ptr);
- if (ptr == mallwatch)
- {
- __libc_lock_unlock (lock);
- tr_break ();
- __libc_lock_lock (lock);
- }
set_default_hooks ();
if (tr_old_free_hook != NULL)
(*tr_old_free_hook)(ptr, caller);
@@ -203,9 +201,6 @@ tr_mallochook (size_t size, const void *caller)
__libc_lock_unlock (lock);
- if (hdr == mallwatch)
- tr_break ();
-
return hdr;
}
@@ -214,9 +209,6 @@ tr_reallochook (void *ptr, size_t size, const void *caller)
{
void *hdr;
- if (ptr == mallwatch)
- tr_break ();
-
Dl_info mem;
Dl_info *info = lock_and_info (caller, &mem);
@@ -247,9 +239,6 @@ tr_reallochook (void *ptr, size_t size, const void *caller)
__libc_lock_unlock (lock);
- if (hdr == mallwatch)
- tr_break ();
-
return hdr;
}
@@ -274,9 +263,6 @@ tr_memalignhook (size_t alignment, size_t size, const void *caller)
__libc_lock_unlock (lock);
- if (hdr == mallwatch)
- tr_break ();
-
return hdr;
}
@@ -296,10 +282,7 @@ release_libc_mem (void)
#endif
-/* We enable tracing if either the environment variable MALLOC_TRACE
- is set, or if the variable mallwatch has been patched to an address
- that the debugging user wants us to stop on. When patching mallwatch,
- don't forget to set a breakpoint on tr_break! */
+/* We enable tracing if the environment variable MALLOC_TRACE is set. */
void
mtrace (void)
@@ -321,7 +304,7 @@ mtrace (void)
#else
mallfile = getenv (mallenv);
#endif
- if (mallfile != NULL || mallwatch != NULL)
+ if (mallfile != NULL)
{
char *mtb = malloc (TRACE_BUFFER_SIZE);
if (mtb == NULL)