Skip to content

Commit

Permalink
Fix crash
Browse files Browse the repository at this point in the history
  • Loading branch information
RusJJ committed Aug 22, 2023
1 parent 4c3d913 commit 274b903
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 11 deletions.
2 changes: 1 addition & 1 deletion AML_PrecompiledLibs
2 changes: 1 addition & 1 deletion ARMPatch
2 changes: 1 addition & 1 deletion curl
Submodule curl updated 2 files
+6 −3 .cirrus.yml
+39 −4 RELEASE-NOTES
22 changes: 15 additions & 7 deletions signal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

std::ofstream g_pLogFile;

struct sigaction newSigaction[7];
struct sigaction oldSigaction[7];

int SignalInnerId(int code)
Expand Down Expand Up @@ -168,24 +169,34 @@ void Handler(int sig, siginfo_t *si, void *ptr)
#endif
uintptr_t faultAddr = mcontext.fault_address; // == si->si_addr?

aml->ShowToast(true, "Application has been crashed!");
logger->Info("Exception Signal %d - %s (%s)", sig, SignalEnum(sig), CodeEnum(sig, si->si_code));
// Java doesnt work here and so crashing again and again?
//aml->ShowToast(true, "Application has been crashed!");
logger->Error("Exception Signal %d - %s (%s)", sig, SignalEnum(sig), CodeEnum(sig, si->si_code));

Dl_info dlInfo;
if(dladdr((void*)PC, &dlInfo) != 0)
{
// Success
if(dlInfo.dli_fname)
{
logger->Error("Library: %s + 0x%08X", dlInfo.dli_fname, PC - (uintptr_t)dlInfo.dli_fbase);
}
else
{

}
}
else
{
// Unsuccess

}
oldSigaction[SignalInnerId(sig)].sa_sigaction(sig, si, ptr);
exit(0);
}

#define HANDLESIG(_code) sigaction(_code, &sigbreak, oldSigaction + SignalInnerId(_code))
#define HANDLESIG(_code) sigbreak = newSigaction + SignalInnerId(_code); sigbreak->sa_sigaction = &Handler; \
sigbreak->sa_flags = SA_SIGINFO | SA_ONSTACK | SA_RESETHAND; sigemptyset(&sigbreak->sa_mask); sigaction(_code, sigbreak, oldSigaction + SignalInnerId(_code))
void StartSignalHandler()
{
static char stack[SIGSTKSZ];
Expand All @@ -195,10 +206,7 @@ void StartSignalHandler()
ss.ss_flags = 0;
sigaltstack(&ss, NULL);

struct sigaction sigbreak;
sigbreak.sa_sigaction = &Handler;
sigbreak.sa_flags = SA_SIGINFO | SA_ONSTACK | SA_RESETHAND;
sigemptyset(&sigbreak.sa_mask);
struct sigaction* sigbreak = NULL;

HANDLESIG(SIGABRT);
HANDLESIG(SIGBUS);
Expand Down
2 changes: 1 addition & 1 deletion wolfssl

0 comments on commit 274b903

Please sign in to comment.