Fix a crash on android three different ways?
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4387 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
parent
bfc8bb864d
commit
e8fe32d5af
3
Makefile
3
Makefile
@ -62,7 +62,8 @@ $(ANDROID_TARGETS): CFLAGS += \
|
|||||||
-fPIC \
|
-fPIC \
|
||||||
-fdebug-compilation-dir . \
|
-fdebug-compilation-dir . \
|
||||||
-fomit-frame-pointer \
|
-fomit-frame-pointer \
|
||||||
-fno-asynchronous-unwind-tables
|
-fno-asynchronous-unwind-tables \
|
||||||
|
-funwind-tables
|
||||||
$(ANDROID_TARGETS): LDFLAGS += --sysroot $(ANDROID_NDK)/toolchains/llvm/prebuilt/linux-x86_64/sysroot -fPIC
|
$(ANDROID_TARGETS): LDFLAGS += --sysroot $(ANDROID_NDK)/toolchains/llvm/prebuilt/linux-x86_64/sysroot -fPIC
|
||||||
$(DEBUG_TARGETS): CFLAGS += -DDEBUG -Og
|
$(DEBUG_TARGETS): CFLAGS += -DDEBUG -Og
|
||||||
$(RELEASE_TARGETS): CFLAGS += -DNDEBUG
|
$(RELEASE_TARGETS): CFLAGS += -DNDEBUG
|
||||||
|
17
src/main.c
17
src/main.c
@ -586,6 +586,14 @@ static void _backtrace_error(void* data, const char* message, int errnum)
|
|||||||
tf_printf("libbacktrace error %d: %s\n", errnum, message);
|
tf_printf("libbacktrace error %d: %s\n", errnum, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _error_handler(int sig)
|
||||||
|
{
|
||||||
|
const char* stack = tf_util_backtrace_string();
|
||||||
|
tf_printf("ERROR:\n%s\n", stack);
|
||||||
|
tf_free((void*)stack);
|
||||||
|
_exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
bool tracking = false;
|
bool tracking = false;
|
||||||
@ -624,6 +632,15 @@ int main(int argc, char* argv[])
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool use_error_handler = false;
|
||||||
|
#if defined(__ANDROID__)
|
||||||
|
use_error_handler = true;
|
||||||
|
#endif
|
||||||
|
if (use_error_handler && signal(SIGSEGV, _error_handler) == SIG_ERR)
|
||||||
|
{
|
||||||
|
perror("signal");
|
||||||
|
}
|
||||||
|
|
||||||
int result = 0;
|
int result = 0;
|
||||||
if (argc >= 2)
|
if (argc >= 2)
|
||||||
{
|
{
|
||||||
|
@ -762,7 +762,7 @@ void tf_ssb_connection_rpc_send_error(tf_ssb_connection_t* connection, uint8_t f
|
|||||||
JSValue message = JS_NewObject(context);
|
JSValue message = JS_NewObject(context);
|
||||||
const char* stack = tf_util_backtrace_string();
|
const char* stack = tf_util_backtrace_string();
|
||||||
JS_SetPropertyStr(context, message, "name", JS_NewString(context, "Error"));
|
JS_SetPropertyStr(context, message, "name", JS_NewString(context, "Error"));
|
||||||
JS_SetPropertyStr(context, message, "stack", JS_NewString(context, stack));
|
JS_SetPropertyStr(context, message, "stack", JS_NewString(context, stack ? stack : "stack unavailable"));
|
||||||
JS_SetPropertyStr(context, message, "message", JS_NewString(context, error));
|
JS_SetPropertyStr(context, message, "message", JS_NewString(context, error));
|
||||||
tf_ssb_connection_rpc_send_json(connection, ((flags & k_ssb_rpc_flag_stream) ? (k_ssb_rpc_flag_stream | k_ssb_rpc_flag_end_error) : 0), request_number, message, NULL, NULL, NULL);
|
tf_ssb_connection_rpc_send_json(connection, ((flags & k_ssb_rpc_flag_stream) ? (k_ssb_rpc_flag_stream | k_ssb_rpc_flag_end_error) : 0), request_number, message, NULL, NULL, NULL);
|
||||||
JS_FreeValue(context, message);
|
JS_FreeValue(context, message);
|
||||||
|
Loading…
Reference in New Issue
Block a user