VirtualBox

Changeset 100338 in vbox for trunk/include/iprt


Ignore:
Timestamp:
Jul 2, 2023 10:48:36 PM (21 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
158056
Message:

iprt/asmdefs.mac: IBT endbr64/32 and notrack macros and related changes. bugref:10406 ticketref:21435

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/iprt/asmdefs.mac

    r98103 r100338  
    369369%endmacro
    370370
     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
    371415
    372416;;
     
    608652;;
    609653; 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
    611658 %ifdef RT_ASM_WITH_SEH64_ALT
    612659  SEH64_ALT_START_UNWIND_INFO %1
     
    619666 %endif
    620667.start_of_prologue:
     668 %if %2 == 0
     669        IBT_ENDBRxx
     670 %endif
    621671%endmacro
    622672
    623673;;
    624674; Begins a C callable (DECLASM) procedure.
    625 %macro BEGINPROC 1
    626 BEGINPROC_RAW NAME(%1)
     675%macro BEGINPROC 1-2 0
     676BEGINPROC_RAW NAME(%1), %2
    627677%endmacro
    628678
     
    632682; @param 1  Internal name.
    633683; @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
    635687 %ifdef RT_ASM_WITH_SEH64_ALT
    636688  SEH64_ALT_START_UNWIND_INFO %1
     
    646698 %endif
    647699.start_of_prologue:
     700 %if %3 == 0
     701        IBT_ENDBRxx
     702 %endif
    648703%endmacro
    649704
    650705;;
    651706; 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
     708BEGINPROC_EXPORTED_RAW NAME(%1), %1, %2
    654709%endmacro
    655710
     
    11751230%macro RT_BEGINPROC 1
    11761231 %ifdef IN_RT_STATIC
    1177 BEGINPROC          %1
    1178  %else
    1179 BEGINPROC_EXPORTED %1
     1232BEGINPROC          %1, 0
     1233 %else
     1234BEGINPROC_EXPORTED %1, 0
    11801235 %endif
    11811236%endmacro ; RT_BEGINPROC
     
    12101265%macro RT_NOCRT_BEGINPROC 1
    12111266 %ifdef RT_WITH_NOCRT_ALIASES
    1212 BEGINPROC_EXPORTED RT_NOCRT(%1)
     1267BEGINPROC_EXPORTED RT_NOCRT(%1), 1 ; Do our own IBT_ENDBRxx after aliasing/
    12131268  %ifdef ASM_FORMAT_ELF
    12141269   ; ELF
     
    12291284GLOBALNAME %1
    12301285  %endif
     1286        IBT_ENDBRxx
    12311287 %else  ; !RT_WITH_NOCRT_ALIASES
    1232 BEGINPROC_EXPORTED RT_NOCRT(%1)
     1288BEGINPROC_EXPORTED RT_NOCRT(%1), 0
    12331289 %endif ; !RT_WITH_NOCRT_ALIASES
    12341290%endmacro ; RT_NOCRT_BEGINPROC
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette