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