Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(224)

Side by Side Diff: fusl/src/internal/i386/syscall.s

Issue 1573973002: Add a "fork" of musl as //fusl. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « fusl/src/internal/futex.h ('k') | fusl/src/internal/intscan.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 .hidden __sysinfo
2
3 # The calling convention for __vsyscall has the syscall number
4 # and 5 args arriving as: eax, edx, ecx, edi, esi, 4(%esp).
5 # This ensures that the inline asm in the C code never has to touch
6 # ebx or ebp (which are unavailable in PIC and frame-pointer-using
7 # code, respectively), and optimizes for size/simplicity in the caller.
8
9 .global __vsyscall
10 .hidden __vsyscall
11 .type __vsyscall,@function
12 __vsyscall:
13 push %edi
14 push %ebx
15 mov %edx,%ebx
16 mov %edi,%edx
17 mov 12(%esp),%edi
18 push %eax
19 call 1f
20 2: mov %ebx,%edx
21 pop %ebx
22 pop %ebx
23 pop %edi
24 ret
25
26 1: mov (%esp),%eax
27 add $[__sysinfo-2b],%eax
28 mov (%eax),%eax
29 test %eax,%eax
30 jz 1f
31 push %eax
32 mov 8(%esp),%eax
33 ret # tail call to kernel vsyscall entry
34 1: mov 4(%esp),%eax
35 int $128
36 ret
37
38 # The __vsyscall6 entry point is used only for 6-argument syscalls.
39 # Instead of passing the 5th argument on the stack, a pointer to the
40 # 5th and 6th arguments is passed. This is ugly, but there are no
41 # register constraints the inline asm could use that would make it
42 # possible to pass two arguments on the stack.
43
44 .global __vsyscall6
45 .hidden __vsyscall6
46 .type __vsyscall6,@function
47 __vsyscall6:
48 push %ebp
49 push %eax
50 mov 12(%esp), %ebp
51 mov (%ebp), %eax
52 mov 4(%ebp), %ebp
53 push %eax
54 mov 4(%esp),%eax
55 call __vsyscall
56 pop %ebp
57 pop %ebp
58 pop %ebp
59 ret
60
61 .global __syscall
62 .hidden __syscall
63 .type __syscall,@function
64 __syscall:
65 lea 24(%esp),%eax
66 push %esi
67 push %edi
68 push %eax
69 mov 16(%esp),%eax
70 mov 20(%esp),%edx
71 mov 24(%esp),%ecx
72 mov 28(%esp),%edi
73 mov 32(%esp),%esi
74 call __vsyscall6
75 pop %edi
76 pop %edi
77 pop %esi
78 ret
OLDNEW
« no previous file with comments | « fusl/src/internal/futex.h ('k') | fusl/src/internal/intscan.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698