mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-07 23:13:34 +00:00
We had previously not enabled TLS in MODE=tiny in order to keep the smallest example programs (e.g. life.com) just 16kb in size. But it was error prone doing that, so now we just always enable it because this change uses hacks to ensure it won't increase life.com's size. This change also fixes a bug on NetBSD, where signal handlers would break thread local storage if SA_SIGINFO was being used. This looks like it might be a bug in NetBSD, but it's got a simple workaround.
59 lines
1.7 KiB
C
59 lines
1.7 KiB
C
#ifndef COSMOPOLITAN_LIBC_CALLS_STRACE_INTERNAL_H_
|
|
#define COSMOPOLITAN_LIBC_CALLS_STRACE_INTERNAL_H_
|
|
#include "libc/bits/likely.h"
|
|
#include "libc/calls/struct/iovec.h"
|
|
#include "libc/calls/struct/rlimit.h"
|
|
#include "libc/calls/struct/sigaction.h"
|
|
#include "libc/calls/struct/stat.h"
|
|
#include "libc/runtime/runtime.h"
|
|
|
|
#define _KERNTRACE 1 /* not configurable w/ flag yet */
|
|
#define _POLLTRACE 0 /* not configurable w/ flag yet */
|
|
#define _DATATRACE 1 /* not configurable w/ flag yet */
|
|
#define _NTTRACE 0 /* not configurable w/ flag yet */
|
|
|
|
#define STRACE_PROLOGUE "%rSYS %6P %'18T "
|
|
|
|
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
|
COSMOPOLITAN_C_START_
|
|
|
|
#ifdef SYSDEBUG
|
|
#define STRACE(FMT, ...) \
|
|
do { \
|
|
if (UNLIKELY(__strace > 0)) { \
|
|
__stracef(STRACE_PROLOGUE FMT "\n", ##__VA_ARGS__); \
|
|
} \
|
|
} while (0)
|
|
#else
|
|
#define STRACE(FMT, ...) (void)0
|
|
#endif
|
|
|
|
#if defined(SYSDEBUG) && _DATATRACE
|
|
#define DATATRACE(FMT, ...) STRACE(FMT, ##__VA_ARGS__)
|
|
#else
|
|
#define DATATRACE(FMT, ...) (void)0
|
|
#endif
|
|
|
|
#if defined(SYSDEBUG) && _POLLTRACE
|
|
#define POLLTRACE(FMT, ...) STRACE(FMT, ##__VA_ARGS__)
|
|
#else
|
|
#define POLLTRACE(FMT, ...) (void)0
|
|
#endif
|
|
|
|
#if defined(SYSDEBUG) && _KERNTRACE
|
|
#define KERNTRACE(FMT, ...) STRACE(FMT, ##__VA_ARGS__)
|
|
#else
|
|
#define KERNTRACE(FMT, ...) (void)0
|
|
#endif
|
|
|
|
#if defined(SYSDEBUG) && _NTTRACE
|
|
#define NTTRACE(FMT, ...) STRACE(FMT, ##__VA_ARGS__)
|
|
#else
|
|
#define NTTRACE(FMT, ...) (void)0
|
|
#endif
|
|
|
|
void __stracef(const char *, ...);
|
|
|
|
COSMOPOLITAN_C_END_
|
|
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
|
#endif /* COSMOPOLITAN_LIBC_CALLS_STRACE_INTERNAL_H_ */
|