Files
borysp c24bddd5aa [LibOS] Rework signal handling and syscall emulation
Change log (most important only):
- unify CPU context structures - now we have only one version -
  `PAL_CONTEXT` - which is shared between LibOS and PALs and it should
  depend only on the host architecture (not OS),
- syscalls emulation changed:
  - dedicated LibOS stack is now used for syscalls emulation,
  - removed one indirection level in syscalls table - now it stores
    `shim_do_*` functions directly,
- signal handling - completely rewritten:
  - all signal queues use proper locking schemes now,
  - signals are handled *only* when returning to the user app from LibOS
    or PAL,
  - nested signals are now possible,
  - the app is allowed to jump out of signal handler with the same
    sematics as on normal Linux,
  - signal altstack is now fully supported,
  - syscall restarting is now supported,
  - doing a backtrace from the signal handler works properly,
- disallow injecting host-level signals, with one exception, see
  `sys.enable_sigterm_injection` manifest option for more details.
2021-02-05 14:11:21 +01:00

32 lines
690 B
C

#include <stdbool.h>
#include "pal.h"
#include "pal_debug.h"
#include "pal_error.h"
int handled = 0;
static void FailureHandler(bool is_in_pal, PAL_NUM arg, PAL_CONTEXT* context) {
__UNUSED(is_in_pal);
pal_printf("Failure notified: %s\n", pal_strerror((unsigned long)arg));
handled = 1;
}
int main(int argc, char** argv, char** envp) {
pal_printf("Enter Main Thread\n");
DkSetExceptionHandler(FailureHandler, PAL_EVENT_FAILURE);
PAL_HANDLE out = DkStreamOpen("foo:unknown", PAL_ACCESS_WRONLY, 0, 0, 0);
if (!out && !handled) {
pal_printf("DkStreamOpen failed\n");
return -1;
}
pal_printf("Leave Main Thread\n");
return 0;
}