py/nlraarch64: Add underscore prefix to function symbols for Darwin ABI.
The proper way to do this is to test for __APPLE__ and __MACH__, where __APPLE__ tests for an Apple OS and __MACH__ tests that it is based on CMU Mach. Using both tests ensures that just Darwin (Apple's open source base for MacOS, iOS, etc.) is recognized. __APPLE__ by itself will test for any Apple OS, which can include older OS 7-9 and any future Apple OS. __MACH__ tests for any OS based on CMU Mach, including Darwin and GNU Hurd. Fixes #7232.
This commit is contained in:
parent
6d2680fa36
commit
126b1c7271
@ -34,8 +34,13 @@
|
|||||||
// Implemented purely as inline assembly; inside a function, we have to deal with undoing the prologue, restoring
|
// Implemented purely as inline assembly; inside a function, we have to deal with undoing the prologue, restoring
|
||||||
// SP and LR. This way, we don't.
|
// SP and LR. This way, we don't.
|
||||||
__asm(
|
__asm(
|
||||||
|
#if defined(__APPLE__) && defined(__MACH__)
|
||||||
|
"_nlr_push: \n"
|
||||||
|
".global _nlr_push \n"
|
||||||
|
#else
|
||||||
"nlr_push: \n"
|
"nlr_push: \n"
|
||||||
".global nlr_push \n"
|
".global nlr_push \n"
|
||||||
|
#endif
|
||||||
"mov x9, sp \n"
|
"mov x9, sp \n"
|
||||||
"stp lr, x9, [x0, #16]\n" // 16 == offsetof(nlr_buf_t, regs)
|
"stp lr, x9, [x0, #16]\n" // 16 == offsetof(nlr_buf_t, regs)
|
||||||
"stp x19, x20, [x0, #32]\n"
|
"stp x19, x20, [x0, #32]\n"
|
||||||
@ -44,7 +49,11 @@ __asm(
|
|||||||
"stp x25, x26, [x0, #80]\n"
|
"stp x25, x26, [x0, #80]\n"
|
||||||
"stp x27, x28, [x0, #96]\n"
|
"stp x27, x28, [x0, #96]\n"
|
||||||
"str x29, [x0, #112]\n"
|
"str x29, [x0, #112]\n"
|
||||||
|
#if defined(__APPLE__) && defined(__MACH__)
|
||||||
|
"b _nlr_push_tail \n" // do the rest in C
|
||||||
|
#else
|
||||||
"b nlr_push_tail \n" // do the rest in C
|
"b nlr_push_tail \n" // do the rest in C
|
||||||
|
#endif
|
||||||
);
|
);
|
||||||
|
|
||||||
NORETURN void nlr_jump(void *val) {
|
NORETURN void nlr_jump(void *val) {
|
||||||
|
Loading…
Reference in New Issue
Block a user