diff options
author | Rich Felker <dalias@aerifal.cx> | 2011-03-25 22:13:57 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2011-03-25 22:13:57 -0400 |
commit | ea343364a719add2cd8adf8a50c15bb5f9400dd8 (patch) | |
tree | 36056bd0bd1c4c49118b6b3366db6432f7c80fc1 /src/thread/i386 | |
parent | 92b52b70e8c0786c95cb73a691e1f6e89a73be46 (diff) | |
download | musl-ea343364a719add2cd8adf8a50c15bb5f9400dd8.tar.gz musl-ea343364a719add2cd8adf8a50c15bb5f9400dd8.tar.bz2 musl-ea343364a719add2cd8adf8a50c15bb5f9400dd8.tar.xz musl-ea343364a719add2cd8adf8a50c15bb5f9400dd8.zip |
match glibc/lsb cancellation abi on i386
glibc made the ridiculous choice to use pass-by-register calling
convention for these functions, which is impossible to duplicate
directly on non-gcc compilers. instead, we use ugly asm to wrap and
convert the calling convention. presumably this works with every
compiler anyone could potentially want to use.
Diffstat (limited to 'src/thread/i386')
-rw-r--r-- | src/thread/i386/cancellation2.s | 16 | ||||
-rw-r--r-- | src/thread/i386/cancellation3.s | 8 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/thread/i386/cancellation2.s b/src/thread/i386/cancellation2.s new file mode 100644 index 00000000..859aa239 --- /dev/null +++ b/src/thread/i386/cancellation2.s @@ -0,0 +1,16 @@ +.text +.global __pthread_register_cancel +.type __pthread_register_cancel,%function +__pthread_register_cancel: + pushl %eax + call __pthread_register_cancel_3 + popl %eax + ret + +.global __pthread_unregister_cancel +.type __pthread_unregister_cancel,%function +__pthread_unregister_cancel: + pushl %eax + call __pthread_unregister_cancel_3 + popl %eax + ret diff --git a/src/thread/i386/cancellation3.s b/src/thread/i386/cancellation3.s new file mode 100644 index 00000000..210293e2 --- /dev/null +++ b/src/thread/i386/cancellation3.s @@ -0,0 +1,8 @@ +.text +.global __pthread_unwind_next +.type __pthread_unwind_next,%function +__pthread_unwind_next: + pushl %eax + call __pthread_unwind_next_3 + popl %eax + ret |