Changeset 100338 in vbox for trunk/include/iprt
- Timestamp:
- Jul 2, 2023 10:48:36 PM (21 months ago)
- svn:sync-xref-src-repo-rev:
- 158056
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/asmdefs.mac
r98103 r100338 369 369 %endmacro 370 370 371 ;; 372 ; Macro for generating the endbr32/64 instruction when 373 ; RT_WITH_IBT_BRANCH_PROTECTION is defined. 374 %macro IBT_ENDBRxx 0 375 %ifdef RT_WITH_IBT_BRANCH_PROTECTION 376 %ifdef RT_ARCH_AMD64 377 db 0xf3, 0x0f, 0x1e, 0xfa ; yasm doesn't know about endbr64 378 %elifdef RT_ARCH_X86 379 db 0xf3, 0x0f, 0x1e, 0xfb ; yasm doesn't know about endbr32 380 %else 381 %error "Which arch?" 382 %endif 383 %endif 384 %endmacro 385 386 ;; 387 ; Macro for generating the endbr32/64 instruction when 388 ; RT_WITH_IBT_BRANCH_PROTECTION_WITHOUT_NOTRACK is defined. 389 %macro IBT_ENDBRxx_WITHOUT_NOTRACK 0 390 %ifdef RT_WITH_IBT_BRANCH_PROTECTION_WITHOUT_NOTRACK 391 %ifdef RT_ARCH_AMD64 392 db 0xf3, 0x0f, 0x1e, 0xfa ; yasm doesn't know about endbr64 393 %elifdef RT_ARCH_X86 394 db 0xf3, 0x0f, 0x1e, 0xfb ; yasm doesn't know about endbr32 395 %else 396 %error "Which arch?" 397 %endif 398 %endif 399 %endmacro 400 401 ;; 402 ; Macro for generating a NOTRACK prefix to an indirect jmp or call 403 ; instruction when RT_WITH_IBT_BRANCH_PROTECTION is defined. 404 ; 405 ; @note Carful if mixing with other segment prefixes (should work, but needs 406 ; testing). 407 %macro IBT_NOTRACK 0 408 %ifdef RT_WITH_IBT_BRANCH_PROTECTION 409 %ifndef RT_WITH_IBT_BRANCH_PROTECTION_WITHOUT_NOTRACK 410 db 0x3e ; DS prefix. 411 %endif 412 %endif 413 %endmacro 414 371 415 372 416 ;; … … 608 652 ;; 609 653 ; Begins a procedure, raw version w/o automatic name mangling. 610 %macro BEGINPROC_RAW 1 654 ; @param 1 The (raw) name. 655 ; @param 2 Whether to manually apply IBT_ENDBRxx (1) or 656 ; not (0, default). Optional 657 %macro BEGINPROC_RAW 1-2 0 611 658 %ifdef RT_ASM_WITH_SEH64_ALT 612 659 SEH64_ALT_START_UNWIND_INFO %1 … … 619 666 %endif 620 667 .start_of_prologue: 668 %if %2 == 0 669 IBT_ENDBRxx 670 %endif 621 671 %endmacro 622 672 623 673 ;; 624 674 ; Begins a C callable (DECLASM) procedure. 625 %macro BEGINPROC 1 626 BEGINPROC_RAW NAME(%1) 675 %macro BEGINPROC 1-2 0 676 BEGINPROC_RAW NAME(%1), %2 627 677 %endmacro 628 678 … … 632 682 ; @param 1 Internal name. 633 683 ; @param 2 Exported name. 634 %macro BEGINPROC_EXPORTED_RAW 2 684 ; @param 3 Whether to manually apply IBT_ENDBRxx (1) or 685 ; not (0, default). Optional 686 %macro BEGINPROC_EXPORTED_RAW 2-3 0 635 687 %ifdef RT_ASM_WITH_SEH64_ALT 636 688 SEH64_ALT_START_UNWIND_INFO %1 … … 646 698 %endif 647 699 .start_of_prologue: 700 %if %3 == 0 701 IBT_ENDBRxx 702 %endif 648 703 %endmacro 649 704 650 705 ;; 651 706 ; Begins a C callable (DECLASM) exported procedure. 652 %macro BEGINPROC_EXPORTED 1 653 BEGINPROC_EXPORTED_RAW NAME(%1), %1 707 %macro BEGINPROC_EXPORTED 1-2 0 708 BEGINPROC_EXPORTED_RAW NAME(%1), %1, %2 654 709 %endmacro 655 710 … … 1175 1230 %macro RT_BEGINPROC 1 1176 1231 %ifdef IN_RT_STATIC 1177 BEGINPROC %1 1178 %else 1179 BEGINPROC_EXPORTED %1 1232 BEGINPROC %1, 0 1233 %else 1234 BEGINPROC_EXPORTED %1, 0 1180 1235 %endif 1181 1236 %endmacro ; RT_BEGINPROC … … 1210 1265 %macro RT_NOCRT_BEGINPROC 1 1211 1266 %ifdef RT_WITH_NOCRT_ALIASES 1212 BEGINPROC_EXPORTED RT_NOCRT(%1) 1267 BEGINPROC_EXPORTED RT_NOCRT(%1), 1 ; Do our own IBT_ENDBRxx after aliasing/ 1213 1268 %ifdef ASM_FORMAT_ELF 1214 1269 ; ELF … … 1229 1284 GLOBALNAME %1 1230 1285 %endif 1286 IBT_ENDBRxx 1231 1287 %else ; !RT_WITH_NOCRT_ALIASES 1232 BEGINPROC_EXPORTED RT_NOCRT(%1) 1288 BEGINPROC_EXPORTED RT_NOCRT(%1), 0 1233 1289 %endif ; !RT_WITH_NOCRT_ALIASES 1234 1290 %endmacro ; RT_NOCRT_BEGINPROC
Note:
See TracChangeset
for help on using the changeset viewer.