Revision 592cacc7bd29e40eaa8a47f0db60605ec8fda5f9 authored by DilumAluthgeBot on 11 October 2021, 05:46:58 UTC, committed by GitHub on 11 October 2021, 05:46:58 UTC
Co-authored-by: Dilum Aluthge <dilum@aluthge.com>
1 parent bc89d83
common.h
// This file is a part of Julia. License is MIT: https://julialang.org/license
#include "../../src/support/platform.h"
// Preprocessor annoyances
#define CONCAT_(x,y) x##y
#define CONCAT(x,y) CONCAT_(x, y)
#define CNAMEADDR(name) CONCAT(CNAME(name),_addr)
#define STR_(x) #x
#define STR(x) STR_(x)
#define I(x) x
// On macOS and 32-bit windows, we need to prepend underscores on symbols to match the C ABI
#if defined(__APPLE__) || (defined(_WIN32) && !defined(_WIN64))
#define UNDERSCORE(x) _##x
#else
#define UNDERSCORE(x) x
#endif
// Windows requires some help with the linker when it comes to debuginfo/exporting
#if defined(_WIN32) || defined(_WIN64)
#define DEBUGINFO(name) .def name; \
.scl 2; \
.type 32; \
.endef
#define EXPORT(name) .section .drectve,"r"; \
.ascii STR(-export:##I(name)); \
.ascii " "; \
.section .text
#elif defined(__ELF__)
#define DEBUGINFO(name) .type CNAME(name),@function
#define EXPORT(name) .size CNAME(name), . - CNAME(name)
#else
#define DEBUGINFO(name)
#define EXPORT(name)
#endif
// Windows 64-bit uses SEH
#if defined(_WIN64)
#define SEH_START1(name) .seh_proc CNAME(name)
#define SEH_START2() .seh_endprologue
#define SEH_END() .seh_endproc
#else
#define SEH_START1(name)
#define SEH_START2()
#define SEH_END()
#endif
// If we're compiling with control-flow branch protection, mark the trampoline entry
// points with `endbr{32,64}`, as appropriate on this arch
#if defined(__CET__) && __CET__ & 1 != 0
#if defined(__x86_64__)
#define CET_START() endbr64
#else
#define CET_START() endbr32
#endif
#else
#define CET_START()
#endif
// aarch64 on mac requires some special assembler syntax for both calculating memory
// offsets and even just the assembler statement separator token
#if defined(__aarch64__)
#if defined(__APPLE__)
#define PAGE(x) x##@PAGE
#define PAGEOFF(x) x##@PAGEOFF
#define SEP %%
#else
#define PAGE(x) x
#define PAGEOFF(x) :lo12:##x
#define SEP ;
#endif
#endif
// If someday we need to mangle everything, we do so by defining this `CNAME()`
// to do something more complex than just `UNDERSCORE(x)`.
#define CNAME(x) UNDERSCORE(x)
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...