mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-01-31 03:27:39 +00:00
Fix --ftrace on Windows
This commit is contained in:
parent
b02d13ccde
commit
9e6faa5256
3 changed files with 78 additions and 4 deletions
|
@ -26,11 +26,11 @@
|
|||
#include "libc/elf/def.h"
|
||||
#include "libc/elf/tinyelf.internal.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/serialize.h"
|
||||
#include "libc/intrin/directmap.internal.h"
|
||||
#include "libc/nt/memory.h"
|
||||
#include "libc/nt/runtime.h"
|
||||
#include "libc/runtime/runtime.h"
|
||||
#include "libc/serialize.h"
|
||||
#include "libc/str/str.h"
|
||||
#include "libc/sysv/consts/map.h"
|
||||
#include "libc/sysv/consts/o.h"
|
||||
|
@ -80,8 +80,9 @@ static bool IsMyDebugBinary(const char *path) {
|
|||
// contains the same number of bytes of code as our .com executable
|
||||
// which is currently running in memory.
|
||||
if ((size = lseek(fd, 0, SEEK_END)) != -1 &&
|
||||
(dm = sys_mmap(0, size, PROT_READ, MAP_SHARED, fd, 0)).addr !=
|
||||
MAP_FAILED) {
|
||||
(dm = sys_mmap((void *)0x12345000000, size, PROT_READ, MAP_SHARED, fd,
|
||||
0))
|
||||
.addr != MAP_FAILED) {
|
||||
if (READ32LE((char *)dm.addr) == READ32LE("\177ELF") &&
|
||||
((Elf64_Ehdr *)dm.addr)->e_machine == GetElfMachine() &&
|
||||
GetElfSymbolValue(dm.addr, "_etext", &value)) {
|
||||
|
|
74
test/posix/sa_resethand2_test.c
Normal file
74
test/posix/sa_resethand2_test.c
Normal file
|
@ -0,0 +1,74 @@
|
|||
/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
|
||||
│ vi: set et ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi │
|
||||
╞══════════════════════════════════════════════════════════════════════════════╡
|
||||
│ Copyright 2023 Justine Alexandra Roberts Tunney │
|
||||
│ │
|
||||
│ Permission to use, copy, modify, and/or distribute this software for │
|
||||
│ any purpose with or without fee is hereby granted, provided that the │
|
||||
│ above copyright notice and this permission notice appear in all copies. │
|
||||
│ │
|
||||
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
|
||||
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
|
||||
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
|
||||
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
|
||||
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
|
||||
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
|
||||
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
|
||||
│ PERFORMANCE OF THIS SOFTWARE. │
|
||||
╚─────────────────────────────────────────────────────────────────────────────*/
|
||||
#include "libc/calls/calls.h"
|
||||
#include "libc/calls/struct/sigaction.h"
|
||||
#include "libc/calls/struct/sigset.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/sysv/consts/sa.h"
|
||||
#include "libc/sysv/consts/sig.h"
|
||||
|
||||
volatile int handler_invoked;
|
||||
|
||||
void signal_handler(int signum) {
|
||||
handler_invoked = 1;
|
||||
}
|
||||
|
||||
int main() {
|
||||
sigset_t mask, oldmask;
|
||||
struct sigaction sa, current_sa;
|
||||
|
||||
if (IsWindows()) {
|
||||
// TODO(jart): support non-fatal signals between processes
|
||||
return 0;
|
||||
}
|
||||
|
||||
sa.sa_handler = signal_handler;
|
||||
sa.sa_flags = SA_RESETHAND;
|
||||
sigemptyset(&sa.sa_mask);
|
||||
|
||||
if (sigaction(SIGINT, &sa, 0) == -1) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
sigemptyset(&mask);
|
||||
sigaddset(&mask, SIGINT);
|
||||
if (sigprocmask(SIG_BLOCK, &mask, &oldmask) == -1) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
int pid = fork();
|
||||
if (pid == -1) {
|
||||
return 3;
|
||||
} else if (pid == 0) {
|
||||
kill(getppid(), SIGINT);
|
||||
return 0;
|
||||
} else {
|
||||
sigsuspend(&oldmask);
|
||||
if (!handler_invoked) {
|
||||
return 4;
|
||||
}
|
||||
if (sigaction(SIGINT, 0, ¤t_sa) == -1) {
|
||||
return 5;
|
||||
}
|
||||
if (current_sa.sa_handler != SIG_DFL) {
|
||||
return 6;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
1
third_party/readline/signals.c
vendored
1
third_party/readline/signals.c
vendored
|
@ -59,7 +59,6 @@ typedef struct sigaction sighandler_cxt;
|
|||
# define rl_sigaction(s, nh, oh) sigaction(s, nh, oh)
|
||||
#else
|
||||
typedef struct { SigHandler *sa_handler; int sa_mask, sa_flags; } sighandler_cxt;
|
||||
# define sigemptyset(m)
|
||||
#endif /* !HAVE_POSIX_SIGNALS */
|
||||
|
||||
#ifndef SA_RESTART
|
||||
|
|
Loading…
Reference in a new issue