# [witchtime] roots for the sdk lift (tools/wtbuild/src/sdklift.rs) on Bayonetta 3's sdk (nnSdk 13.3.2): only names B3's main imports. B2's roots for SDK 3.6.0
# (NVN texture-storage functions and the GM200 HAL by address, nn::mem::NumberLineAllocator) are not carried over: B3's main
# imports no NumberLineAllocator; the NVN ones are found by name below (`nvn`, `vmethod`: no addresses in this file).

# libc the game imports from the sdk: pure
div

# hid pure functions (handles computed from the npad id and style)
_ZN2nn3hid23GetSixAxisSensorHandlesEPNS0_19SixAxisSensorHandleEiRKjNS_4util10BitFlagSetILi32ENS0_12NpadStyleTagEEE
_ZN2nn3hid25GetVibrationDeviceHandlesEPNS0_21VibrationDeviceHandleEiRKjNS_4util10BitFlagSetILi32ENS0_12NpadStyleTagEEE

# [witchtime] pure SDK code B3 imports that the runtime has no handler for
_ZN2nn4util30ConvertStringUtf16NativeToUtf8EPciPKti
_ZN2nn4util30ConvertStringUtf8ToUtf16NativeEPtiPKci
_ZN2nn4util43GetLengthOfConvertedStringUtf16NativeToUtf8EPiPKti
_ZN2nn4lmem13CreateExpHeapEPvmi
_ZN2nn4lmem13FreeToExpHeapEPNS0_6detail8HeapHeadEPv
_ZN2nn4lmem19AllocateFromExpHeapEPNS0_6detail8HeapHeadEm

# [witchtime] reached at boot (static constructors, nnMain's input setup): pure SDK code. The Vibration node constructors
# lock the SDK's node list (host SdkMutexType, b3_imports.c); their svc is the contended-lock path (traps if reached).
_ZN2nn3hid14VibrationMixerC1Ev
_ZN2nn3hid14VibrationMixerD1Ev
_ZN2nn3hid15VibrationPlayerC1Ev
_ZN2nn3hid15VibrationPlayerD1Ev
_ZN2nn3hid15VibrationTarget24SetVibrationDeviceHandleERKNS0_21VibrationDeviceHandleE
_ZN2nn3hid15VibrationTargetC1Ev
_ZN2nn3hid15VibrationTargetD1Ev
_ZN2nn3hid15VibrationWriterC1Ev
_ZN2nn3hid15VibrationWriterD1Ev
_ZN2nn3hid20ControllerSupportArg10SetDefaultEv
_ZN2nn3hid23VibrationNodeConnection13SetModulationERKNS0_19VibrationModulationE
_ZN2nn3hid23VibrationNodeConnectionC1Ev
_ZN2nn3hid23VibrationNodeConnectionD1Ev
_ZN2nn7friends12UserPresence5ClearEv
_ZN2nn2os21SdkRecursiveMutexType10InitializeEv

# [witchtime] NVN texture storage rules (runtime/nvn_sdk.c), by name from the sdk's proc table (tools/wtbuild/src/nvn_procs.rs, `wtbuild nvn-procs`), and the
# GPU memory-kind chooser they end in: NvRmGpuDeviceChooseKind -> NvRmNvgpuDevice +0x30 (the HAL object) -> the GM200 HAL's
# kind method +0x90 and the methods it calls (docs/RE_NOTES.md section 6).
nvn nvnTextureBuilderGetStorageSize
nvn nvnTextureBuilderGetStorageAlignment
nvn nvnTextureBuilderGetStorageClass
nvn nvnTextureBuilderGetRawStorageClass
nvn nvnTextureBuilderGetSparseTileLayout
nvn nvnTextureBuilderGetViewOffset
nvn nvnTextureGetStorageClass
nvn nvnTextureGetRawStorageClass
nvn nvnTextureGetSparseTileLayout
nvn nvnTextureGetStorageSize
nvn nvnTextureGetViewOffset
vmethod N8nvrm_gpu5nvgpu15NvRmNvgpuDeviceE 30 NvRmNvgpuDevice_get_hal
vmethod N8nvrm_gpu33NvRmGpu_HwHalFunctions_GM200_BaseE 90 HalGM200_choose_kind
vmethod N8nvrm_gpu33NvRmGpu_HwHalFunctions_GM200_BaseE a0 HalGM200_vt_a0
vmethod N8nvrm_gpu33NvRmGpu_HwHalFunctions_GM200_BaseE 120 HalGM200_vt_120
vmethod N8nvrm_gpu33NvRmGpu_HwHalFunctions_GM200_BaseE 138 HalGM200_vt_138
vmethod N8nvrm_gpu33NvRmGpu_HwHalFunctions_GM200_BaseE 150 HalGM200_vt_150
vmethod N8nvrm_gpu33NvRmGpu_HwHalFunctions_GM200_BaseE 158 HalGM200_vt_158
vmethod N8nvrm_gpu33NvRmGpu_HwHalFunctions_GM200_BaseE 168 HalGM200_vt_168
vmethod N8nvrm_gpu33NvRmGpu_HwHalFunctions_GM200_BaseE 170 HalGM200_vt_170
vmethod N8nvrm_gpu33NvRmGpu_HwHalFunctions_GM200_BaseE 128 HalGM200_vt_128
vmethod N8nvrm_gpu33NvRmGpu_HwHalFunctions_GM200_BaseE 130 HalGM200_vt_130
vmethod N8nvrm_gpu33NvRmGpu_HwHalFunctions_GM200_BaseE 140 HalGM200_vt_140
vmethod N8nvrm_gpu33NvRmGpu_HwHalFunctions_GM200_BaseE 148 HalGM200_vt_148
vmethod N8nvrm_gpu33NvRmGpu_HwHalFunctions_GM200_BaseE 160 HalGM200_vt_160

# [witchtime] the SDK's own lock (it needs the kernel's thread handles and ArbitrateLock) goes to the runtime's handler
# even when main does not import it: program 1 (the picture book) does not, and its lifted hid code locks one early
cut _ZN2nn2os12SdkMutexType4LockEv
cut _ZN2nn2os12SdkMutexType6UnlockEv

# [witchtime] libc++ that program 1 (the picture book) imports from the sdk (Bayonetta 3 has its own copy): pure code
_ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEmmPKcm
_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc
_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc
_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7replaceEmmPKc
_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSERKS5_
_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_
_ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_mmRKS4_
_ZNSt3__16__sortIRNS_6__lessIjjEEPjEEvT0_S5_T_
