summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Abeles <phil99boyd@gmail.com>2021-05-14 07:57:19 -0700
committerDamien George <damien@micropython.org>2021-05-18 11:46:30 +1000
commit126b1c727118352923703719a2a3d45b9fad3c97 (patch)
tree201414c27727e957f629205f881519cc6b403bde
parent6d2680fa36696fd0b2fd7a595f4a26153cd84e07 (diff)
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.
-rw-r--r--py/nlraarch64.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/py/nlraarch64.c b/py/nlraarch64.c
index 2df0dc9c8..1295351cb 100644
--- a/py/nlraarch64.c
+++ b/py/nlraarch64.c
@@ -34,8 +34,13 @@
// 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.
__asm(
+ #if defined(__APPLE__) && defined(__MACH__)
+ "_nlr_push: \n"
+ ".global _nlr_push \n"
+ #else
"nlr_push: \n"
".global nlr_push \n"
+ #endif
"mov x9, sp \n"
"stp lr, x9, [x0, #16]\n" // 16 == offsetof(nlr_buf_t, regs)
"stp x19, x20, [x0, #32]\n"
@@ -44,7 +49,11 @@ __asm(
"stp x25, x26, [x0, #80]\n"
"stp x27, x28, [x0, #96]\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
+ #endif
);
NORETURN void nlr_jump(void *val) {