Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/coreclr/dlls/mscoree/coreclr/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -175,12 +175,14 @@ if(TARGET coreclr)
$<TARGET_NAME_IF_EXISTS:coreclrpal>
${CLRJIT_STATIC}
${CLRINTERPRETER_STATIC}
vm_gc_wks
$<TARGET_NAME_IF_EXISTS:vm_gc_svr>
cee_wks_core
cee_wks
${FOUNDATION})
endif()

target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_link_libraries(coreclr_static PUBLIC ${CORECLR_LIBRARIES} ${CORECLR_STATIC_CLRJIT_STATIC} ${CORECLR_STATIC_CLRINTERPRETER_STATIC} vm_gc_wks $<TARGET_NAME_IF_EXISTS:vm_gc_svr> cee_wks_core ${CEE_WKS_STATIC} ${FOUNDATION})
target_compile_definitions(coreclr_static PUBLIC CORECLR_EMBEDDED)

if (CLR_CMAKE_HOST_ANDROID)
Expand Down
57 changes: 51 additions & 6 deletions src/coreclr/gc/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,12 @@ set(GC_SOURCES
gcconfig.cpp
gccommon.cpp
gcscan.cpp
gcsvr.cpp
gcwks.cpp
handletable.cpp
handletablecore.cpp
handletablescan.cpp
objecthandle.cpp
softwarewritewatch.cpp
gchandletable.cpp
gceesvr.cpp
gceewks.cpp
gcload.cpp
gcbridge.cpp
handletablecache.cpp)
Expand Down Expand Up @@ -56,6 +52,7 @@ if (CLR_CMAKE_TARGET_WIN32)
env/gcenv.windows.inl
env/volatile.h
gc.h
gcinternal.h
gcconfig.h
gcbridge.h
gcdesc.h
Expand Down Expand Up @@ -104,14 +101,50 @@ list(APPEND GC_SOURCES ${GC_HEADERS})

convert_to_absolute_path(GC_SOURCES ${GC_SOURCES})

set(GC_WKS_SVR_SOURCES
gcee.cpp
gc.cpp
init.cpp
no_gc.cpp
finalization.cpp
dynamic_tuning.cpp
region_free_list.cpp
region_allocator.cpp
memory.cpp
sweep.cpp
collect.cpp
diagnostics.cpp
dynamic_heap_count.cpp
card_table.cpp
relocate_compact.cpp
mark_phase.cpp
background.cpp
interface.cpp
allocation.cpp
plan_phase.cpp
regions_segments.cpp)

if(FEATURE_STANDALONE_GC)
if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_AMD64)
set(BUILD_EXP_GC 1)
endif()

# clrgcexp is build with standalone+regions
if (BUILD_EXP_GC)
add_library_clr(clrgcexp SHARED ${GC_SOURCES})
add_library_clr(clrgcexp_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgcexp_gc_wks eventing_headers)
target_compile_definitions(clrgcexp_gc_wks PRIVATE USE_REGIONS)
set(CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_wks>)
if (FEATURE_SVR_GC)
add_library_clr(clrgcexp_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgcexp_gc_svr eventing_headers)
target_compile_definitions(clrgcexp_gc_svr PRIVATE SERVER_GC USE_REGIONS)
list(APPEND CLRGGCEXP_OBJECTS
$<TARGET_OBJECTS:clrgcexp_gc_svr>)
endif()

add_library_clr(clrgcexp SHARED ${GC_SOURCES} ${CLRGGCEXP_OBJECTS})
add_dependencies(clrgcexp eventing_headers)
target_link_libraries(clrgcexp PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgcexp PRIVATE gcexp_dll_wks_descriptor)
Expand All @@ -122,8 +155,20 @@ if(FEATURE_STANDALONE_GC)
install_clr(TARGETS clrgcexp DESTINATIONS . COMPONENT runtime)
endif (BUILD_EXP_GC)

add_library_clr(clrgc_gc_wks OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_wks eventing_headers)
set(CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_wks>)
if(FEATURE_SVR_GC)
add_library_clr(clrgc_gc_svr OBJECT ${GC_WKS_SVR_SOURCES})
add_dependencies(clrgc_gc_svr eventing_headers)
target_compile_definitions(clrgc_gc_svr PRIVATE SERVER_GC)
list(APPEND CLRGC_OBJECTS
$<TARGET_OBJECTS:clrgc_gc_svr>)
endif()

# clrgc is build with standalone+segments
add_library_clr(clrgc SHARED ${GC_SOURCES})
add_library_clr(clrgc SHARED ${GC_SOURCES} ${CLRGC_OBJECTS})
add_dependencies(clrgc eventing_headers)
target_link_libraries(clrgc PRIVATE ${GC_LINK_LIBRARIES})
target_link_libraries(clrgc PRIVATE gc_dll_wks_descriptor)
Expand Down
99 changes: 11 additions & 88 deletions src/coreclr/gc/allocation.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

allocator::allocator (unsigned int num_b, int fbb, alloc_list* b, int gen)
{
Expand Down Expand Up @@ -1321,27 +1330,6 @@ bool gc_heap::new_allocation_allowed (int gen_number)
return TRUE;
}

inline
ptrdiff_t gc_heap::get_desired_allocation (int gen_number)
{
return dd_desired_allocation (dynamic_data_of (gen_number));
}

inline
ptrdiff_t gc_heap::get_new_allocation (int gen_number)
{
return dd_new_allocation (dynamic_data_of (gen_number));
}

//return the amount allocated so far in gen_number
inline
ptrdiff_t gc_heap::get_allocation (int gen_number)
{
dynamic_data* dd = dynamic_data_of (gen_number);

return dd_desired_allocation (dd) - dd_new_allocation (dd);
}

#ifdef SHORT_PLUGS
inline
void set_padding_in_expand (uint8_t* old_loc,
Expand Down Expand Up @@ -3253,29 +3241,6 @@ allocation_state gc_heap::allocate_soh (int gen_number,
return soh_alloc_state;
}

#ifdef BACKGROUND_GC
inline
void gc_heap::bgc_track_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Increment (&uoh_alloc_thread_count);
dprintf (3, ("h%d: inc lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

inline
void gc_heap::bgc_untrack_uoh_alloc()
{
if (current_c_gc_state == c_gc_state_planning)
{
Interlocked::Decrement (&uoh_alloc_thread_count);
dprintf (3, ("h%d: dec lc: %d", heap_number, (int32_t)uoh_alloc_thread_count));
}
}

#endif //BACKGROUND_GC

size_t gc_heap::get_uoh_seg_size (size_t size)
{
size_t default_seg_size =
Expand Down Expand Up @@ -4551,41 +4516,6 @@ BOOL gc_heap::allocate_more_space(alloc_context* acontext, size_t size,
return (status == a_state_can_allocate);
}

inline
CObjectHeader* gc_heap::allocate (size_t jsize, alloc_context* acontext, uint32_t flags)
{
size_t size = Align (jsize);
assert (size >= Align (min_obj_size));
{
retry:
uint8_t* result = acontext->alloc_ptr;
acontext->alloc_ptr+=size;
if (acontext->alloc_ptr <= acontext->alloc_limit)
{
CObjectHeader* obj = (CObjectHeader*)result;
assert (obj != 0);
return obj;
}
else
{
acontext->alloc_ptr -= size;

#ifdef _MSC_VER
#pragma inline_depth(0)
#endif //_MSC_VER

if (! allocate_more_space (acontext, size, flags, 0))
return 0;

#ifdef _MSC_VER
#pragma inline_depth(20)
#endif //_MSC_VER

goto retry;
}
}
}

void gc_heap::leave_allocation_segment (generation* gen)
{
adjust_limit (0, 0, gen);
Expand Down Expand Up @@ -5417,15 +5347,6 @@ generation* gc_heap::ensure_ephemeral_heap_segment (generation* consing_gen)

#endif //!USE_REGIONS

inline
void gc_heap::init_alloc_info (generation* gen, heap_segment* seg)
{
generation_allocation_segment (gen) = seg;
generation_allocation_pointer (gen) = heap_segment_mem (seg);
generation_allocation_limit (gen) = generation_allocation_pointer (gen);
generation_allocation_context_start_region (gen) = generation_allocation_pointer (gen);
}

inline
heap_segment* gc_heap::get_next_alloc_seg (generation* gen)
{
Expand Down Expand Up @@ -5880,3 +5801,5 @@ CObjectHeader* gc_heap::allocate_uoh_object (size_t jsize, uint32_t flags, int g

return obj;
}

} // namespace SVR/WKS
54 changes: 12 additions & 42 deletions src/coreclr/gc/background.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include "gcinternal.h"

#ifdef SERVER_GC
namespace SVR
{
#else // SERVER_GC
namespace WKS
{
#endif // SERVER_GC

// static

Expand Down Expand Up @@ -221,47 +230,6 @@ void gc_heap::concurrent_print_time_delta (const char* msg)
}

#ifdef BACKGROUND_GC
inline
BOOL gc_heap::background_marked (uint8_t* o)
{
return mark_array_marked (o);
}

inline
BOOL gc_heap::background_mark1 (uint8_t* o)
{
BOOL to_mark = !mark_array_marked (o);

dprintf (3, ("b*%zx*b(%d)", (size_t)o, (to_mark ? 1 : 0)));
if (to_mark)
{
mark_array_set_marked (o);
dprintf (4, ("n*%zx*n", (size_t)o));
return TRUE;
}
else
return FALSE;
}

// TODO: we could consider filtering out NULL's here instead of going to
// look for it on other heaps
inline
BOOL gc_heap::background_mark (uint8_t* o, uint8_t* low, uint8_t* high)
{
BOOL marked = FALSE;
if ((o >= low) && (o < high))
marked = background_mark1 (o);
#ifdef MULTIPLE_HEAPS
else if (o)
{
gc_heap* hp = heap_of (o);
assert (hp);
if ((o >= hp->background_saved_lowest_address) && (o < hp->background_saved_highest_address))
marked = background_mark1 (o);
}
#endif //MULTIPLE_HEAPS
return marked;
}

#ifdef USE_REGIONS
void gc_heap::set_background_overflow_p (uint8_t* oo)
Expand Down Expand Up @@ -3453,7 +3421,7 @@ void gc_heap::process_background_segment_end (heap_segment* seg,
bgc_verify_mark_array_cleared (seg);
}

inline
//inline
BOOL gc_heap::fgc_should_consider_object (uint8_t* o,
heap_segment* seg,
BOOL consider_bgc_mark_p,
Expand Down Expand Up @@ -4599,3 +4567,5 @@ size_t gc_heap::get_mark_array_size (heap_segment* seg)
}

#endif //USE_REGIONS

} // namespace WKS/SVR
Loading
Loading