]> git.proxmox.com Git - mirror_edk2.git/blob - EmulatorPkg/Unix/Host/X64/Gasket.S
EmulatorPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / EmulatorPkg / Unix / Host / X64 / Gasket.S
1 #------------------------------------------------------------------------------
2 #
3 # Manage differenced between UNIX ABI and EFI/Windows ABI
4 #
5 # EFI Arg passing: RCX, RDX, R8, R9
6 # Callee allocates 32 bytes on stack to spill registers
7 # UNIX Arg passing: RDI, RSI, RDX, RCX, R8, R9
8 # RSI, RDI calle-save on EFI, scatch on UNIX callign
9 #
10 # Copyright (c) 2008 - 2011, Apple Inc. All rights reserved.<BR>
11 # SPDX-License-Identifier: BSD-2-Clause-Patent
12 #
13 #------------------------------------------------------------------------------
14
15 //
16 // Gaskets are EFI ABI to UNIX ABI calls
17 // EFI ABI code will sub 40 (0x28) from %rsp before calling a function
18 // This is the 32 (0x20) byte to spill registers and 8 bytes to align stack on 16 byte boundry.
19 //
20 .text
21
22 // 32 byte shadow to spill rcx-r9, 8 bytes to align stack on 16 byte boundry
23 // Any call with 0 - 4 arguments allocates 40 bytes on the stack.
24 // For more than 4 args you always have to increase in quanta of 16 so 5 or 6 args is 56,
25 // 7 or 8 args is 72, and 9 or 10 args is 88
26
27
28
29 .text
30
31 //
32 // EMU_THUNK_PROTOCOL gaskets (EFIAPI to UNIX ABI)
33 //
34
35
36
37
38 ASM_GLOBAL ASM_PFX(GasketSecWriteStdErr)
39 ASM_PFX(GasketSecWriteStdErr):
40 pushq %rbp // stack frame is for the debugger
41 movq %rsp, %rbp
42
43 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
44 pushq %rdi
45
46 movq %rcx, %rdi // Swizzle args
47 movq %rdx, %rsi
48
49 call ASM_PFX(SecWriteStdErr)
50
51 popq %rdi // restore state
52 popq %rsi
53 popq %rbp
54 ret
55
56
57 ASM_GLOBAL ASM_PFX(GasketSecConfigStdIn)
58 ASM_PFX(GasketSecConfigStdIn):
59 pushq %rbp // stack frame is for the debugger
60 movq %rsp, %rbp
61
62 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
63 pushq %rdi
64
65 call ASM_PFX(SecConfigStdIn)
66
67 popq %rdi // restore state
68 popq %rsi
69 popq %rbp
70 ret
71
72 ASM_GLOBAL ASM_PFX(GasketSecWriteStdOut)
73 ASM_PFX(GasketSecWriteStdOut):
74 pushq %rbp // stack frame is for the debugger
75 movq %rsp, %rbp
76
77 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
78 pushq %rdi
79
80 movq %rcx, %rdi // Swizzle args
81 movq %rdx, %rsi
82
83 call ASM_PFX(SecWriteStdOut)
84
85 popq %rdi // restore state
86 popq %rsi
87 popq %rbp
88 ret
89
90 ASM_GLOBAL ASM_PFX(GasketSecReadStdIn)
91 ASM_PFX(GasketSecReadStdIn):
92 pushq %rbp // stack frame is for the debugger
93 movq %rsp, %rbp
94
95 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
96 pushq %rdi
97
98 movq %rcx, %rdi // Swizzle args
99 movq %rdx, %rsi
100
101 call ASM_PFX(SecReadStdIn)
102
103 popq %rdi // restore state
104 popq %rsi
105 popq %rbp
106 ret
107
108 ASM_GLOBAL ASM_PFX(GasketSecPollStdIn)
109 ASM_PFX(GasketSecPollStdIn):
110 pushq %rbp // stack frame is for the debugger
111 movq %rsp, %rbp
112
113 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
114 pushq %rdi
115
116 call ASM_PFX(SecPollStdIn)
117
118 popq %rdi // restore state
119 popq %rsi
120 popq %rbp
121 ret
122
123 ASM_GLOBAL ASM_PFX(GasketSecMalloc)
124 ASM_PFX(GasketSecMalloc):
125 pushq %rbp // stack frame is for the debugger
126 movq %rsp, %rbp
127
128 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
129 pushq %rdi
130
131 movq %rcx, %rdi // Swizzle args
132
133 call ASM_PFX(SecMalloc)
134
135 popq %rdi // restore state
136 popq %rsi
137 popq %rbp
138 ret
139
140 ASM_GLOBAL ASM_PFX(GasketSecValloc)
141 ASM_PFX(GasketSecValloc):
142 pushq %rbp // stack frame is for the debugger
143 movq %rsp, %rbp
144
145 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
146 pushq %rdi
147
148 movq %rcx, %rdi // Swizzle args
149
150 call ASM_PFX(SecValloc)
151
152 popq %rdi // restore state
153 popq %rsi
154 popq %rbp
155 ret
156
157 ASM_GLOBAL ASM_PFX(GasketSecFree)
158 ASM_PFX(GasketSecFree):
159 pushq %rbp // stack frame is for the debugger
160 movq %rsp, %rbp
161
162 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
163 pushq %rdi
164
165 movq %rcx, %rdi // Swizzle args
166
167 call ASM_PFX(SecFree)
168
169 popq %rdi // restore state
170 popq %rsi
171 popq %rbp
172 ret
173
174
175 ASM_GLOBAL ASM_PFX(GasketSecSetTimer)
176 ASM_PFX(GasketSecSetTimer):
177 pushq %rbp // stack frame is for the debugger
178 movq %rsp, %rbp
179
180 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
181 pushq %rdi
182
183 movq %rcx, %rdi // Swizzle args
184 movq %rdx, %rsi
185
186 call ASM_PFX(SecSetTimer)
187
188 popq %rdi // restore state
189 popq %rsi
190 popq %rbp
191 ret
192
193
194 ASM_GLOBAL ASM_PFX(GasketSecEnableInterrupt)
195 ASM_PFX(GasketSecEnableInterrupt):
196 pushq %rbp // stack frame is for the debugger
197 movq %rsp, %rbp
198
199 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
200 pushq %rdi
201
202 call ASM_PFX(SecEnableInterrupt)
203
204 popq %rdi // restore state
205 popq %rsi
206 popq %rbp
207 ret
208
209
210 ASM_GLOBAL ASM_PFX(GasketSecDisableInterrupt)
211 ASM_PFX(GasketSecDisableInterrupt):
212 pushq %rbp // stack frame is for the debugger
213 movq %rsp, %rbp
214
215 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
216 pushq %rdi
217
218 call ASM_PFX(SecDisableInterrupt)
219
220 popq %rdi // restore state
221 popq %rsi
222 popq %rbp
223 ret
224
225 ASM_GLOBAL ASM_PFX(GasketQueryPerformanceFrequency)
226 ASM_PFX(GasketQueryPerformanceFrequency):
227 pushq %rbp // stack frame is for the debugger
228 movq %rsp, %rbp
229
230 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
231 pushq %rdi
232
233 call ASM_PFX(QueryPerformanceFrequency)
234
235 popq %rdi // restore state
236 popq %rsi
237 popq %rbp
238 ret
239
240
241 ASM_GLOBAL ASM_PFX(GasketQueryPerformanceCounter)
242 ASM_PFX(GasketQueryPerformanceCounter):
243 pushq %rbp // stack frame is for the debugger
244 movq %rsp, %rbp
245
246 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
247 pushq %rdi
248
249 call ASM_PFX(QueryPerformanceCounter)
250
251 popq %rdi // restore state
252 popq %rsi
253 popq %rbp
254 ret
255
256
257 ASM_GLOBAL ASM_PFX(GasketSecSleep)
258 ASM_PFX(GasketSecSleep):
259 pushq %rbp // stack frame is for the debugger
260 movq %rsp, %rbp
261
262 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
263 pushq %rdi
264
265 movq %rcx, %rdi // Swizzle args
266
267 call ASM_PFX(SecSleep)
268
269 popq %rdi // restore state
270 popq %rsi
271 popq %rbp
272 ret
273
274
275 ASM_GLOBAL ASM_PFX(GasketSecCpuSleep)
276 ASM_PFX(GasketSecCpuSleep):
277 pushq %rbp // stack frame is for the debugger
278 movq %rsp, %rbp
279
280 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
281 pushq %rdi
282
283 call ASM_PFX(SecCpuSleep)
284
285 popq %rdi // restore state
286 popq %rsi
287 popq %rbp
288 ret
289
290
291 ASM_GLOBAL ASM_PFX(GasketSecExit)
292 ASM_PFX(GasketSecExit):
293 pushq %rbp // stack frame is for the debugger
294 movq %rsp, %rbp
295
296 movq %rcx, %rdi // Swizzle args
297 call ASM_PFX(SecExit) // Less to do as we will never return to EFI ABI world
298 LDEAD_LOOP:
299 jmp LDEAD_LOOP // _exit should never return
300
301
302 ASM_GLOBAL ASM_PFX(GasketSecGetTime)
303 ASM_PFX(GasketSecGetTime):
304 pushq %rbp // stack frame is for the debugger
305 movq %rsp, %rbp
306
307 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
308 pushq %rdi
309
310 movq %rcx, %rdi // Swizzle args
311 movq %rdx, %rsi
312
313 call ASM_PFX(SecGetTime)
314
315 popq %rdi // restore state
316 popq %rsi
317 popq %rbp
318 ret
319
320 ASM_GLOBAL ASM_PFX(GasketSecSetTime)
321 ASM_PFX(GasketSecSetTime):
322 pushq %rbp // stack frame is for the debugger
323 movq %rsp, %rbp
324
325 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
326 pushq %rdi
327
328 movq %rcx, %rdi // Swizzle args
329 movq %rdx, %rsi
330
331 call ASM_PFX(SecSetTime)
332
333 popq %rdi // restore state
334 popq %rsi
335 popq %rbp
336 ret
337
338
339 ASM_GLOBAL ASM_PFX(GasketSecGetNextProtocol)
340 ASM_PFX(GasketSecGetNextProtocol):
341 pushq %rbp // stack frame is for the debugger
342 movq %rsp, %rbp
343
344 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
345 pushq %rdi
346
347 movq %rcx, %rdi // Swizzle args
348 movq %rdx, %rsi
349 movq %r8, %rdx
350 movq %r9, %rcx
351
352 call ASM_PFX(SecGetNextProtocol)
353
354 popq %rdi // restore state
355 popq %rsi
356 popq %rbp
357 ret
358
359 // PPIs produced by SEC
360
361 ASM_GLOBAL ASM_PFX(GasketSecPeCoffGetEntryPoint)
362 ASM_PFX(GasketSecPeCoffGetEntryPoint):
363 pushq %rbp // stack frame is for the debugger
364 movq %rsp, %rbp
365
366 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
367 pushq %rdi
368
369 movq %rcx, %rdi // Swizzle args
370 movq %rdx, %rsi
371
372 call ASM_PFX(SecPeCoffGetEntryPoint)
373
374 popq %rdi // restore state
375 popq %rsi
376 popq %rbp
377 ret
378
379 ASM_GLOBAL ASM_PFX(GasketSecPeCoffRelocateImageExtraAction)
380 ASM_PFX(GasketSecPeCoffRelocateImageExtraAction):
381 pushq %rbp // stack frame is for the debugger
382 movq %rsp, %rbp
383
384 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
385 pushq %rdi
386
387 movq %rcx, %rdi // Swizzle args
388
389 call ASM_PFX(SecPeCoffRelocateImageExtraAction)
390
391 popq %rdi // restore state
392 popq %rsi
393 popq %rbp
394 ret
395
396 ASM_GLOBAL ASM_PFX(GasketSecPeCoffUnloadImageExtraAction)
397 ASM_PFX(GasketSecPeCoffUnloadImageExtraAction):
398 pushq %rbp // stack frame is for the debugger
399 movq %rsp, %rbp
400
401 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
402 pushq %rdi
403
404 movq %rcx, %rdi // Swizzle args
405
406 call ASM_PFX(SecPeCoffUnloadImageExtraAction)
407
408 popq %rdi // restore state
409 popq %rsi
410 popq %rbp
411 ret
412
413
414 ASM_GLOBAL ASM_PFX(GasketSecEmuThunkAddress)
415 ASM_PFX(GasketSecEmuThunkAddress):
416 pushq %rbp // stack frame is for the debugger
417 movq %rsp, %rbp
418
419 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
420 pushq %rdi
421
422 call ASM_PFX(SecEmuThunkAddress)
423
424 popq %rdi // restore state
425 popq %rsi
426 popq %rbp
427 ret
428
429 //
430 // Gasket functions for EFI_EMU_UGA_IO_PROTOCOL
431 //
432
433 ASM_GLOBAL ASM_PFX(GasketX11Size)
434 ASM_PFX(GasketX11Size):
435 pushq %rbp // stack frame is for the debugger
436 movq %rsp, %rbp
437
438 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
439 pushq %rdi
440
441 movq %rcx, %rdi // Swizzle args
442 movq %rdx, %rsi
443 movq %r8, %rdx
444 movq %r9, %rcx
445
446 call ASM_PFX(X11Size)
447
448 popq %rdi // restore state
449 popq %rsi
450 popq %rbp
451 ret
452
453
454 ASM_GLOBAL ASM_PFX(GasketX11CheckKey)
455 ASM_PFX(GasketX11CheckKey):
456 pushq %rbp // stack frame is for the debugger
457 movq %rsp, %rbp
458
459 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
460 pushq %rdi
461
462 movq %rcx, %rdi // Swizzle args
463
464 call ASM_PFX(X11CheckKey)
465
466 popq %rdi // restore state
467 popq %rsi
468 popq %rbp
469 ret
470
471 ASM_GLOBAL ASM_PFX(GasketX11GetKey)
472 ASM_PFX(GasketX11GetKey):
473 pushq %rbp // stack frame is for the debugger
474 movq %rsp, %rbp
475
476 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
477 pushq %rdi
478
479 movq %rcx, %rdi // Swizzle args
480 movq %rdx, %rsi
481
482 call ASM_PFX(X11GetKey)
483
484 popq %rdi // restore state
485 popq %rsi
486 popq %rbp
487 ret
488
489
490 ASM_GLOBAL ASM_PFX(GasketX11KeySetState)
491 ASM_PFX(GasketX11KeySetState):
492 pushq %rbp // stack frame is for the debugger
493 movq %rsp, %rbp
494
495 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
496 pushq %rdi
497
498 movq %rcx, %rdi // Swizzle args
499 movq %rdx, %rsi
500
501 call ASM_PFX(X11KeySetState)
502
503 popq %rdi // restore state
504 popq %rsi
505 popq %rbp
506 ret
507
508
509 ASM_GLOBAL ASM_PFX(GasketX11RegisterKeyNotify)
510 ASM_PFX(GasketX11RegisterKeyNotify):
511 pushq %rbp // stack frame is for the debugger
512 movq %rsp, %rbp
513
514 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
515 pushq %rdi
516
517 movq %rcx, %rdi // Swizzle args
518 movq %rdx, %rsi
519 movq %r8, %rdx
520 movq %r9, %rcx
521
522 call ASM_PFX(X11RegisterKeyNotify)
523
524 popq %rdi // restore state
525 popq %rsi
526 popq %rbp
527 ret
528
529
530 ASM_GLOBAL ASM_PFX(GasketX11Blt)
531 ASM_PFX(GasketX11Blt):
532 pushq %rbp // stack frame is for the debugger
533 movq %rsp, %rbp
534
535 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
536 pushq %rdi
537
538 movq %rcx, %rdi // Swizzle args
539 movq %rdx, %rsi
540 movq %r8, %rdx
541 movq %r9, %rcx
542
543 call ASM_PFX(X11Blt)
544
545 popq %rdi // restore state
546 popq %rsi
547 popq %rbp
548 ret
549
550
551 ASM_GLOBAL ASM_PFX(GasketX11CheckPointer)
552 ASM_PFX(GasketX11CheckPointer):
553 pushq %rbp // stack frame is for the debugger
554 movq %rsp, %rbp
555
556 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
557 pushq %rdi
558
559 movq %rcx, %rdi // Swizzle args
560
561 call ASM_PFX(X11CheckPointer)
562
563 popq %rdi // restore state
564 popq %rsi
565 popq %rbp
566 ret
567
568
569 ASM_GLOBAL ASM_PFX(GasketX11GetPointerState)
570 ASM_PFX(GasketX11GetPointerState):
571 pushq %rbp // stack frame is for the debugger
572 movq %rsp, %rbp
573
574 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
575 pushq %rdi
576
577 movq %rcx, %rdi // Swizzle args
578 movq %rdx, %rsi
579
580 call ASM_PFX(X11GetPointerState)
581
582 popq %rdi // restore state
583 popq %rsi
584 popq %rbp
585 ret
586
587
588 ASM_GLOBAL ASM_PFX(GasketX11GraphicsWindowOpen)
589 ASM_PFX(GasketX11GraphicsWindowOpen):
590 pushq %rbp // stack frame is for the debugger
591 movq %rsp, %rbp
592
593 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
594 pushq %rdi
595
596 movq %rcx, %rdi // Swizzle args
597
598 call ASM_PFX(X11GraphicsWindowOpen)
599
600 popq %rdi // restore state
601 popq %rsi
602 popq %rbp
603 ret
604
605
606 ASM_GLOBAL ASM_PFX(GasketX11GraphicsWindowClose)
607 ASM_PFX(GasketX11GraphicsWindowClose):
608 pushq %rbp // stack frame is for the debugger
609 movq %rsp, %rbp
610
611 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
612 pushq %rdi
613
614 movq %rcx, %rdi // Swizzle args
615 movq %r9, %rcx
616
617 call ASM_PFX(X11GraphicsWindowClose)
618
619 popq %rdi // restore state
620 popq %rsi
621 popq %rbp
622 ret
623
624
625 // Pthreads
626
627 ASM_GLOBAL ASM_PFX(GasketPthreadMutexLock)
628 ASM_PFX(GasketPthreadMutexLock):
629 pushq %rbp // stack frame is for the debugger
630 movq %rsp, %rbp
631
632 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
633 pushq %rdi
634
635 movq %rcx, %rdi // Swizzle args
636
637 call ASM_PFX(PthreadMutexLock)
638
639 popq %rdi // restore state
640 popq %rsi
641 popq %rbp
642 ret
643
644
645 ASM_GLOBAL ASM_PFX(GasketPthreadMutexUnLock)
646 ASM_PFX(GasketPthreadMutexUnLock):
647 pushq %rbp // stack frame is for the debugger
648 movq %rsp, %rbp
649
650 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
651 pushq %rdi
652
653 movq %rcx, %rdi // Swizzle args
654
655 call ASM_PFX(PthreadMutexUnLock)
656
657 popq %rdi // restore state
658 popq %rsi
659 popq %rbp
660 ret
661
662 ASM_GLOBAL ASM_PFX(GasketPthreadMutexTryLock)
663 ASM_PFX(GasketPthreadMutexTryLock):
664 pushq %rbp // stack frame is for the debugger
665 movq %rsp, %rbp
666
667 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
668 pushq %rdi
669
670 movq %rcx, %rdi // Swizzle args
671
672 call ASM_PFX(PthreadMutexTryLock)
673
674 popq %rdi // restore state
675 popq %rsi
676 popq %rbp
677 ret
678
679 ASM_GLOBAL ASM_PFX(GasketPthreadMutexInit)
680 ASM_PFX(GasketPthreadMutexInit):
681 pushq %rbp // stack frame is for the debugger
682 movq %rsp, %rbp
683
684 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
685 pushq %rdi
686
687
688 call ASM_PFX(PthreadMutexInit)
689
690 popq %rdi // restore state
691 popq %rsi
692 popq %rbp
693 ret
694
695
696
697 ASM_GLOBAL ASM_PFX(GasketPthreadMutexDestroy)
698 ASM_PFX(GasketPthreadMutexDestroy):
699 pushq %rbp // stack frame is for the debugger
700 movq %rsp, %rbp
701
702 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
703 pushq %rdi
704
705 movq %rcx, %rdi // Swizzle args
706
707 call ASM_PFX(PthreadMutexDestroy)
708
709 popq %rdi // restore state
710 popq %rsi
711 popq %rbp
712 ret
713
714
715 ASM_GLOBAL ASM_PFX(GasketPthreadCreate)
716 ASM_PFX(GasketPthreadCreate):
717 pushq %rbp // stack frame is for the debugger
718 movq %rsp, %rbp
719
720 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
721 pushq %rdi
722
723 movq %rcx, %rdi // Swizzle args
724 movq %rdx, %rsi
725 movq %r8, %rdx
726 movq %r9, %rcx
727
728 call ASM_PFX(PthreadCreate)
729
730 popq %rdi // restore state
731 popq %rsi
732 popq %rbp
733 ret
734
735
736 ASM_GLOBAL ASM_PFX(GasketPthreadExit)
737 ASM_PFX(GasketPthreadExit):
738 pushq %rbp // stack frame is for the debugger
739 movq %rsp, %rbp
740
741 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
742 pushq %rdi
743
744 movq %rcx, %rdi // Swizzle args
745
746 call ASM_PFX(PthreadExit)
747
748 popq %rdi // restore state
749 popq %rsi
750 popq %rbp
751 ret
752
753
754
755 ASM_GLOBAL ASM_PFX(GasketPthreadSelf)
756 ASM_PFX(GasketPthreadSelf):
757 pushq %rbp // stack frame is for the debugger
758 movq %rsp, %rbp
759
760 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
761 pushq %rdi
762
763
764 call ASM_PFX(PthreadSelf)
765
766 popq %rdi // restore state
767 popq %rsi
768 popq %rbp
769 ret
770
771
772 ASM_GLOBAL ASM_PFX(GasketPthreadOpen)
773 ASM_PFX(GasketPthreadOpen):
774 pushq %rbp // stack frame is for the debugger
775 movq %rsp, %rbp
776
777 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
778 pushq %rdi
779
780 movq %rcx, %rdi // Swizzle args
781
782 call ASM_PFX(PthreadOpen)
783
784 popq %rdi // restore state
785 popq %rsi
786 popq %rbp
787 ret
788
789
790 ASM_GLOBAL ASM_PFX(GasketPthreadClose)
791 ASM_PFX(GasketPthreadClose):
792 pushq %rbp // stack frame is for the debugger
793 movq %rsp, %rbp
794
795 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
796 pushq %rdi
797
798 movq %rcx, %rdi // Swizzle args
799
800 call ASM_PFX(PthreadClose)
801
802 popq %rdi // restore state
803 popq %rsi
804 popq %rbp
805 ret
806
807
808
809
810 //
811 // UNIX ABI to EFI ABI call
812 //
813 // UINTN
814 // ReverseGasketUint64 (
815 // void *Api,
816 // UINTN Arg1
817 // );
818 ASM_GLOBAL ASM_PFX(ReverseGasketUint64)
819 ASM_PFX(ReverseGasketUint64):
820 pushq %rbp // stack frame is for the debugger
821 movq %rsp, %rbp
822
823 movq %rdi, %rax // Swizzle args
824 movq %rsi, %rcx
825
826 subq $32, %rsp // 32-byte shadow space
827 call *%rax
828 addq $32, %rsp
829
830 popq %rbp
831 ret
832
833 //
834 // UNIX ABI to EFI ABI call
835 //
836 // UINTN
837 // ReverseGasketUint64Uint64 (
838 // void *Api,
839 // UINTN Arg1
840 // UINTN Arg2
841 // );
842 ASM_GLOBAL ASM_PFX(ReverseGasketUint64Uint64)
843 ASM_PFX(ReverseGasketUint64Uint64):
844 pushq %rbp // stack frame is for the debugger
845 movq %rsp, %rbp
846
847 movq %rdi, %rax // Swizzle args
848 movq %rsi, %rcx
849
850 subq $32, %rsp // 32-byte shadow space
851 call *%rax
852 addq $32, %rsp
853
854 popq %rbp
855 ret
856
857
858 ASM_GLOBAL ASM_PFX(GasketSecUnixPeiAutoScan)
859 ASM_PFX(GasketSecUnixPeiAutoScan):
860 pushq %rbp // stack frame is for the debugger
861 movq %rsp, %rbp
862
863 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
864 pushq %rdi
865
866 movq %rcx, %rdi // Swizzle args
867 movq %rdx, %rsi
868 movq %r8, %rdx
869
870 call ASM_PFX(SecUnixPeiAutoScan)
871
872 popq %rdi // restore state
873 popq %rsi
874 popq %rbp
875 ret
876
877
878 ASM_GLOBAL ASM_PFX(GasketSecUnixFdAddress)
879 ASM_PFX(GasketSecUnixFdAddress):
880 pushq %rbp // stack frame is for the debugger
881 movq %rsp, %rbp
882
883 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
884 pushq %rdi
885
886 movq %rcx, %rdi // Swizzle args
887 movq %rdx, %rsi
888 movq %r8, %rdx
889 movq %r9, %rcx
890
891 call ASM_PFX(SecUnixFdAddress)
892
893 popq %rdi // restore state
894 popq %rsi
895 popq %rbp
896 ret
897
898
899 // EmuIoThunk SimpleFileSystem
900
901 ASM_GLOBAL ASM_PFX(GasketPosixOpenVolume)
902 ASM_PFX(GasketPosixOpenVolume):
903 pushq %rbp // stack frame is for the debugger
904 movq %rsp, %rbp
905
906 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
907 pushq %rdi
908
909 movq %rcx, %rdi // Swizzle args
910 movq %rdx, %rsi
911 movq %r8, %rdx
912 movq %r9, %rcx
913
914 call ASM_PFX(PosixOpenVolume)
915
916 popq %rdi // restore state
917 popq %rsi
918 popq %rbp
919 ret
920
921
922 ASM_GLOBAL ASM_PFX(GasketPosixFileOpen)
923 ASM_PFX(GasketPosixFileOpen):
924 pushq %rbp // stack frame is for the debugger
925 movq %rsp, %rbp
926
927 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
928 pushq %rdi
929
930 movq %rcx, %rdi // Swizzle args
931 movq %rdx, %rsi
932 movq %r8, %rdx
933 movq %r9, %rcx
934 movq 48(%rbp), %r8
935
936 call ASM_PFX(PosixFileOpen)
937
938 popq %rdi // restore state
939 popq %rsi
940 popq %rbp
941 ret
942
943
944 ASM_GLOBAL ASM_PFX(GasketPosixFileCLose)
945 ASM_PFX(GasketPosixFileCLose):
946 pushq %rbp // stack frame is for the debugger
947 movq %rsp, %rbp
948
949 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
950 pushq %rdi
951
952 movq %rcx, %rdi // Swizzle args
953
954 call ASM_PFX(PosixFileCLose)
955
956 popq %rdi // restore state
957 popq %rsi
958 popq %rbp
959 ret
960
961
962 ASM_GLOBAL ASM_PFX(GasketPosixFileDelete)
963 ASM_PFX(GasketPosixFileDelete):
964 pushq %rbp // stack frame is for the debugger
965 movq %rsp, %rbp
966
967 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
968 pushq %rdi
969
970 movq %rcx, %rdi // Swizzle args
971
972 call ASM_PFX(PosixFileDelete)
973
974 popq %rdi // restore state
975 popq %rsi
976 popq %rbp
977 ret
978
979
980 ASM_GLOBAL ASM_PFX(GasketPosixFileRead)
981 ASM_PFX(GasketPosixFileRead):
982 pushq %rbp // stack frame is for the debugger
983 movq %rsp, %rbp
984
985 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
986 pushq %rdi
987
988 movq %rcx, %rdi // Swizzle args
989 movq %rdx, %rsi
990 movq %r8, %rdx
991
992 call ASM_PFX(PosixFileRead)
993
994 popq %rdi // restore state
995 popq %rsi
996 popq %rbp
997 ret
998
999
1000 ASM_GLOBAL ASM_PFX(GasketPosixFileWrite)
1001 ASM_PFX(GasketPosixFileWrite):
1002 pushq %rbp // stack frame is for the debugger
1003 movq %rsp, %rbp
1004
1005 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1006 pushq %rdi
1007
1008 movq %rcx, %rdi // Swizzle args
1009 movq %rdx, %rsi
1010 movq %r8, %rdx
1011
1012 call ASM_PFX(PosixFileWrite)
1013
1014 popq %rdi // restore state
1015 popq %rsi
1016 popq %rbp
1017 ret
1018
1019
1020 ASM_GLOBAL ASM_PFX(GasketPosixFileSetPossition)
1021 ASM_PFX(GasketPosixFileSetPossition):
1022 pushq %rbp // stack frame is for the debugger
1023 movq %rsp, %rbp
1024
1025 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1026 pushq %rdi
1027
1028 movq %rcx, %rdi // Swizzle args
1029 movq %rdx, %rsi
1030
1031 call ASM_PFX(PosixFileSetPossition)
1032
1033 popq %rdi // restore state
1034 popq %rsi
1035 popq %rbp
1036 ret
1037
1038
1039 ASM_GLOBAL ASM_PFX(GasketPosixFileGetPossition)
1040 ASM_PFX(GasketPosixFileGetPossition):
1041 pushq %rbp // stack frame is for the debugger
1042 movq %rsp, %rbp
1043
1044 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1045 pushq %rdi
1046
1047 movq %rcx, %rdi // Swizzle args
1048 movq %rdx, %rsi
1049
1050 call ASM_PFX(PosixFileGetPossition)
1051
1052 popq %rdi // restore state
1053 popq %rsi
1054 popq %rbp
1055 ret
1056
1057
1058 ASM_GLOBAL ASM_PFX(GasketPosixFileGetInfo)
1059 ASM_PFX(GasketPosixFileGetInfo):
1060 pushq %rbp // stack frame is for the debugger
1061 movq %rsp, %rbp
1062
1063 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1064 pushq %rdi
1065
1066 movq %rcx, %rdi // Swizzle args
1067 movq %rdx, %rsi
1068 movq %r8, %rdx
1069 movq %r9, %rcx
1070
1071 call ASM_PFX(PosixFileGetInfo)
1072
1073 popq %rdi // restore state
1074 popq %rsi
1075 popq %rbp
1076 ret
1077
1078
1079 ASM_GLOBAL ASM_PFX(GasketPosixFileSetInfo)
1080 ASM_PFX(GasketPosixFileSetInfo):
1081 pushq %rbp // stack frame is for the debugger
1082 movq %rsp, %rbp
1083
1084 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1085 pushq %rdi
1086
1087 movq %rcx, %rdi // Swizzle args
1088 movq %rdx, %rsi
1089 movq %r8, %rdx
1090 movq %r9, %rcx
1091
1092 call ASM_PFX(PosixFileSetInfo)
1093
1094 popq %rdi // restore state
1095 popq %rsi
1096 popq %rbp
1097 ret
1098
1099
1100 ASM_GLOBAL ASM_PFX(GasketPosixFileFlush)
1101 ASM_PFX(GasketPosixFileFlush):
1102 pushq %rbp // stack frame is for the debugger
1103 movq %rsp, %rbp
1104
1105 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1106 pushq %rdi
1107
1108 movq %rcx, %rdi // Swizzle args
1109
1110 call ASM_PFX(PosixFileFlush)
1111
1112 popq %rdi // restore state
1113 popq %rsi
1114 popq %rbp
1115 ret
1116
1117
1118 ASM_GLOBAL ASM_PFX(GasketPosixFileSystmeThunkOpen)
1119 ASM_PFX(GasketPosixFileSystmeThunkOpen):
1120 pushq %rbp // stack frame is for the debugger
1121 movq %rsp, %rbp
1122
1123 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1124 pushq %rdi
1125
1126 movq %rcx, %rdi // Swizzle args
1127
1128 call ASM_PFX(PosixFileSystmeThunkOpen)
1129
1130 popq %rdi // restore state
1131 popq %rsi
1132 popq %rbp
1133 ret
1134
1135
1136 ASM_GLOBAL ASM_PFX(GasketPosixFileSystmeThunkClose)
1137 ASM_PFX(GasketPosixFileSystmeThunkClose):
1138 pushq %rbp // stack frame is for the debugger
1139 movq %rsp, %rbp
1140
1141 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1142 pushq %rdi
1143
1144 movq %rcx, %rdi // Swizzle args
1145
1146 call ASM_PFX(PosixFileSystmeThunkClose)
1147
1148 popq %rdi // restore state
1149 popq %rsi
1150 popq %rbp
1151 ret
1152
1153 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoReset)
1154 ASM_PFX(GasketEmuBlockIoReset):
1155 pushq %rbp // stack frame is for the debugger
1156 movq %rsp, %rbp
1157
1158 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1159 pushq %rdi
1160
1161 movq %rcx, %rdi // Swizzle args
1162 movq %rdx, %rsi
1163
1164 call ASM_PFX(EmuBlockIoReset)
1165
1166 popq %rdi // restore state
1167 popq %rsi
1168 popq %rbp
1169 ret
1170
1171
1172 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoReadBlocks)
1173 ASM_PFX(GasketEmuBlockIoReadBlocks):
1174 pushq %rbp // stack frame is for the debugger
1175 movq %rsp, %rbp
1176
1177 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1178 pushq %rdi
1179
1180 movq %rcx, %rdi // Swizzle args
1181 movq %rdx, %rsi
1182 movq %r8, %rdx
1183 movq %r9, %rcx
1184 movq 48(%rbp), %r8
1185 movq 56(%rbp), %r9
1186
1187 call ASM_PFX(EmuBlockIoReadBlocks)
1188
1189 popq %rdi // restore state
1190 popq %rsi
1191 popq %rbp
1192 ret
1193
1194
1195 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoWriteBlocks)
1196 ASM_PFX(GasketEmuBlockIoWriteBlocks):
1197 pushq %rbp // stack frame is for the debugger
1198 movq %rsp, %rbp
1199
1200 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1201 pushq %rdi
1202
1203 movq %rcx, %rdi // Swizzle args
1204 movq %rdx, %rsi
1205 movq %r8, %rdx
1206 movq %r9, %rcx
1207 movq 48(%rbp), %r8
1208 movq 56(%rbp), %r9
1209
1210 call ASM_PFX(EmuBlockIoWriteBlocks)
1211
1212 popq %rdi // restore state
1213 popq %rsi
1214 popq %rbp
1215 ret
1216
1217
1218 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoFlushBlocks)
1219 ASM_PFX(GasketEmuBlockIoFlushBlocks):
1220 pushq %rbp // stack frame is for the debugger
1221 movq %rsp, %rbp
1222
1223 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1224 pushq %rdi
1225
1226 movq %rcx, %rdi // Swizzle args
1227 movq %rdx, %rsi
1228
1229 call ASM_PFX(EmuBlockIoFlushBlocks)
1230
1231 popq %rdi // restore state
1232 popq %rsi
1233 popq %rbp
1234 ret
1235
1236
1237 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoCreateMapping)
1238 ASM_PFX(GasketEmuBlockIoCreateMapping):
1239 pushq %rbp // stack frame is for the debugger
1240 movq %rsp, %rbp
1241
1242 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1243 pushq %rdi
1244
1245 movq %rcx, %rdi // Swizzle args
1246 movq %rdx, %rsi
1247
1248 call ASM_PFX(EmuBlockIoCreateMapping)
1249
1250 popq %rdi // restore state
1251 popq %rsi
1252 popq %rbp
1253 ret
1254
1255
1256 ASM_GLOBAL ASM_PFX(GasketBlockIoThunkOpen)
1257 ASM_PFX(GasketBlockIoThunkOpen):
1258 pushq %rbp // stack frame is for the debugger
1259 movq %rsp, %rbp
1260
1261 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1262 pushq %rdi
1263
1264 movq %rcx, %rdi // Swizzle args
1265
1266 call ASM_PFX(EmuBlockIoThunkOpen)
1267
1268 popq %rdi // restore state
1269 popq %rsi
1270 popq %rbp
1271 ret
1272
1273
1274 ASM_GLOBAL ASM_PFX(GasketBlockIoThunkClose)
1275 ASM_PFX(GasketBlockIoThunkClose):
1276 pushq %rbp // stack frame is for the debugger
1277 movq %rsp, %rbp
1278
1279 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1280 pushq %rdi
1281
1282 movq %rcx, %rdi // Swizzle args
1283
1284 call ASM_PFX(EmuBlockIoThunkClose)
1285
1286 popq %rdi // restore state
1287 popq %rsi
1288 popq %rbp
1289 ret
1290
1291
1292
1293 ASM_GLOBAL ASM_PFX(GasketSnpCreateMapping)
1294 ASM_PFX(GasketSnpCreateMapping):
1295 pushq %rbp // stack frame is for the debugger
1296 movq %rsp, %rbp
1297
1298 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1299 pushq %rdi
1300
1301 movq %rcx, %rdi // Swizzle args
1302 movq %rdx, %rsi
1303
1304 call ASM_PFX(EmuSnpCreateMapping)
1305
1306 popq %rdi // restore state
1307 popq %rsi
1308 popq %rbp
1309 ret
1310
1311
1312 ASM_GLOBAL ASM_PFX(GasketSnpStart)
1313 ASM_PFX(GasketSnpStart):
1314 pushq %rbp // stack frame is for the debugger
1315 movq %rsp, %rbp
1316
1317 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1318 pushq %rdi
1319
1320 movq %rcx, %rdi // Swizzle args
1321
1322 call ASM_PFX(EmuSnpStart)
1323
1324 popq %rdi // restore state
1325 popq %rsi
1326 popq %rbp
1327 ret
1328
1329
1330 ASM_GLOBAL ASM_PFX(GasketSnpStop)
1331 ASM_PFX(GasketSnpStop):
1332 pushq %rbp // stack frame is for the debugger
1333 movq %rsp, %rbp
1334
1335 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1336 pushq %rdi
1337
1338 movq %rcx, %rdi // Swizzle args
1339
1340 call ASM_PFX(EmuSnpStop)
1341
1342 popq %rdi // restore state
1343 popq %rsi
1344 popq %rbp
1345 ret
1346
1347
1348 ASM_GLOBAL ASM_PFX(GasketSnpInitialize)
1349 ASM_PFX(GasketSnpInitialize):
1350 pushq %rbp // stack frame is for the debugger
1351 movq %rsp, %rbp
1352
1353 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1354 pushq %rdi
1355
1356 movq %rcx, %rdi // Swizzle args
1357 movq %rdx, %rsi
1358 movq %r8, %rdx
1359
1360 call ASM_PFX(EmuSnpInitialize)
1361
1362 popq %rdi // restore state
1363 popq %rsi
1364 popq %rbp
1365 ret
1366
1367
1368
1369 ASM_GLOBAL ASM_PFX(GasketSnpReset)
1370 ASM_PFX(GasketSnpReset):
1371 pushq %rbp // stack frame is for the debugger
1372 movq %rsp, %rbp
1373
1374 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1375 pushq %rdi
1376
1377 movq %rcx, %rdi // Swizzle args
1378 movq %rdx, %rsi
1379
1380 call ASM_PFX(EmuSnpReset)
1381
1382 popq %rdi // restore state
1383 popq %rsi
1384 popq %rbp
1385 ret
1386
1387
1388 ASM_GLOBAL ASM_PFX(GasketSnpShutdown)
1389 ASM_PFX(GasketSnpShutdown):
1390 pushq %rbp // stack frame is for the debugger
1391 movq %rsp, %rbp
1392
1393 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1394 pushq %rdi
1395
1396 movq %rcx, %rdi // Swizzle args
1397
1398 call ASM_PFX(EmuSnpShutdown)
1399
1400 popq %rdi // restore state
1401 popq %rsi
1402 popq %rbp
1403 ret
1404
1405
1406 ASM_GLOBAL ASM_PFX(GasketSnpReceiveFilters)
1407 ASM_PFX(GasketSnpReceiveFilters):
1408 pushq %rbp // stack frame is for the debugger
1409 movq %rsp, %rbp
1410
1411 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1412 pushq %rdi
1413
1414 movq %rcx, %rdi // Swizzle args
1415 movq %rdx, %rsi
1416 movq %r8, %rdx
1417 movq %r9, %rcx
1418 movq 48(%rbp), %r8
1419 movq 56(%rbp), %r9
1420
1421 call ASM_PFX(EmuSnpReceiveFilters)
1422
1423 popq %rdi // restore state
1424 popq %rsi
1425 popq %rbp
1426 ret
1427
1428
1429 ASM_GLOBAL ASM_PFX(GasketSnpStationAddress)
1430 ASM_PFX(GasketSnpStationAddress):
1431 pushq %rbp // stack frame is for the debugger
1432 movq %rsp, %rbp
1433
1434 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1435 pushq %rdi
1436
1437 movq %rcx, %rdi // Swizzle args
1438 movq %rdx, %rsi
1439 movq %r8, %rdx
1440
1441 call ASM_PFX(EmuSnpStationAddress)
1442
1443 popq %rdi // restore state
1444 popq %rsi
1445 popq %rbp
1446 ret
1447
1448
1449
1450 ASM_GLOBAL ASM_PFX(GasketSnpStatistics)
1451 ASM_PFX(GasketSnpStatistics):
1452 pushq %rbp // stack frame is for the debugger
1453 movq %rsp, %rbp
1454
1455 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1456 pushq %rdi
1457
1458 movq %rcx, %rdi // Swizzle args
1459 movq %rdx, %rsi
1460 movq %r8, %rdx
1461 movq %r9, %rcx
1462
1463 call ASM_PFX(EmuSnpStatistics)
1464
1465 popq %rdi // restore state
1466 popq %rsi
1467 popq %rbp
1468 ret
1469
1470
1471 ASM_GLOBAL ASM_PFX(GasketSnpMCastIpToMac)
1472 ASM_PFX(GasketSnpMCastIpToMac):
1473 pushq %rbp // stack frame is for the debugger
1474 movq %rsp, %rbp
1475
1476 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1477 pushq %rdi
1478
1479 movq %rcx, %rdi // Swizzle args
1480 movq %rdx, %rsi
1481 movq %r8, %rdx
1482 movq %r9, %rcx
1483
1484 call ASM_PFX(EmuSnpMCastIpToMac)
1485
1486 popq %rdi // restore state
1487 popq %rsi
1488 popq %rbp
1489 ret
1490
1491
1492 ASM_GLOBAL ASM_PFX(GasketSnpNvData)
1493 ASM_PFX(GasketSnpNvData):
1494 pushq %rbp // stack frame is for the debugger
1495 movq %rsp, %rbp
1496
1497 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1498 pushq %rdi
1499
1500 movq %rcx, %rdi // Swizzle args
1501 movq %rdx, %rsi
1502 movq %r8, %rdx
1503 movq %r9, %rcx
1504 movq 48(%rbp), %r8
1505
1506 call ASM_PFX(EmuSnpNvData)
1507
1508 popq %rdi // restore state
1509 popq %rsi
1510 popq %rbp
1511 ret
1512
1513
1514 ASM_GLOBAL ASM_PFX(GasketSnpGetStatus)
1515 ASM_PFX(GasketSnpGetStatus):
1516 pushq %rbp // stack frame is for the debugger
1517 movq %rsp, %rbp
1518
1519 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1520 pushq %rdi
1521
1522 movq %rcx, %rdi // Swizzle args
1523 movq %rdx, %rsi
1524 movq %r8, %rdx
1525
1526 call ASM_PFX(EmuSnpGetStatus)
1527
1528 popq %rdi // restore state
1529 popq %rsi
1530 popq %rbp
1531 ret
1532
1533
1534
1535 ASM_GLOBAL ASM_PFX(GasketSnpTransmit)
1536 ASM_PFX(GasketSnpTransmit):
1537 pushq %rbp // stack frame is for the debugger
1538 movq %rsp, %rbp
1539 subq $16, %rsp // Allocate space for args on the stack
1540
1541 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1542 pushq %rdi
1543
1544 movq %rcx, %rdi // Swizzle args
1545 movq %rdx, %rsi
1546 movq %r8, %rdx
1547 movq %r9, %rcx
1548 movq 48(%rbp), %r8
1549 movq 56(%rbp), %r9
1550 movq 64(%rbp), %rax
1551 movq %rax, (%rsp)
1552
1553 call ASM_PFX(EmuSnpTransmit)
1554 addq $16, %rsp
1555
1556 popq %rdi // restore state
1557 popq %rsi
1558 popq %rbp
1559 ret
1560
1561
1562
1563 ASM_GLOBAL ASM_PFX(GasketSnpReceive)
1564 ASM_PFX(GasketSnpReceive):
1565 pushq %rbp // stack frame is for the debugger
1566 movq %rsp, %rbp
1567 subq $16, %rsp // Allocate space for args on the stack
1568
1569 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1570 pushq %rdi
1571
1572 movq %rcx, %rdi // Swizzle args
1573 movq %rdx, %rsi
1574 movq %r8, %rdx
1575 movq %r9, %rcx
1576 movq 48(%rbp), %r8
1577 movq 56(%rbp), %r9
1578 movq 64(%rbp), %rax
1579 movq %rax, (%rsp)
1580
1581 call ASM_PFX(EmuSnpReceive)
1582 addq $16, %rsp
1583
1584 popq %rdi // restore state
1585 popq %rsi
1586 popq %rbp
1587 ret
1588
1589
1590 ASM_GLOBAL ASM_PFX(GasketSnpThunkOpen)
1591 ASM_PFX(GasketSnpThunkOpen):
1592 pushq %rbp // stack frame is for the debugger
1593 movq %rsp, %rbp
1594
1595 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1596 pushq %rdi
1597
1598 movq %rcx, %rdi // Swizzle args
1599
1600 call ASM_PFX(EmuSnpThunkOpen)
1601
1602 popq %rdi // restore state
1603 popq %rsi
1604 popq %rbp
1605 ret
1606
1607
1608 ASM_GLOBAL ASM_PFX(GasketSnpThunkClose)
1609 ASM_PFX(GasketSnpThunkClose):
1610 pushq %rbp // stack frame is for the debugger
1611 movq %rsp, %rbp
1612
1613 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1614 pushq %rdi
1615
1616 movq %rcx, %rdi // Swizzle args
1617
1618 call ASM_PFX(EmuSnpThunkClose)
1619
1620 popq %rdi // restore state
1621 popq %rsi
1622 popq %rbp
1623 ret
1624
1625