diff options
| author | Bob Abeles <phil99boyd@gmail.com> | 2021-05-14 07:57:19 -0700 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2021-05-18 11:46:30 +1000 |
| commit | 126b1c727118352923703719a2a3d45b9fad3c97 (patch) | |
| tree | 201414c27727e957f629205f881519cc6b403bde | |
| parent | 6d2680fa36696fd0b2fd7a595f4a26153cd84e07 (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.c | 9 |
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) { |
