]> git.proxmox.com Git - mirror_edk2.git/blob - InOsEmuPkg/Unix/Sec/X64/Gasket.S
e5515e259b47c02567d086812de8dae2e58383d9
[mirror_edk2.git] / InOsEmuPkg / Unix / Sec / 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 # This program and the accompanying materials
12 # are licensed and made available under the terms and conditions of the BSD License
13 # which accompanies this distribution. The full text of the license may be found at
14 # http://opensource.org/licenses/bsd-license.php
15 #
16 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
17 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 #
19 #------------------------------------------------------------------------------
20
21 //
22 // Gaskets are EFI ABI to UNIX ABI calls
23 // EFI ABI code will sub 40 (0x28) from %rsp before calling a function
24 // This is the 32 (0x20) byte to spill registers and 8 bytes to align stack on 16 byte boundry.
25 //
26 .text
27
28 // 32 byte shadow to spill rcx-r9, 8 bytes to align stack on 16 byte boundry
29 // Any call with 0 - 4 arguments allocates 40 bytes on the stack.
30 // For more than 4 args you always have to increase in quanta of 16 so 5 or 6 args is 56,
31 // 7 or 8 args is 72, and 9 or 10 args is 88
32
33
34
35 .text
36
37 //
38 // EMU_THUNK_PROTOCOL gaskets (EFIAPI to UNIX ABI)
39 //
40
41
42
43
44 ASM_GLOBAL ASM_PFX(GasketSecWriteStdErr)
45 ASM_PFX(GasketSecWriteStdErr):
46 pushq %rbp // stack frame is for the debugger
47 movq %rsp, %rbp
48
49 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
50 pushq %rdi
51
52 movq %rcx, %rdi // Swizzle args
53 movq %rdx, %rsi
54
55 call ASM_PFX(SecWriteStdErr)
56
57 popq %rdi // restore state
58 popq %rsi
59 popq %rbp
60 ret
61
62
63 ASM_GLOBAL ASM_PFX(GasketSecSetTimer)
64 ASM_PFX(GasketSecSetTimer):
65 pushq %rbp // stack frame is for the debugger
66 movq %rsp, %rbp
67
68 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
69 pushq %rdi
70
71 movq %rcx, %rdi // Swizzle args
72 movq %rdx, %rsi
73
74 call ASM_PFX(SecSetTimer)
75
76 popq %rdi // restore state
77 popq %rsi
78 popq %rbp
79 ret
80
81
82 ASM_GLOBAL ASM_PFX(GasketSecEnableInterrupt)
83 ASM_PFX(GasketSecEnableInterrupt):
84 pushq %rbp // stack frame is for the debugger
85 movq %rsp, %rbp
86
87 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
88 pushq %rdi
89
90 call ASM_PFX(SecEnableInterrupt)
91
92 popq %rdi // restore state
93 popq %rsi
94 popq %rbp
95 ret
96
97
98 ASM_GLOBAL ASM_PFX(GasketSecDisableInterrupt)
99 ASM_PFX(GasketSecDisableInterrupt):
100 pushq %rbp // stack frame is for the debugger
101 movq %rsp, %rbp
102
103 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
104 pushq %rdi
105
106 call ASM_PFX(SecDisableInterrupt)
107
108 popq %rdi // restore state
109 popq %rsi
110 popq %rbp
111 ret
112
113 ASM_GLOBAL ASM_PFX(GasketQueryPerformanceFrequency)
114 ASM_PFX(GasketQueryPerformanceFrequency):
115 pushq %rbp // stack frame is for the debugger
116 movq %rsp, %rbp
117
118 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
119 pushq %rdi
120
121 call ASM_PFX(QueryPerformanceFrequency)
122
123 popq %rdi // restore state
124 popq %rsi
125 popq %rbp
126 ret
127
128
129 ASM_GLOBAL ASM_PFX(GasketQueryPerformanceCounter)
130 ASM_PFX(GasketQueryPerformanceCounter):
131 pushq %rbp // stack frame is for the debugger
132 movq %rsp, %rbp
133
134 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
135 pushq %rdi
136
137 call ASM_PFX(QueryPerformanceCounter)
138
139 popq %rdi // restore state
140 popq %rsi
141 popq %rbp
142 ret
143
144
145 ASM_GLOBAL ASM_PFX(GasketSecSleep)
146 ASM_PFX(GasketSecSleep):
147 pushq %rbp // stack frame is for the debugger
148 movq %rsp, %rbp
149
150 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
151 pushq %rdi
152
153 movq %rcx, %rdi // Swizzle args
154
155 call ASM_PFX(SecSleep)
156
157 popq %rdi // restore state
158 popq %rsi
159 popq %rbp
160 ret
161
162
163 ASM_GLOBAL ASM_PFX(GasketSecExit)
164 ASM_PFX(GasketSecExit):
165 pushq %rbp // stack frame is for the debugger
166 movq %rsp, %rbp
167
168 movq %rcx, %rdi // Swizzle args
169 call ASM_PFX(SecExit) // Less to do as we will never return to EFI ABI world
170 LDEAD_LOOP:
171 jmp LDEAD_LOOP // _exit should never return
172
173
174 ASM_GLOBAL ASM_PFX(GasketSecGetTime)
175 ASM_PFX(GasketSecGetTime):
176 pushq %rbp // stack frame is for the debugger
177 movq %rsp, %rbp
178
179 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
180 pushq %rdi
181
182 movq %rcx, %rdi // Swizzle args
183 movq %rdx, %rsi
184
185 call ASM_PFX(SecGetTime)
186
187 popq %rdi // restore state
188 popq %rsi
189 popq %rbp
190 ret
191
192 ASM_GLOBAL ASM_PFX(GasketSecSetTime)
193 ASM_PFX(GasketSecSetTime):
194 pushq %rbp // stack frame is for the debugger
195 movq %rsp, %rbp
196
197 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
198 pushq %rdi
199
200 movq %rcx, %rdi // Swizzle args
201 movq %rdx, %rsi
202
203 call ASM_PFX(SecSetTime)
204
205 popq %rdi // restore state
206 popq %rsi
207 popq %rbp
208 ret
209
210
211 ASM_GLOBAL ASM_PFX(GasketSecGetNextProtocol)
212 ASM_PFX(GasketSecGetNextProtocol):
213 pushq %rbp // stack frame is for the debugger
214 movq %rsp, %rbp
215
216 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
217 pushq %rdi
218
219 movq %rcx, %rdi // Swizzle args
220 movq %rdx, %rsi
221 movq %r8, %rdx
222 movq %r9, %rcx
223
224 call ASM_PFX(SecGetNextProtocol)
225
226 popq %rdi // restore state
227 popq %rsi
228 popq %rbp
229 ret
230
231 // PPIs produced by SEC
232
233 ASM_GLOBAL ASM_PFX(GasketSecPeCoffGetEntryPoint)
234 ASM_PFX(GasketSecPeCoffGetEntryPoint):
235 pushq %rbp // stack frame is for the debugger
236 movq %rsp, %rbp
237
238 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
239 pushq %rdi
240
241 movq %rcx, %rdi // Swizzle args
242 movq %rdx, %rsi
243
244 call ASM_PFX(SecPeCoffGetEntryPoint)
245
246 popq %rdi // restore state
247 popq %rsi
248 popq %rbp
249 ret
250
251 ASM_GLOBAL ASM_PFX(GasketSecPeCoffRelocateImageExtraAction)
252 ASM_PFX(GasketSecPeCoffRelocateImageExtraAction):
253 pushq %rbp // stack frame is for the debugger
254 movq %rsp, %rbp
255
256 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
257 pushq %rdi
258
259 movq %rcx, %rdi // Swizzle args
260
261 call ASM_PFX(SecPeCoffRelocateImageExtraAction)
262
263 popq %rdi // restore state
264 popq %rsi
265 popq %rbp
266 ret
267
268 ASM_GLOBAL ASM_PFX(GasketSecPeCoffUnloadImageExtraAction)
269 ASM_PFX(GasketSecPeCoffUnloadImageExtraAction):
270 pushq %rbp // stack frame is for the debugger
271 movq %rsp, %rbp
272
273 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
274 pushq %rdi
275
276 movq %rcx, %rdi // Swizzle args
277
278 call ASM_PFX(SecPeCoffUnloadImageExtraAction)
279
280 popq %rdi // restore state
281 popq %rsi
282 popq %rbp
283 ret
284
285
286 ASM_GLOBAL ASM_PFX(GasketSecEmuThunkAddress)
287 ASM_PFX(GasketSecEmuThunkAddress):
288 pushq %rbp // stack frame is for the debugger
289 movq %rsp, %rbp
290
291 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
292 pushq %rdi
293
294 call ASM_PFX(SecEmuThunkAddress)
295
296 popq %rdi // restore state
297 popq %rsi
298 popq %rbp
299 ret
300
301 //
302 // Gasket functions for EFI_EMU_UGA_IO_PROTOCOL
303 //
304
305 ASM_GLOBAL ASM_PFX(GasketX11Size)
306 ASM_PFX(GasketX11Size):
307 pushq %rbp // stack frame is for the debugger
308 movq %rsp, %rbp
309
310 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
311 pushq %rdi
312
313 movq %rcx, %rdi // Swizzle args
314 movq %rdx, %rsi
315 movq %r8, %rdx
316 movq %r9, %rcx
317
318 call ASM_PFX(X11Size)
319
320 popq %rdi // restore state
321 popq %rsi
322 popq %rbp
323 ret
324
325
326 ASM_GLOBAL ASM_PFX(GasketX11CheckKey)
327 ASM_PFX(GasketX11CheckKey):
328 pushq %rbp // stack frame is for the debugger
329 movq %rsp, %rbp
330
331 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
332 pushq %rdi
333
334 movq %rcx, %rdi // Swizzle args
335
336 call ASM_PFX(X11CheckKey)
337
338 popq %rdi // restore state
339 popq %rsi
340 popq %rbp
341 ret
342
343 ASM_GLOBAL ASM_PFX(GasketX11GetKey)
344 ASM_PFX(GasketX11GetKey):
345 pushq %rbp // stack frame is for the debugger
346 movq %rsp, %rbp
347
348 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
349 pushq %rdi
350
351 movq %rcx, %rdi // Swizzle args
352 movq %rdx, %rsi
353
354 call ASM_PFX(X11GetKey)
355
356 popq %rdi // restore state
357 popq %rsi
358 popq %rbp
359 ret
360
361
362 ASM_GLOBAL ASM_PFX(GasketX11KeySetState)
363 ASM_PFX(GasketX11KeySetState):
364 pushq %rbp // stack frame is for the debugger
365 movq %rsp, %rbp
366
367 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
368 pushq %rdi
369
370 movq %rcx, %rdi // Swizzle args
371 movq %rdx, %rsi
372
373 call ASM_PFX(X11KeySetState)
374
375 popq %rdi // restore state
376 popq %rsi
377 popq %rbp
378 ret
379
380
381 ASM_GLOBAL ASM_PFX(GasketX11RegisterKeyNotify)
382 ASM_PFX(GasketX11RegisterKeyNotify):
383 pushq %rbp // stack frame is for the debugger
384 movq %rsp, %rbp
385
386 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
387 pushq %rdi
388
389 movq %rcx, %rdi // Swizzle args
390 movq %rdx, %rsi
391 movq %r8, %rdx
392 movq %r9, %rcx
393
394 call ASM_PFX(X11RegisterKeyNotify)
395
396 popq %rdi // restore state
397 popq %rsi
398 popq %rbp
399 ret
400
401
402 ASM_GLOBAL ASM_PFX(GasketX11Blt)
403 ASM_PFX(GasketX11Blt):
404 pushq %rbp // stack frame is for the debugger
405 movq %rsp, %rbp
406
407 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
408 pushq %rdi
409
410 movq %rcx, %rdi // Swizzle args
411 movq %rdx, %rsi
412 movq %r8, %rdx
413 movq %r9, %rcx
414
415 call ASM_PFX(X11Blt)
416
417 popq %rdi // restore state
418 popq %rsi
419 popq %rbp
420 ret
421
422
423 ASM_GLOBAL ASM_PFX(GasketX11CheckPointer)
424 ASM_PFX(GasketX11CheckPointer):
425 pushq %rbp // stack frame is for the debugger
426 movq %rsp, %rbp
427
428 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
429 pushq %rdi
430
431 movq %rcx, %rdi // Swizzle args
432
433 call ASM_PFX(X11CheckPointer)
434
435 popq %rdi // restore state
436 popq %rsi
437 popq %rbp
438 ret
439
440
441 ASM_GLOBAL ASM_PFX(GasketX11GetPointerState)
442 ASM_PFX(GasketX11GetPointerState):
443 pushq %rbp // stack frame is for the debugger
444 movq %rsp, %rbp
445
446 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
447 pushq %rdi
448
449 movq %rcx, %rdi // Swizzle args
450 movq %rdx, %rsi
451
452 call ASM_PFX(X11GetPointerState)
453
454 popq %rdi // restore state
455 popq %rsi
456 popq %rbp
457 ret
458
459
460 ASM_GLOBAL ASM_PFX(GasketX11GraphicsWindowOpen)
461 ASM_PFX(GasketX11GraphicsWindowOpen):
462 pushq %rbp // stack frame is for the debugger
463 movq %rsp, %rbp
464
465 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
466 pushq %rdi
467
468 movq %rcx, %rdi // Swizzle args
469
470 call ASM_PFX(X11GraphicsWindowOpen)
471
472 popq %rdi // restore state
473 popq %rsi
474 popq %rbp
475 ret
476
477
478 ASM_GLOBAL ASM_PFX(GasketX11GraphicsWindowClose)
479 ASM_PFX(GasketX11GraphicsWindowClose):
480 pushq %rbp // stack frame is for the debugger
481 movq %rsp, %rbp
482
483 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
484 pushq %rdi
485
486 movq %rcx, %rdi // Swizzle args
487 movq %r9, %rcx
488
489 call ASM_PFX(X11GraphicsWindowClose)
490
491 popq %rdi // restore state
492 popq %rsi
493 popq %rbp
494 ret
495
496
497 // Pthreads
498
499 ASM_GLOBAL ASM_PFX(GasketPthreadMutexLock)
500 ASM_PFX(GasketPthreadMutexLock):
501 pushq %rbp // stack frame is for the debugger
502 movq %rsp, %rbp
503
504 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
505 pushq %rdi
506
507 movq %rcx, %rdi // Swizzle args
508
509 call ASM_PFX(PthreadMutexLock)
510
511 popq %rdi // restore state
512 popq %rsi
513 popq %rbp
514 ret
515
516
517 ASM_GLOBAL ASM_PFX(GasketPthreadMutexUnLock)
518 ASM_PFX(GasketPthreadMutexUnLock):
519 pushq %rbp // stack frame is for the debugger
520 movq %rsp, %rbp
521
522 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
523 pushq %rdi
524
525 movq %rcx, %rdi // Swizzle args
526
527 call ASM_PFX(PthreadMutexUnLock)
528
529 popq %rdi // restore state
530 popq %rsi
531 popq %rbp
532 ret
533
534 ASM_GLOBAL ASM_PFX(GasketPthreadMutexTryLock)
535 ASM_PFX(GasketPthreadMutexTryLock):
536 pushq %rbp // stack frame is for the debugger
537 movq %rsp, %rbp
538
539 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
540 pushq %rdi
541
542 movq %rcx, %rdi // Swizzle args
543
544 call ASM_PFX(PthreadMutexTryLock)
545
546 popq %rdi // restore state
547 popq %rsi
548 popq %rbp
549 ret
550
551 ASM_GLOBAL ASM_PFX(GasketPthreadMutexInit)
552 ASM_PFX(GasketPthreadMutexInit):
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
560 call ASM_PFX(PthreadMutexInit)
561
562 popq %rdi // restore state
563 popq %rsi
564 popq %rbp
565 ret
566
567
568
569 ASM_GLOBAL ASM_PFX(GasketPthreadMutexDestroy)
570 ASM_PFX(GasketPthreadMutexDestroy):
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
579 call ASM_PFX(PthreadMutexDestroy)
580
581 popq %rdi // restore state
582 popq %rsi
583 popq %rbp
584 ret
585
586
587 ASM_GLOBAL ASM_PFX(GasketPthreadCreate)
588 ASM_PFX(GasketPthreadCreate):
589 pushq %rbp // stack frame is for the debugger
590 movq %rsp, %rbp
591
592 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
593 pushq %rdi
594
595 movq %rcx, %rdi // Swizzle args
596 movq %rdx, %rsi
597 movq %r8, %rdx
598 movq %r9, %rcx
599
600 call ASM_PFX(PthreadCreate)
601
602 popq %rdi // restore state
603 popq %rsi
604 popq %rbp
605 ret
606
607
608 ASM_GLOBAL ASM_PFX(GasketPthreadExit)
609 ASM_PFX(GasketPthreadExit):
610 pushq %rbp // stack frame is for the debugger
611 movq %rsp, %rbp
612
613 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
614 pushq %rdi
615
616 movq %rcx, %rdi // Swizzle args
617
618 call ASM_PFX(PthreadExit)
619
620 popq %rdi // restore state
621 popq %rsi
622 popq %rbp
623 ret
624
625
626
627 ASM_GLOBAL ASM_PFX(GasketPthreadSelf)
628 ASM_PFX(GasketPthreadSelf):
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
636 call ASM_PFX(PthreadSelf)
637
638 popq %rdi // restore state
639 popq %rsi
640 popq %rbp
641 ret
642
643
644 ASM_GLOBAL ASM_PFX(GasketPthreadOpen)
645 ASM_PFX(GasketPthreadOpen):
646 pushq %rbp // stack frame is for the debugger
647 movq %rsp, %rbp
648
649 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
650 pushq %rdi
651
652 movq %rcx, %rdi // Swizzle args
653
654 call ASM_PFX(PthreadOpen)
655
656 popq %rdi // restore state
657 popq %rsi
658 popq %rbp
659 ret
660
661
662 ASM_GLOBAL ASM_PFX(GasketPthreadClose)
663 ASM_PFX(GasketPthreadClose):
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(PthreadClose)
673
674 popq %rdi // restore state
675 popq %rsi
676 popq %rbp
677 ret
678
679
680
681
682 //
683 // UNIX ABI to EFI ABI call
684 //
685 // UINTN
686 // ReverseGasketUint64 (
687 // void *Api,
688 // UINTN Arg1
689 // );
690 ASM_GLOBAL ASM_PFX(ReverseGasketUint64)
691 ASM_PFX(ReverseGasketUint64):
692 pushq %rbp // stack frame is for the debugger
693 movq %rsp, %rbp
694
695 movq %rdi, %rax // Swizzle args
696 movq %rsi, %rcx
697
698 subq $32, %rsp // 32-byte shadow space
699 call *%rax
700 addq $32, %rsp
701
702 popq %rbp
703 ret
704
705 //
706 // UNIX ABI to EFI ABI call
707 //
708 // UINTN
709 // ReverseGasketUint64Uint64 (
710 // void *Api,
711 // UINTN Arg1
712 // UINTN Arg2
713 // );
714 ASM_GLOBAL ASM_PFX(ReverseGasketUint64Uint64)
715 ASM_PFX(ReverseGasketUint64Uint64):
716 pushq %rbp // stack frame is for the debugger
717 movq %rsp, %rbp
718
719 movq %rdi, %rax // Swizzle args
720 movq %rsi, %rcx
721
722 subq $32, %rsp // 32-byte shadow space
723 call *%rax
724 addq $32, %rsp
725
726 popq %rbp
727 ret
728
729
730 ASM_GLOBAL ASM_PFX(GasketSecUnixPeiAutoScan)
731 ASM_PFX(GasketSecUnixPeiAutoScan):
732 pushq %rbp // stack frame is for the debugger
733 movq %rsp, %rbp
734
735 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
736 pushq %rdi
737
738 movq %rcx, %rdi // Swizzle args
739 movq %rdx, %rsi
740 movq %r8, %rdx
741
742 call ASM_PFX(SecUnixPeiAutoScan)
743
744 popq %rdi // restore state
745 popq %rsi
746 popq %rbp
747 ret
748
749
750 ASM_GLOBAL ASM_PFX(GasketSecUnixFdAddress)
751 ASM_PFX(GasketSecUnixFdAddress):
752 pushq %rbp // stack frame is for the debugger
753 movq %rsp, %rbp
754
755 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
756 pushq %rdi
757
758 movq %rcx, %rdi // Swizzle args
759 movq %rdx, %rsi
760 movq %r8, %rdx
761 movq %r9, %rcx
762
763 call ASM_PFX(SecUnixFdAddress)
764
765 popq %rdi // restore state
766 popq %rsi
767 popq %rbp
768 ret
769
770
771 // EmuIoThunk SimpleFileSystem
772
773 ASM_GLOBAL ASM_PFX(GasketPosixOpenVolume)
774 ASM_PFX(GasketPosixOpenVolume):
775 pushq %rbp // stack frame is for the debugger
776 movq %rsp, %rbp
777
778 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
779 pushq %rdi
780
781 movq %rcx, %rdi // Swizzle args
782 movq %rdx, %rsi
783 movq %r8, %rdx
784 movq %r9, %rcx
785
786 call ASM_PFX(PosixOpenVolume)
787
788 popq %rdi // restore state
789 popq %rsi
790 popq %rbp
791 ret
792
793
794 ASM_GLOBAL ASM_PFX(GasketPosixFileOpen)
795 ASM_PFX(GasketPosixFileOpen):
796 pushq %rbp // stack frame is for the debugger
797 movq %rsp, %rbp
798
799 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
800 pushq %rdi
801
802 movq %rcx, %rdi // Swizzle args
803 movq %rdx, %rsi
804 movq %r8, %rdx
805 movq %r9, %rcx
806 movq 0x30(%rbp), %r8
807
808 call ASM_PFX(PosixFileOpen)
809
810 popq %rdi // restore state
811 popq %rsi
812 popq %rbp
813 ret
814
815
816 ASM_GLOBAL ASM_PFX(GasketPosixFileCLose)
817 ASM_PFX(GasketPosixFileCLose):
818 pushq %rbp // stack frame is for the debugger
819 movq %rsp, %rbp
820
821 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
822 pushq %rdi
823
824 movq %rcx, %rdi // Swizzle args
825
826 call ASM_PFX(PosixFileCLose)
827
828 popq %rdi // restore state
829 popq %rsi
830 popq %rbp
831 ret
832
833
834 ASM_GLOBAL ASM_PFX(GasketPosixFileDelete)
835 ASM_PFX(GasketPosixFileDelete):
836 pushq %rbp // stack frame is for the debugger
837 movq %rsp, %rbp
838
839 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
840 pushq %rdi
841
842 movq %rcx, %rdi // Swizzle args
843
844 call ASM_PFX(PosixFileDelete)
845
846 popq %rdi // restore state
847 popq %rsi
848 popq %rbp
849 ret
850
851
852 ASM_GLOBAL ASM_PFX(GasketPosixFileRead)
853 ASM_PFX(GasketPosixFileRead):
854 pushq %rbp // stack frame is for the debugger
855 movq %rsp, %rbp
856
857 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
858 pushq %rdi
859
860 movq %rcx, %rdi // Swizzle args
861 movq %rdx, %rsi
862 movq %r8, %rdx
863
864 call ASM_PFX(PosixFileRead)
865
866 popq %rdi // restore state
867 popq %rsi
868 popq %rbp
869 ret
870
871
872 ASM_GLOBAL ASM_PFX(GasketPosixFileWrite)
873 ASM_PFX(GasketPosixFileWrite):
874 pushq %rbp // stack frame is for the debugger
875 movq %rsp, %rbp
876
877 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
878 pushq %rdi
879
880 movq %rcx, %rdi // Swizzle args
881 movq %rdx, %rsi
882 movq %r8, %rdx
883
884 call ASM_PFX(PosixFileWrite)
885
886 popq %rdi // restore state
887 popq %rsi
888 popq %rbp
889 ret
890
891
892 ASM_GLOBAL ASM_PFX(GasketPosixFileSetPossition)
893 ASM_PFX(GasketPosixFileSetPossition):
894 pushq %rbp // stack frame is for the debugger
895 movq %rsp, %rbp
896
897 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
898 pushq %rdi
899
900 movq %rcx, %rdi // Swizzle args
901 movq %rdx, %rsi
902
903 call ASM_PFX(PosixFileSetPossition)
904
905 popq %rdi // restore state
906 popq %rsi
907 popq %rbp
908 ret
909
910
911 ASM_GLOBAL ASM_PFX(GasketPosixFileGetPossition)
912 ASM_PFX(GasketPosixFileGetPossition):
913 pushq %rbp // stack frame is for the debugger
914 movq %rsp, %rbp
915
916 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
917 pushq %rdi
918
919 movq %rcx, %rdi // Swizzle args
920 movq %rdx, %rsi
921
922 call ASM_PFX(PosixFileGetPossition)
923
924 popq %rdi // restore state
925 popq %rsi
926 popq %rbp
927 ret
928
929
930 ASM_GLOBAL ASM_PFX(GasketPosixFileGetInfo)
931 ASM_PFX(GasketPosixFileGetInfo):
932 pushq %rbp // stack frame is for the debugger
933 movq %rsp, %rbp
934
935 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
936 pushq %rdi
937
938 movq %rcx, %rdi // Swizzle args
939 movq %rdx, %rsi
940 movq %r8, %rdx
941 movq %r9, %rcx
942
943 call ASM_PFX(PosixFileGetInfo)
944
945 popq %rdi // restore state
946 popq %rsi
947 popq %rbp
948 ret
949
950
951 ASM_GLOBAL ASM_PFX(GasketPosixFileSetInfo)
952 ASM_PFX(GasketPosixFileSetInfo):
953 pushq %rbp // stack frame is for the debugger
954 movq %rsp, %rbp
955
956 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
957 pushq %rdi
958
959 movq %rcx, %rdi // Swizzle args
960 movq %rdx, %rsi
961 movq %r8, %rdx
962 movq %r9, %rcx
963
964 call ASM_PFX(PosixFileSetInfo)
965
966 popq %rdi // restore state
967 popq %rsi
968 popq %rbp
969 ret
970
971
972 ASM_GLOBAL ASM_PFX(GasketPosixFileFlush)
973 ASM_PFX(GasketPosixFileFlush):
974 pushq %rbp // stack frame is for the debugger
975 movq %rsp, %rbp
976
977 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
978 pushq %rdi
979
980 movq %rcx, %rdi // Swizzle args
981
982 call ASM_PFX(PosixFileFlush)
983
984 popq %rdi // restore state
985 popq %rsi
986 popq %rbp
987 ret
988
989
990 ASM_GLOBAL ASM_PFX(GasketPosixFileSystmeThunkOpen)
991 ASM_PFX(GasketPosixFileSystmeThunkOpen):
992 pushq %rbp // stack frame is for the debugger
993 movq %rsp, %rbp
994
995 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
996 pushq %rdi
997
998 movq %rcx, %rdi // Swizzle args
999
1000 call ASM_PFX(PosixFileSystmeThunkOpen)
1001
1002 popq %rdi // restore state
1003 popq %rsi
1004 popq %rbp
1005 ret
1006
1007
1008 ASM_GLOBAL ASM_PFX(GasketPosixFileSystmeThunkClose)
1009 ASM_PFX(GasketPosixFileSystmeThunkClose):
1010 pushq %rbp // stack frame is for the debugger
1011 movq %rsp, %rbp
1012
1013 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1014 pushq %rdi
1015
1016 movq %rcx, %rdi // Swizzle args
1017
1018 call ASM_PFX(PosixFileSystmeThunkClose)
1019
1020 popq %rdi // restore state
1021 popq %rsi
1022 popq %rbp
1023 ret
1024
1025 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoReset)
1026 ASM_PFX(GasketEmuBlockIoReset):
1027 pushq %rbp // stack frame is for the debugger
1028 movq %rsp, %rbp
1029
1030 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1031 pushq %rdi
1032
1033 movq %rcx, %rdi // Swizzle args
1034 movq %rdx, %rsi
1035
1036 call ASM_PFX(EmuBlockIoReset)
1037
1038 popq %rdi // restore state
1039 popq %rsi
1040 popq %rbp
1041 ret
1042
1043
1044 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoReadBlocks)
1045 ASM_PFX(GasketEmuBlockIoReadBlocks):
1046 pushq %rbp // stack frame is for the debugger
1047 movq %rsp, %rbp
1048
1049 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1050 pushq %rdi
1051
1052 movq %rcx, %rdi // Swizzle args
1053 movq %rdx, %rsi
1054 movq %r8, %rdx
1055 movq %r9, %rcx
1056 movq 0x30(%rbp), %r8
1057 movq 0x38(%rbp), %r9
1058
1059 call ASM_PFX(EmuBlockIoReadBlocks)
1060
1061 popq %rdi // restore state
1062 popq %rsi
1063 popq %rbp
1064 ret
1065
1066
1067 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoWriteBlocks)
1068 ASM_PFX(GasketEmuBlockIoWriteBlocks):
1069 pushq %rbp // stack frame is for the debugger
1070 movq %rsp, %rbp
1071
1072 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1073 pushq %rdi
1074
1075 movq %rcx, %rdi // Swizzle args
1076 movq %rdx, %rsi
1077 movq %r8, %rdx
1078 movq %r9, %rcx
1079 movq 0x30(%rbp), %r8
1080 movq 0x38(%rbp), %r9
1081
1082 call ASM_PFX(EmuBlockIoWriteBlocks)
1083
1084 popq %rdi // restore state
1085 popq %rsi
1086 popq %rbp
1087 ret
1088
1089
1090 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoFlushBlocks)
1091 ASM_PFX(GasketEmuBlockIoFlushBlocks):
1092 pushq %rbp // stack frame is for the debugger
1093 movq %rsp, %rbp
1094
1095 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1096 pushq %rdi
1097
1098 movq %rcx, %rdi // Swizzle args
1099 movq %rdx, %rsi
1100
1101 call ASM_PFX(EmuBlockIoFlushBlocks)
1102
1103 popq %rdi // restore state
1104 popq %rsi
1105 popq %rbp
1106 ret
1107
1108
1109 ASM_GLOBAL ASM_PFX(GasketEmuBlockIoCreateMapping)
1110 ASM_PFX(GasketEmuBlockIoCreateMapping):
1111 pushq %rbp // stack frame is for the debugger
1112 movq %rsp, %rbp
1113
1114 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1115 pushq %rdi
1116
1117 movq %rcx, %rdi // Swizzle args
1118 movq %rdx, %rsi
1119
1120 call ASM_PFX(EmuBlockIoCreateMapping)
1121
1122 popq %rdi // restore state
1123 popq %rsi
1124 popq %rbp
1125 ret
1126
1127
1128 ASM_GLOBAL ASM_PFX(GasketBlockIoThunkOpen)
1129 ASM_PFX(GasketBlockIoThunkOpen):
1130 pushq %rbp // stack frame is for the debugger
1131 movq %rsp, %rbp
1132
1133 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1134 pushq %rdi
1135
1136 movq %rcx, %rdi // Swizzle args
1137
1138 call ASM_PFX(EmuBlockIoThunkOpen)
1139
1140 popq %rdi // restore state
1141 popq %rsi
1142 popq %rbp
1143 ret
1144
1145
1146 ASM_GLOBAL ASM_PFX(GasketBlockIoThunkClose)
1147 ASM_PFX(GasketBlockIoThunkClose):
1148 pushq %rbp // stack frame is for the debugger
1149 movq %rsp, %rbp
1150
1151 pushq %rsi // %rsi & %rdi are volatile in Unix and callee-save in EFI ABI
1152 pushq %rdi
1153
1154 movq %rcx, %rdi // Swizzle args
1155
1156 call ASM_PFX(EmuBlockIoThunkClose)
1157
1158 popq %rdi // restore state
1159 popq %rsi
1160 popq %rbp
1161 ret
1162
1163
1164