[Tarantool-patches] [PATCH] crash: allow to build on non x86-64 machines
Cyrill Gorcunov
gorcunov at gmail.com
Mon Dec 28 22:36:22 MSK 2020
The general purpose registers were optional earlier
lets make them optional back allowing the code to
be compiled on non x86-64 machines.
Signed-off-by: Cyrill Gorcunov <gorcunov at gmail.com>
---
Guys, obviously I didn't test on real non x86 machine.
But since we've been notifying from public chat that
people are trying to compile tarantool on arm lets
make a quick fix.
branch gorcunov/crash-cross-compile
src/lib/core/crash.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/src/lib/core/crash.c b/src/lib/core/crash.c
index 8397603bc..5b50ed3c4 100644
--- a/src/lib/core/crash.c
+++ b/src/lib/core/crash.c
@@ -30,10 +30,11 @@
/** Use strlcpy with destination as an array */
#define strlcpy_a(dst, src) strlcpy(dst, src, sizeof(dst))
-#ifdef TARGET_OS_LINUX
-#ifndef __x86_64__
-# error "Non x86-64 architectures are not supported"
+#if defined(TARGET_OS_LINUX) && defined(__x86_64__)
+# define HAS_GREG
#endif
+
+#ifdef HAS_GREG
struct crash_greg {
uint64_t r8;
uint64_t r9;
@@ -64,7 +65,7 @@ struct crash_greg {
uint64_t fpstate;
uint64_t reserved1[8];
};
-#endif /* TARGET_OS_LINUX */
+#endif /* HAS_GREG */
static struct crash_info {
/**
@@ -76,7 +77,7 @@ static struct crash_info {
*/
void *context_addr;
void *siginfo_addr;
-#ifdef TARGET_OS_LINUX
+#ifdef HAS_GREG
/**
* Registers contents.
*/
@@ -199,7 +200,7 @@ crash_collect(int signo, siginfo_t *siginfo, void *ucontext)
backtrace(start, sizeof(cinfo->backtrace_buf));
#endif
-#ifdef TARGET_OS_LINUX
+#ifdef HAS_GREG
/*
* uc_mcontext on libc level looks somehow strange,
* they define an array of uint64_t where each register
@@ -411,7 +412,7 @@ crash_report_stderr(struct crash_info *cinfo)
fprintf(stderr, " context: %p\n", cinfo->context_addr);
fprintf(stderr, " siginfo: %p\n", cinfo->siginfo_addr);
-#ifdef TARGET_OS_LINUX
+#ifdef HAS_GREG
# define fprintf_reg(__n, __v) \
fprintf(stderr, " %-9s0x%-17llx%lld\n", \
__n, (long long)__v, (long long)__v)
@@ -441,7 +442,7 @@ crash_report_stderr(struct crash_info *cinfo)
fprintf_reg("oldmask", cinfo->greg.oldmask);
fprintf_reg("trapno", cinfo->greg.trapno);
# undef fprintf_reg
-#endif /* TARGET_OS_LINUX */
+#endif /* HAS_GREG */
fprintf(stderr, "Current time: %u\n", (unsigned)time(0));
fprintf(stderr, "Please file a bug at "
--
2.26.2
More information about the Tarantool-patches
mailing list