Verification ============================================================================== 1. Rust demangler demonstration (llvm-cxxfilt 21.1.4 -n; Python legacy demangler as cross-check) [dwritecore161] _ZN3std3sys7windows6compat16INIT_TABLE_ENTRY17hef0e2589c329e7bbE llvm-cxxfilt : std::sys::windows::compat::INIT_TABLE_ENTRY::hef0e2589c329e7bb python-legacy: std::sys::windows::compat::INIT_TABLE_ENTRY (agree after hash strip) [dwritecore161] _ZN3std3sys7windows16thread_local_key17p_thread_callback17hbbfd85342a7b44cdE llvm-cxxfilt : std::sys::windows::thread_local_key::p_thread_callback::hbbfd85342a7b44cd python-legacy: std::sys::windows::thread_local_key::p_thread_callback (agree after hash strip) DWriteCore has only 2 Rust-mangled publics in total (both PDBs); all other Rust functions are LTO-internalized and appear as S_LPROC32 records already in rustc's readable MSVC debuginfo form. Three such names from 2.1.1 module 0: alloc::raw_vec::finish_grow -> crate root: alloc alloc::raw_vec::handle_error -> crate root: alloc alloc::alloc::handle_alloc_error -> crate root: alloc Third mangled sample (v0 scheme) from sudo.pdb: _RNvNvMs_Cs3K3uRhG648Z_11sudo_eventsNtB6_10SudoEvents17cmd_builtin_found14EVENT_METADATA llvm-cxxfilt : ::cmd_builtin_found::EVENT_METADATA -> crate root: sudo_events Synthetic legacy check for the python demangler: _ZN66_$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..drop..Drop$GT$4drop17h0123456789abcdefE python-legacy: as core::ops::drop::Drop>::drop -> crate root: alloc llvm-cxxfilt : _$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..drop..Drop$GT$::drop::h0123456789abcdef 2. Parsed publics count vs grep -c S_PUB32 on the raw dump dwritecore161 parsed= 6479 S_PUB32 lines in raw dump= 6479 OK dwritecore211 parsed= 8424 S_PUB32 lines in raw dump= 8424 OK dwrite parsed= 8313 S_PUB32 lines in raw dump= 8313 OK sudo parsed= 642 S_PUB32 lines in raw dump= 642 OK udiapi parsed= 1368 S_PUB32 lines in raw dump= 1368 OK cloudrecovery parsed= 1442 S_PUB32 lines in raw dump= 1442 OK narrator parsed= 8077 S_PUB32 lines in raw dump= 8077 OK srh parsed= 40638 S_PUB32 lines in raw dump= 40638 OK 3. Sanity: font_face present in both DWriteCore PDBs. The region/rgn matches below are DWriteCore's own C++ font-region classes, not the kernel driver's Rust rgncore crate. dwritecore161: names containing 'font_face' = 11; e.g. api_impl::font_face::GetCoreFontFace dwritecore161: names matching /region|rgn/i = 485; e.g. ['??$CopySublistToEnd@UFeature@FontFeatureCoverageRegionBuilder@OpenTypeFont@DWriteCore@@@OpenTypeFont@DWriteCore@@YAXAEAV?$vector@UFeature@FontFeatureCoverageRegionBuilder@OpenTypeFont@DWriteCore@@V?$allocator@UFeature@FontFeatureCoverageRegionBuilder@OpenTypeFont@DWriteCore@@@std@@@std@@AEAIII@Z', '??$_Erase_tree@V?$allocator@U?$_Tree_node@U?$pair@$$CBGV?$CoalescedRegionPtr@V?$ArrayRegion@UNameDictionaryEntry@FontApi@DWriteCore@@@CacheHelpers@DWriteCore@@@CacheHelpers@DWriteCore@@@std@@PEAX@std@@@std@@@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBGV?$CoalescedRegionPtr@V?$ArrayRegion@UNameDictionaryEntry@FontApi@DWriteCore@@@CacheHelpers@DWriteCore@@@CacheHelpers@DWriteCore@@@std@@@std@@@std@@QEAAXAEAV?$allocator@U?$_Tree_node@U?$pair@$$CBGV?$CoalescedRegionPtr@V?$ArrayRegion@UNameDictionaryEntry@FontApi@DWriteCore@@@CacheHelpers@DWriteCore@@@CacheHelpers@DWriteCore@@@std@@PEAX@std@@@1@PEAU?$_Tree_node@U?$pair@$$CBGV?$CoalescedRegionPtr@V?$ArrayRegion@UNameDictionaryEntry@FontApi@DWriteCore@@@CacheHelpers@DWriteCore@@@CacheHelpers@DWriteCore@@@std@@PEAX@1@@Z', '??$GetArrayAt@UHashTableEntry@KerningPairsRegion@OpenTypeFont@DWriteCore@@@?$MemoryWriter@VKerningPairsRegion@OpenTypeFont@DWriteCore@@@CacheHelpers@DWriteCore@@QEAA?AV?$span@UHashTableEntry@KerningPairsRegion@OpenTypeFont@DWriteCore@@$0?0@std@@V?$BasedPtr@VKerningPairsRegion@OpenTypeFont@DWriteCore@@UHashTableEntry@123@@12@_K@Z'] dwritecore211: names containing 'font_face' = 3; e.g. dwritecore_defs::font_face::IFontFace::get_glyph_advances dwritecore211: names matching /region|rgn/i = 412; e.g. ['??$CopySublistToEnd@UFeature@FontFeatureCoverageRegionBuilder@OpenTypeFont@DWriteCore@@@OpenTypeFont@DWriteCore@@YAXAEAV?$vector@UFeature@FontFeatureCoverageRegionBuilder@OpenTypeFont@DWriteCore@@V?$allocator@UFeature@FontFeatureCoverageRegionBuilder@OpenTypeFont@DWriteCore@@@std@@@std@@AEAIII@Z', '??$_Erase_tree@V?$allocator@U?$_Tree_node@U?$pair@$$CBGV?$CoalescedRegionPtr@V?$ArrayRegion@UNameDictionaryEntry@FontApi@DWriteCore@@@CacheHelpers@DWriteCore@@@CacheHelpers@DWriteCore@@@std@@PEAX@std@@@std@@@?$_Tree_val@U?$_Tree_simple_types@U?$pair@$$CBGV?$CoalescedRegionPtr@V?$ArrayRegion@UNameDictionaryEntry@FontApi@DWriteCore@@@CacheHelpers@DWriteCore@@@CacheHelpers@DWriteCore@@@std@@@std@@@std@@QEAAXAEAV?$allocator@U?$_Tree_node@U?$pair@$$CBGV?$CoalescedRegionPtr@V?$ArrayRegion@UNameDictionaryEntry@FontApi@DWriteCore@@@CacheHelpers@DWriteCore@@@CacheHelpers@DWriteCore@@@std@@PEAX@std@@@1@PEAU?$_Tree_node@U?$pair@$$CBGV?$CoalescedRegionPtr@V?$ArrayRegion@UNameDictionaryEntry@FontApi@DWriteCore@@@CacheHelpers@DWriteCore@@@CacheHelpers@DWriteCore@@@std@@PEAX@1@@Z', '??$_Uninitialized_value_construct_n@V?$allocator@UGlyphGroup@GlyphDependencyRegionBuilder@OpenTypeFont@DWriteCore@@@std@@@std@@YAPEAUGlyphGroup@GlyphDependencyRegionBuilder@OpenTypeFont@DWriteCore@@PEAU1234@_KAEAV?$allocator@UGlyphGroup@GlyphDependencyRegionBuilder@OpenTypeFont@DWriteCore@@@0@@Z'] dwrite: names containing 'font_face' = 0; e.g. - dwrite: names matching /region|rgn/i = 656; e.g. ['?WriteInnerRegion@MemoryWriterImpl@@IEAAIPEBE_KI@Z', '??_C@_0EJ@OHAGEFJJ@inconsistent?5region?5indices?5det@', '??$GetMatchingAxisValueRecords@V?$CheckedPtr@$$CBUAxis@FontStyleAttributesRegion@@V?$FailAsExceptionPolicy@VInvalidCacheDataException@@@@I@@V?$ScopedArrayWithFixedBuffer@UMatchingAxisValueRecord@FontStyleAttributes@@@@@@YAXV?$array_ref@$$CBUDWRITE_FONT_AXIS_VALUE_FIXED@@@@V?$CheckedPtr@$$CBUAxis@FontStyleAttributesRegion@@V?$FailAsExceptionPolicy@VInvalidCacheDataException@@@@I@@AEAV?$ScopedArrayWithFixedBuffer@UMatchingAxisValueRecord@FontStyleAttributes@@@@@Z'] 4. Module attribution cross-check: for every S_*PROC32 record, the section contribution covering its address must belong to the same module (checks that seccontrib 'mod' is 0-based like the module list). dwritecore161 procs checked= 3600 module mismatches= 108 by class (proc's module -> contributing module): native->native: 104, crt->native: 4 dwritecore211 procs checked= 3469 module mismatches= 106 by class (proc's module -> contributing module): native->native: 102, crt->native: 4 dwrite procs checked= 4567 module mismatches= 760 by class (proc's module -> contributing module): native->native: 760 sudo procs checked= 819 module mismatches= 0 by class (proc's module -> contributing module): - udiapi procs checked= 528 module mismatches= 9 by class (proc's module -> contributing module): crt->crt: 9 cloudrecovery procs checked= 559 module mismatches= 8 by class (proc's module -> contributing module): crt->crt: 8 narrator procs checked= 3316 module mismatches= 1557 by class (proc's module -> contributing module): native->native: 1557 srh procs checked= 38811 module mismatches= 23363 by class (proc's module -> contributing module): native->native: 23363 Mismatches are ICF/COMDAT folding and LTCG placement; none crosses the Rust/C++ line, so language attribution is unaffected. 5. Mangling vs object-file language cross-check on publics (MSVC-mangled names should never land in rustc objects, Rust-mangled names never in C++ objects; identical-code folding can legitimately merge a few). dwritecore161 msvc-in-rust-obj=6 rust-in-cpp-obj=0 publics-unattributed-by-address=9 msvc name in rust object: ?__ExceptionPtrToBool@@YA_NPEBX@Z msvc name in rust object: ?Length@CacheBuffer@ShapingElementBuilder@OpenTypeShaping@DWriteCore@@UEAAHXZ msvc name in rust object: ?GetBindingLayer@CacheContextL1@FontCacheL1@DWriteCore@@UEBAPEAUIBindingLayer@3@XZ msvc name in rust object: ?GetCount@LocalizedStrings@FontApi@DWriteCore@@UEBAIXZ msvc name in rust object: ?GetItemData@?$ElementEntry@_NUIDWriteLookupCacheOutlineEntry@@@DWriteGlyphLookupCache@ApiImpl@DWriteCore@@UEAAPEAXXZ dwritecore211 msvc-in-rust-obj=3 rust-in-cpp-obj=0 publics-unattributed-by-address=9 msvc name in rust object: ?__ExceptionPtrToBool@@YA_NPEBX@Z msvc name in rust object: ?GetLoaderId@FontFileReference@FontApi@DWriteCore@@UEBAIXZ msvc name in rust object: ?GetInstanceCount@FontResource@OpenTypeFont@DWriteCore@@UEBAIXZ dwrite msvc-in-rust-obj=0 rust-in-cpp-obj=0 publics-unattributed-by-address=9 sudo msvc-in-rust-obj=0 rust-in-cpp-obj=0 publics-unattributed-by-address=9 udiapi msvc-in-rust-obj=0 rust-in-cpp-obj=0 publics-unattributed-by-address=0 cloudrecovery msvc-in-rust-obj=0 rust-in-cpp-obj=0 publics-unattributed-by-address=9 narrator msvc-in-rust-obj=0 rust-in-cpp-obj=0 publics-unattributed-by-address=9 srh msvc-in-rust-obj=0 rust-in-cpp-obj=0 publics-unattributed-by-address=9 6. Crate-root parser garbage check (roots containing '$', '<', hex-only, or empty): none found 7. Publics attributed by address to rustc objects but not Rust-mangled (the extern "C" bridge surface), per PDB: dwritecore161 total=188 functions=87 data=101 fn MsShiftJis_CharToUnicode fn GetCaseFoldedCharacter fn Rust_GetCoreFontFallback fn ?__ExceptionPtrToBool@@YA_NPEBX@Z fn drop_fvar_key_values_rust fn GetOrientationClass fn Rust_CreateLastResortLoader fn rust_truetype_new_font_scaler fn Rust_GetEnUsLanguageTag fn rust_truetype_get_outline fn Rust_CreateTextLayoutFactory fn IsCombiningChar fn Rust_CreateFontFallbackBuilder fn IsBidiMirrored fn GetLineBreakClass fn CreateNumberSubstitution_Rust fn Rust_ParseLanguageTag_Utf8 fn BumpPool_drop fn ?Length@CacheBuffer@ShapingElementBuilder@OpenTypeShaping@DWriteCore@@UEAAHXZ fn delete_variable_index_decoder_rust fn MsWansung_CharToUnicode fn MsBig5_CharToUnicode fn Rust_MeasureLanguageTag fn GetScriptPropertiesChecked fn BumpPool_new fn GetScript fn gvar_get_glyphs_byte_range_rust fn variable_index_decoder_decode_index_rust fn Arc_FontFallback_drop fn ComputeGrayscaleAlphaValues fn IsVariationSelector fn GetCharacterComplexity fn Rust_Layout_CreateInlineObject fn rust_truetype_rasterizer_get_bitmap fn variable_index_decoder_is_valid_rust fn Rust_MsBig5_StringToUnicode fn Rust_MsPrc_StringToUnicode fn rust_truetype_get_design_units_per_em fn Rust_GetMatchPenalty fn Rust_TagToLcid fn ?GetBindingLayer@CacheContextL1@FontCacheL1@DWriteCore@@UEBAPEAUIBindingLayer@3@XZ fn GetMirrorCharacter fn Rust_CreateTextFormat fn delete_item_variation_interpolator_rust fn IsWhiteSpace fn rust_truetype_rasterizer_new_transform fn Rust_GetOpenTypeLanguageTag fn get_fvar_axis_info_rust fn ?GetCount@LocalizedStrings@FontApi@DWriteCore@@UEBAIXZ fn GetGeneralCategory fn ?GetItemData@?$ElementEntry@_NUIDWriteLookupCacheOutlineEntry@@@DWriteGlyphLookupCache@ApiImpl@DWriteCore@@UEAAPEAXXZ fn drop_fvar_axis_info_rust fn Rust_MsWansung_StringToUnicode fn ShapingGetGlyphPositions fn MsPrc_CharToUnicode fn DownSample2x2 fn DetermineSimpleGlyphsFromTableRust fn drop_fixed_vec_rust fn rust_truetype_rasterizer_get_metrics fn item_variation_interpolator_setup_region_scalars_rust dwritecore211 total=199 functions=79 data=120 fn MsShiftJis_CharToUnicode fn GetCaseFoldedCharacter fn ?__ExceptionPtrToBool@@YA_NPEBX@Z fn drop_fvar_key_values_rust fn GetOrientationClass fn ?GetLoaderId@FontFileReference@FontApi@DWriteCore@@UEBAIXZ fn Rust_CreateLastResortLoader fn rust_truetype_new_font_scaler fn Rust_GetEnUsLanguageTag fn rust_truetype_get_outline fn Rust_CreateTextLayoutFactory fn IsCombiningChar fn Rust_CreateFontFallbackBuilder fn IsBidiMirrored fn GetLineBreakClass fn CreateNumberSubstitution_Rust fn Rust_ParseLanguageTag_Utf8 fn delete_variable_index_decoder_rust fn MsWansung_CharToUnicode fn MsBig5_CharToUnicode fn Rust_MeasureLanguageTag fn GetScriptPropertiesChecked fn GetScript fn ?GetInstanceCount@FontResource@OpenTypeFont@DWriteCore@@UEBAIXZ fn gvar_get_glyphs_byte_range_rust fn variable_index_decoder_decode_index_rust fn Arc_FontFallback_drop fn ComputeGrayscaleAlphaValues fn IsVariationSelector fn GetCharacterComplexity fn Rust_Layout_CreateInlineObject fn rust_truetype_rasterizer_get_bitmap fn variable_index_decoder_is_valid_rust fn Rust_MsBig5_StringToUnicode fn Rust_MsPrc_StringToUnicode fn rust_truetype_get_design_units_per_em fn Rust_GetMatchPenalty fn Rust_TagToLcid fn GetMirrorCharacter fn Rust_CreateTextFormat fn delete_item_variation_interpolator_rust fn IsWhiteSpace fn rust_truetype_rasterizer_new_transform fn Rust_GetOpenTypeLanguageTag fn get_fvar_axis_info_rust fn GetGeneralCategory fn drop_fvar_axis_info_rust fn Rust_MsWansung_StringToUnicode fn MsPrc_CharToUnicode fn DownSample2x2 fn DetermineSimpleGlyphsFromTableRust fn drop_fixed_vec_rust fn rust_truetype_rasterizer_get_metrics fn item_variation_interpolator_setup_region_scalars_rust fn GetGlyphDownloadBlock fn Rust_ParseLanguageTag_Utf16 fn IsMultiByteChar fn gvar_get_header_and_offsets_size_rust fn Rust_CreateTextAnalyzer fn Rust_LcidToTag dwrite total=0 functions=0 data=0 sudo total=34 functions=8 data=26 fn main fn __acrt_initialize fn server_DoElevationRequest fn __acrt_uninitialize fn __scrt_stub_for_acrt_initialize fn _should_initialize_environment fn server_Shutdown fn __scrt_stub_for_acrt_uninitialize udiapi total=52 functions=15 data=37 fn __udivti3 fn CreateOfflineDownloaderSession fn InPlaceCreateUpdate fn DllCanUnloadNow fn GetDeviceInfo fn DllMain fn GetOfflineDeviceInfo fn CreateDownloaderSession fn DllGetActivationFactory fn LoadUpdate fn IsHotpatchRecipeValid fn CleanDownloaderSession fn CreateUpdate fn CleanUpdate fn .weak.__udivti3.default cloudrecovery total=75 functions=5 data=70 fn DllGetClassObject fn __floattidf fn DllMain fn .weak.__floattidf.default fn CreateDeviceBundle narrator total=0 functions=0 data=0 srh total=0 functions=0 data=0