diff --git a/src/coreclr/gc/datadescriptor/datadescriptor.h b/src/coreclr/gc/datadescriptor/datadescriptor.h index 166d9ada0b9a5e..a52044a40c026f 100644 --- a/src/coreclr/gc/datadescriptor/datadescriptor.h +++ b/src/coreclr/gc/datadescriptor/datadescriptor.h @@ -11,6 +11,9 @@ #include "gchandletableimpl.h" #include "handletablepriv.h" #include "gceventstatus.h" +#ifdef GC_HEAP_CARD_TABLE_IN_VM +#include "gcheaputilities.h" +#endif // GC_HEAP_CARD_TABLE_IN_VM #ifdef SERVER_GC #define GC_NAMESPACE SVR @@ -60,7 +63,11 @@ struct cdac_data #endif // BACKGROUND_GC GC_HEAP_FIELD(AllocAllocated, alloc_allocated) GC_HEAP_FIELD(EphemeralHeapSegment, ephemeral_heap_segment) +#ifdef GC_HEAP_CARD_TABLE_IN_VM + static constexpr decltype(&g_card_table) CardTable = &g_card_table; +#else // !GC_HEAP_CARD_TABLE_IN_VM GC_HEAP_FIELD(CardTable, card_table) +#endif // !GC_HEAP_CARD_TABLE_IN_VM GC_HEAP_FIELD(FinalizeQueue, finalize_queue) GC_HEAP_FIELD(GenerationTable, generation_table) #if !defined(USE_REGIONS) && defined(BACKGROUND_GC) diff --git a/src/coreclr/vm/datadescriptor/CMakeLists.txt b/src/coreclr/vm/datadescriptor/CMakeLists.txt index c14d4d7cb6c46d..e5bdb7807e52d9 100644 --- a/src/coreclr/vm/datadescriptor/CMakeLists.txt +++ b/src/coreclr/vm/datadescriptor/CMakeLists.txt @@ -26,6 +26,7 @@ add_library(gc_wks_descriptor_interface INTERFACE) target_include_directories(gc_wks_descriptor_interface INTERFACE ${GC_DESCRIPTOR_DIR} ${CLR_DIR}/gc) +target_compile_definitions(gc_wks_descriptor_interface INTERFACE -DGC_HEAP_CARD_TABLE_IN_VM) add_dependencies(gc_wks_descriptor_interface cee_wks_core) generate_data_descriptors( LIBRARY_NAME gc_wks_descriptor diff --git a/src/native/managed/cdac/tests/DumpTests/WorkstationGCDumpTests.cs b/src/native/managed/cdac/tests/DumpTests/WorkstationGCDumpTests.cs index 733263f7001b21..dcc183df9a94ca 100644 --- a/src/native/managed/cdac/tests/DumpTests/WorkstationGCDumpTests.cs +++ b/src/native/managed/cdac/tests/DumpTests/WorkstationGCDumpTests.cs @@ -78,6 +78,7 @@ public void WorkstationGC_CanGetHeapData(TestConfiguration config) GCHeapData heapData = gcContract.GetHeapData(); Assert.NotNull(heapData.GenerationTable); Assert.True(heapData.GenerationTable.Count > 0, "Expected at least one generation"); + Assert.NotEqual(TargetPointer.Null, heapData.CardTable); } [ConditionalTheory]