diff options
author | Karthik Kamath <karthik.kamath@oracle.com> | 2020-07-19 11:10:12 +1000 |
---|---|---|
committer | Daniel Black <daniel@mariadb.org> | 2020-07-28 11:10:25 +1000 |
commit | e6cb263ef3ecc59510b62f7c7dd5dfcd78a613c7 (patch) | |
tree | 4d76d9c5faaa71c3457fe0aef54aca05e7aceea8 /mysys | |
parent | beec8404fa967bd2617a8da50a80930356877980 (diff) | |
download | mariadb-git-e6cb263ef3ecc59510b62f7c7dd5dfcd78a613c7.tar.gz |
MDEV-15961: Fix stacktraces under FreeBSD (aarch64)
Largely based on MySQL commit
https://github.com/mysql/mysql-server/commit/75271e51d60bce8683423b208cbb43b11ca6060e
MySQL Ref:
BUG#24566529: BACKPORT BUG#23575445 TO 5.6
(cut)
Also, the PTR_SANE macro which tries to check if a pointer
is invalid (used when printing pointer values in stack traces)
gave false negatives on OSX/FreeBSD. On these platforms we
now simply check if the pointer is non-null. This also removes
a sbrk() deprecation warning when building on OS X. (It was
before only disabled with building using XCode).
Removed execinfo path of MySQL patch that was already included.
sbrk doesn't exist on FreeBSD aarch64.
Removed HAVE_BSS_START based detection and replaced with __linux__
as it doesn't exist on OSX, Solaris or Windows. __bss_start
exists on mutiple Linux architectures.
Tested on FreeBSD and Linux x86_64. Being in FreeBSD ports for 2
years implies a good testing there on all FreeBSD architectures there
too. MySQL-8.0.21 code is functionally identical to original commit.
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/stacktrace.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/mysys/stacktrace.c b/mysys/stacktrace.c index 7daed0df673..b31213b8488 100644 --- a/mysys/stacktrace.c +++ b/mysys/stacktrace.c @@ -34,19 +34,19 @@ #include <execinfo.h> #endif +#ifdef __linux__ #define PTR_SANE(p) ((p) && (char*)(p) >= heap_start && (char*)(p) <= heap_end) - static char *heap_start; - -#ifdef HAVE_BSS_START extern char *__bss_start; -#endif +#else +#define PTR_SANE(p) (p) +#endif /* __linux */ void my_init_stacktrace() { -#ifdef HAVE_BSS_START +#ifdef __linux__ heap_start = (char*) &__bss_start; -#endif +#endif /* __linux__ */ } #ifdef __linux__ @@ -149,15 +149,15 @@ static int safe_print_str(const char *addr, int max_len) int my_safe_print_str(const char* val, int max_len) { +#ifdef __linux__ char *heap_end; -#ifdef __linux__ // Try and make use of /proc filesystem to safely print memory contents. if (!safe_print_str(val, max_len)) return 0; -#endif heap_end= (char*) sbrk(0); +#endif if (!PTR_SANE(val)) { |