mirror of
https://github.com/XTXMarkets/ternfs.git
synced 2026-01-10 21:10:26 -06:00
It is currently very fragile, due to:
* Differing versions of compilers/DWARF version result in a variety
of breakages in the our code which analyzes the DWARF info;
* With musl, libunwind seems to be currently unable to traverse
beyond signal handlers, due to the DWARF information not
being present in the signal frame.
See <https://maskray.me/blog/2022-04-10-unwinding-through-signal-handler>.
Note that I have not verified that the problem in the blog
post above is indeed what we're hitting, but it seems plausible.
45 lines
1.6 KiB
C++
45 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include <iostream>
|
|
|
|
///////////////////////////////////
|
|
// Static init for globals
|
|
///////////////////////////////////
|
|
|
|
// Safer alternative to throwing when in static initialization or signal handler
|
|
void dieWithError(const char *err);
|
|
|
|
////////////////////////////////////////////
|
|
// Compiler hints
|
|
////////////////////////////////////////////
|
|
|
|
// BUG NOTICE: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47466
|
|
// --> this kicks in for statements such as unlikely( a && b );
|
|
// --> see assembler generated for t_compiler.cpp
|
|
// --> the unlikely case is favoured by the compiler
|
|
|
|
#define likely(x) __builtin_expect(!!(x), 1)
|
|
#define unlikely(x) __builtin_expect(!!(x), 0)
|
|
|
|
#define PACKED __attribute__((packed))
|
|
#define ALIGNED(n) __attribute__((aligned(n)))
|
|
#define ALWAYS_INLINE __attribute__((always_inline))
|
|
#define NO_INLINE __attribute__((noinline))
|
|
#define FORMAT(n) __attribute__((format(printf,n+1,n+2)))
|
|
#define NORETURN __attribute__((noreturn))
|
|
#define CONST __attribute__((const))
|
|
#define PURE __attribute__((pure))
|
|
#define HOT __attribute__((hot))
|
|
#define COLD __attribute__((cold))
|
|
#define UNUSED __attribute__((unused))
|
|
#define DEPRECATED __attribute__((deprecated))
|
|
#define CHECK_RETURN __attribute__((warn_unused_result))
|
|
|
|
///////////////////////////////////
|
|
// Debugging features
|
|
///////////////////////////////////
|
|
|
|
#define SHORT_FILE (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
|
|
|
|
std::ostream& operator<<(std::ostream& out, struct sockaddr_in& addr);
|