aboutsummaryrefslogtreecommitdiff
path: root/mysql/my_stacktrace.h
diff options
context:
space:
mode:
Diffstat (limited to 'mysql/my_stacktrace.h')
-rw-r--r--mysql/my_stacktrace.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/mysql/my_stacktrace.h b/mysql/my_stacktrace.h
new file mode 100644
index 0000000..a1e16a2
--- /dev/null
+++ b/mysql/my_stacktrace.h
@@ -0,0 +1,114 @@
+/* Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
+
+#ifndef _my_stacktrace_h_
+#define _my_stacktrace_h_
+
+#include <my_global.h>
+
+C_MODE_START
+
+/*
+ HAVE_BACKTRACE - Linux, FreeBSD, OSX
+ HAVE_PRINTSTACK - Solaris
+ _WIN32 - Windows
+*/
+#if defined(HAVE_BACKTRACE) || defined(HAVE_PRINTSTACK) || defined(_WIN32)
+#define HAVE_STACKTRACE 1
+void my_init_stacktrace();
+void my_print_stacktrace(uchar* stack_bottom, ulong thread_stack);
+void my_safe_puts_stderr(const char* val, size_t max_len);
+#if HAVE_BACKTRACE && HAVE_ABI_CXA_DEMANGLE
+char *my_demangle(const char *mangled_name, int *status);
+#endif
+#ifdef _WIN32
+void my_set_exception_pointers(EXCEPTION_POINTERS *ep);
+void my_create_minidump(const char *name, HANDLE process, DWORD pid);
+#endif
+#endif /* HAVE_BACKTRACE || HAVE_PRINTSTACK || _WIN32 */
+
+void my_write_core(int sig);
+
+
+
+/**
+ Async-signal-safe utility functions used by signal handler routines.
+ Declared here in order to unit-test them.
+ These are not general-purpose, but tailored to the signal handling routines.
+*/
+/**
+ Converts a longlong value to string.
+ @param base 10 for decimal, 16 for hex values (0..9a..f)
+ @param val The value to convert
+ @param buf Assumed to point to the *end* of the buffer.
+ @returns Pointer to the first character of the converted string.
+ Negative values:
+ for base-10 the return string will be prepended with '-'
+ for base-16 the return string will contain 16 characters
+ Implemented with simplicity, and async-signal-safety in mind.
+*/
+char *my_safe_itoa(int base, longlong val, char *buf);
+
+/**
+ Converts a ulonglong value to string.
+ @param base 10 for decimal, 16 for hex values (0..9a..f)
+ @param val The value to convert
+ @param buf Assumed to point to the *end* of the buffer.
+ @returns Pointer to the first character of the converted string.
+ Implemented with simplicity, and async-signal-safety in mind.
+*/
+char *my_safe_utoa(int base, ulonglong val, char *buf);
+
+/**
+ A (very) limited version of snprintf.
+ @param to Destination buffer.
+ @param n Size of destination buffer.
+ @param fmt printf() style format string.
+ @returns Number of bytes written, including terminating '\0'
+ Supports 'd' 'i' 'u' 'x' 'p' 's' conversion.
+ Supports 'l' and 'll' modifiers for integral types.
+ Does not support any width/precision.
+ Implemented with simplicity, and async-signal-safety in mind.
+*/
+size_t my_safe_snprintf(char* to, size_t n, const char* fmt, ...)
+ MY_ATTRIBUTE((format(printf, 3, 4)));
+
+/**
+ A (very) limited version of snprintf, which writes the result to STDERR.
+ @sa my_safe_snprintf
+ Implemented with simplicity, and async-signal-safety in mind.
+ @note Has an internal buffer capacity of 512 bytes,
+ which should suffice for our signal handling routines.
+*/
+size_t my_safe_printf_stderr(const char* fmt, ...)
+ MY_ATTRIBUTE((format(printf, 1, 2)));
+
+/**
+ Writes up to count bytes from buffer to STDERR.
+ Implemented with simplicity, and async-signal-safety in mind.
+ @param buf Buffer containing data to be written.
+ @param count Number of bytes to write.
+ @returns Number of bytes written.
+*/
+size_t my_write_stderr(const void *buf, size_t count);
+
+/**
+ Writes system time to STDERR without allocating new memory.
+*/
+void my_safe_print_system_time();
+
+C_MODE_END
+
+#endif /* _my_stacktrace_h_ */