From 28e6e4fdb5fe4166a6f5a9c3a23472c5f597e138 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Sun, 21 Jul 2013 18:27:07 +0400 Subject: [PATCH] Fix GC_caller_func_offset and GC_DBG_RA names * dbg_mlc.c (GC_caller_func_offset): Test FREEBSD macro instead of __FreeBSD__ (since the former is always defined in gcconfig.h included from this file indirectly). * dyn_load.c (ElfW): Likewise. * dbg_mlc.c (GC_caller_func): Fix name to GC_caller_func_offset. * dbg_mlc.c (GC_debug_realloc): Invoke GC_caller_func_offset if GC_ADD_CALLER (same as in GC_debug_malloc and commit 2cdf7ec). * include/private/gc_priv.h (RA): Fix name to GC_DBG_RA. * include/private/gcconfig.h (X86_64): Test __x86_64__ in addition to __amd64__ for FreeBSD (proposed in commit b54833a). --- dbg_mlc.c | 12 ++++++++++-- dyn_load.c | 2 +- include/private/gc_priv.h | 5 ++--- include/private/gcconfig.h | 10 +++++----- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/dbg_mlc.c b/dbg_mlc.c index 18b50907..c643a02b 100644 --- a/dbg_mlc.c +++ b/dbg_mlc.c @@ -455,7 +455,7 @@ GC_API void GC_CALL GC_debug_register_displacement(size_t offset) GC_register_displacement((word)sizeof(oh) + offset); } -#if defined(__FreeBSD__) +#ifdef FREEBSD #include static void GC_caller_func_offset(ad, symp, offp) const GC_word ad; @@ -469,7 +469,7 @@ int *offp; } } #else -#define GC_caller_func(ad, symp, offp) +# define GC_caller_func_offset(ad, symp, offp) (void)0 #endif GC_API void * GC_CALL GC_debug_malloc(size_t lb, GC_EXTRA_PARAMS) @@ -854,6 +854,14 @@ GC_API void * GC_CALL GC_debug_realloc(void * p, size_t lb, GC_EXTRA_PARAMS) void * base; void * result; hdr * hhdr; + +#ifdef GC_ADD_CALLER + if (s == NULL) { + GC_caller_func_offset(ra, &s, &i); + if (s == NULL) + s = "unknown"; + } +#endif if (p == 0) return(GC_debug_malloc(lb, OPT_RA s, i)); diff --git a/dyn_load.c b/dyn_load.c index a76e7b84..84fdee89 100644 --- a/dyn_load.c +++ b/dyn_load.c @@ -105,7 +105,7 @@ STATIC GC_has_static_roots_func GC_has_static_roots = 0; /* Newer versions of GNU/Linux define this macro. We * define it similarly for any ELF systems that don't. */ # ifndef ElfW -# if defined(FREEBSD) || defined(__FreeBSD__) +# if defined(FREEBSD) # if __ELF_WORD_SIZE == 32 # define ElfW(type) Elf32_##type # else diff --git a/include/private/gc_priv.h b/include/private/gc_priv.h index 669918c6..49e68d21 100644 --- a/include/private/gc_priv.h +++ b/include/private/gc_priv.h @@ -1715,11 +1715,10 @@ GC_INNER ptr_t GC_allocobj(size_t sz, int kind); /* head. Sz is in granules. */ #ifdef GC_ADD_CALLER -# define GC_DBG_RA GC_RETURN_ADDR, # ifdef GC_RETURN_ADDR_PARENT -# define RA GC_RETURN_ADDR_PARENT, +# define GC_DBG_RA GC_RETURN_ADDR_PARENT, # else -# define RA GC_RETURN_ADDR, +# define GC_DBG_RA GC_RETURN_ADDR, # endif #else # define GC_DBG_RA /* empty */ diff --git a/include/private/gcconfig.h b/include/private/gcconfig.h index 31f1023b..c04e0972 100644 --- a/include/private/gcconfig.h +++ b/include/private/gcconfig.h @@ -72,9 +72,9 @@ # endif # if defined(__arm) || defined(__arm__) || defined(__thumb__) # define ARM32 -# if !defined(LINUX) && !defined(NETBSD) && !defined(OPENBSD) \ - && !defined(DARWIN) && !defined(_WIN32) && !defined(__CEGCC__) \ - && !defined(FREEBSD) +# if !defined(LINUX) && !defined(NETBSD) && !defined(FREEBSD) \ + && !defined(OPENBSD) && !defined(DARWIN) \ + && !defined(_WIN32) && !defined(__CEGCC__) # define NOSYS # define mach_type_known # endif @@ -360,7 +360,7 @@ # define I386 # define mach_type_known # endif -# if defined(FREEBSD) && defined(__amd64__) +# if defined(FREEBSD) && (defined(__amd64__) || defined(__x86_64__)) # define X86_64 # define mach_type_known # endif @@ -1958,8 +1958,8 @@ # define OS_TYPE "MSWINCE" # define DATAEND /* not needed */ # endif -/* To the future maintainer of this diff: this is the "ifdef ARM32" section */ # ifdef FREEBSD + /* FreeBSD/arm */ # define ALIGNMENT 4 # define OS_TYPE "FREEBSD" # ifdef __ELF__ -- 2.40.0