From 677a200a15b19e293467c73b14b7a9b13b3038a6 Mon Sep 17 00:00:00 2001 From: sebastianselander Date: Fri, 5 May 2023 15:12:37 +0200 Subject: [PATCH] Removed GC, merge it into main to save correct commit history --- src/Accurate_GC/Makefile | 5 - src/Accurate_GC/gc.cpp | 16 - src/Accurate_GC/gc_printer.cpp | 16 - src/Accurate_GC/sample.ll | 4 - src/Accurate_GC/shadow_stack.cpp | 63 --- src/GC/Makefile | 96 ----- src/GC/docs/benchmarking.md | 21 - src/GC/docs/lib/cheap.md | 40 -- src/GC/docs/lib/chunk.md | 26 -- src/GC/docs/lib/event.md | 47 --- src/GC/docs/lib/heap.md | 54 --- src/GC/docs/lib/profiler.md | 30 -- src/GC/docs/ref-guide.md | 83 ---- src/GC/include/cheap.h | 36 -- src/GC/include/chunk.hpp | 25 -- src/GC/include/event.hpp | 55 --- src/GC/include/heap.hpp | 102 ----- src/GC/include/profiler.hpp | 71 ---- src/GC/lib/cheap.cpp | 63 --- src/GC/lib/event.cpp | 71 ---- src/GC/lib/gcoll.a | Bin 712746 -> 0 bytes src/GC/lib/heap.cpp | 671 ------------------------------- src/GC/lib/profiler.cpp | 311 -------------- src/GC/tests/MarkSweep.cpp | 87 ---- src/GC/tests/advance.cpp | 83 ---- src/GC/tests/alloc_free.cpp | 32 -- src/GC/tests/alloc_free_list.cpp | 250 ------------ src/GC/tests/events.cpp | 44 -- src/GC/tests/extern_lib.cpp | 94 ----- src/GC/tests/file.cpp | 77 ---- src/GC/tests/game.cpp | 95 ----- src/GC/tests/h_test.cpp | 107 ----- src/GC/tests/linkedlist.cpp | 74 ---- src/GC/tests/linker.cpp | 16 - src/GC/tests/player.hpp | 51 --- src/GC/tests/stack.cpp | 76 ---- src/GC/tests/stack2.cpp | 51 --- src/GC/tests/struct_test.cpp | 41 -- src/GC/tests/wrapper.c | 96 ----- src/GC/tests/wrapper_test.c | 45 --- src/GC/todo.md | 11 - src/Main.hs | 6 +- 42 files changed, 4 insertions(+), 3238 deletions(-) delete mode 100644 src/Accurate_GC/Makefile delete mode 100644 src/Accurate_GC/gc.cpp delete mode 100644 src/Accurate_GC/gc_printer.cpp delete mode 100644 src/Accurate_GC/sample.ll delete mode 100644 src/Accurate_GC/shadow_stack.cpp delete mode 100644 src/GC/Makefile delete mode 100644 src/GC/docs/benchmarking.md delete mode 100644 src/GC/docs/lib/cheap.md delete mode 100644 src/GC/docs/lib/chunk.md delete mode 100644 src/GC/docs/lib/event.md delete mode 100644 src/GC/docs/lib/heap.md delete mode 100644 src/GC/docs/lib/profiler.md delete mode 100644 src/GC/docs/ref-guide.md delete mode 100644 src/GC/include/cheap.h delete mode 100644 src/GC/include/chunk.hpp delete mode 100644 src/GC/include/event.hpp delete mode 100644 src/GC/include/heap.hpp delete mode 100644 src/GC/include/profiler.hpp delete mode 100644 src/GC/lib/cheap.cpp delete mode 100644 src/GC/lib/event.cpp delete mode 100644 src/GC/lib/gcoll.a delete mode 100644 src/GC/lib/heap.cpp delete mode 100644 src/GC/lib/profiler.cpp delete mode 100644 src/GC/tests/MarkSweep.cpp delete mode 100644 src/GC/tests/advance.cpp delete mode 100644 src/GC/tests/alloc_free.cpp delete mode 100644 src/GC/tests/alloc_free_list.cpp delete mode 100644 src/GC/tests/events.cpp delete mode 100644 src/GC/tests/extern_lib.cpp delete mode 100644 src/GC/tests/file.cpp delete mode 100644 src/GC/tests/game.cpp delete mode 100644 src/GC/tests/h_test.cpp delete mode 100644 src/GC/tests/linkedlist.cpp delete mode 100644 src/GC/tests/linker.cpp delete mode 100644 src/GC/tests/player.hpp delete mode 100644 src/GC/tests/stack.cpp delete mode 100644 src/GC/tests/stack2.cpp delete mode 100644 src/GC/tests/struct_test.cpp delete mode 100644 src/GC/tests/wrapper.c delete mode 100644 src/GC/tests/wrapper_test.c delete mode 100644 src/GC/todo.md diff --git a/src/Accurate_GC/Makefile b/src/Accurate_GC/Makefile deleted file mode 100644 index 347e2dc..0000000 --- a/src/Accurate_GC/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL := ../.. -LIBRARYNAME = GC -LOADABLE_MODULE = 1 - -include $(LEVEL)/Makefile.common \ No newline at end of file diff --git a/src/Accurate_GC/gc.cpp b/src/Accurate_GC/gc.cpp deleted file mode 100644 index ddf8bc0..0000000 --- a/src/Accurate_GC/gc.cpp +++ /dev/null @@ -1,16 +0,0 @@ -// TODO: include these properly -#include "llvm/CodeGen/GCStrategy.h" -#include "llvm/CodeGen/GCMetadata.h" -#include "llvm/Support/Compiler.h" - -using namespace llvm; - -namespace { - class LLVM_LIBRARY_VISIBILITY GC : public GCStrategy { - public: - GC() {} - }; - - GCRegistry::Add - X("gc", "The bespoken garbage collector."); -} \ No newline at end of file diff --git a/src/Accurate_GC/gc_printer.cpp b/src/Accurate_GC/gc_printer.cpp deleted file mode 100644 index f392c4b..0000000 --- a/src/Accurate_GC/gc_printer.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include "llvm/CodeGen/GCMetadataPrinter.h" -#include "llvm/Support/Compiler.h" - -using namespace llvm; - -namespace { - class LLVM_LIBRARY_VISIBILITY GCPrinter : public GCMetadataPrinter { - public: - virtual void beginAssembly(AsmPrinter &AP); - - virtual void finishAssembly(AsmPrinter &AP); - }; - - GCMetadataPrinterRegistry::Add - X("gc", "The bespoken garbage collector."); -} \ No newline at end of file diff --git a/src/Accurate_GC/sample.ll b/src/Accurate_GC/sample.ll deleted file mode 100644 index d737d38..0000000 --- a/src/Accurate_GC/sample.ll +++ /dev/null @@ -1,4 +0,0 @@ -define void @f() gc "gc" { -entry: - ret void -} \ No newline at end of file diff --git a/src/Accurate_GC/shadow_stack.cpp b/src/Accurate_GC/shadow_stack.cpp deleted file mode 100644 index 2c75629..0000000 --- a/src/Accurate_GC/shadow_stack.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/// The map for a single function's stack frame. One of these is -/// compiled as constant data into the executable for each function. -/// -/// Storage of metadata values is elided if the %metadata parameter to -/// @llvm.gcroot is null. -struct FrameMap { - int NumRoots; //< Number of roots in stack frame. (int32_t) - int NumMeta; //< Number of metadata entries. May be < NumRoots. - const void *Meta[0]; //< Metadata for each root. -}; - -/// A link in the dynamic shadow stack. One of these is embedded in -/// the stack frame of each function on the call stack. -struct StackEntry { - StackEntry *Next; //< Link to next stack entry (the caller's). - const FrameMap *Map; //< Pointer to constant FrameMap. - void *Roots[0]; //< Stack roots (in-place array). -}; - -/// The head of the singly-linked list of StackEntries. Functions push -/// and pop onto this in their prologue and epilogue. -/// -/// Since there is only a global list, this technique is not threadsafe. -StackEntry *llvm_gc_root_chain; - -/// Calls Visitor(root, meta) for each GC root on the stack. -/// root and meta are exactly the values passed to -/// @llvm.gcroot. -/// -/// Visitor could be a function to recursively mark live objects. Or it -/// might copy them to another heap or generation. -/// -/// @param Visitor A function to invoke for every GC root on the stack. -void visitGCRoots(void (*Visitor)(void **Root, const void *Meta)) { - for (StackEntry *R = llvm_gc_root_chain; R; R = R->Next) { - unsigned i = 0; - - // For roots [0, NumMeta), the metadata pointer is in the FrameMap. - for (unsigned e = R->Map->NumMeta; i != e; ++i) - Visitor(&R->Roots[i], R->Map->Meta[i]); - - // For roots [NumMeta, NumRoots), the metadata pointer is null. - for (unsigned e = R->Map->NumRoots; i != e; ++i) - Visitor(&R->Roots[i], nullptr); - } -} - - // To access the stack map -void traverseStackMap() { - for (auto I = GCFunctionMetadata::roots_begin(), E = GCFunctionMetadata::end(); I != E; ++I) { - GCFunctionInfo *FI = *I; - unsigned FrameSize = FI->getFrameSize(); - size_t RootCount = FI->roots_size(); - - for (GCFunctionInfo::roots_iterator RI = FI->roots_begin(), - RE = FI->roots_end(); - RI != RE; ++RI) { - int RootNum = RI->Num; - int RootStackOffset = RI->StackOffset; - Constant *RootMetadata = RI->Metadata; - } - } -} \ No newline at end of file diff --git a/src/GC/Makefile b/src/GC/Makefile deleted file mode 100644 index 1c2690a..0000000 --- a/src/GC/Makefile +++ /dev/null @@ -1,96 +0,0 @@ -CC = clang++ -CWD = $(shell pwd) -LIB_INCL = -I$(CWD)/include -LIB_SO = -L$(CWD)/lib -LIB_LINK = $(CWD)/lib -CFLAGS = -Wall -Wextra -v -g -std=gnu++20 -stdlib=libc++ -I -VGFLAGS = --leak-check=full --show-leak-kinds=all -STDFLAGS = -std=gnu++20 -stdlib=libc++ -WFLAGS = -Wall -Wextra -DBGFLAGS = -g - -advance: - $(CC) $(WFLAGS) $(STDFLAGS) tests/advance.cpp -o tests/advance.out - -file: - $(CC) $(WFLAGS) $(STDFLAGS) tests/file.cpp -o tests/file.out - -heap: - $(CC) $(WFLAGS) $(STDFLAGS) $(LIB_INCL) lib/heap.cpp - -h_test: static_lib - rm -f tests/h_test.out -# $(CC) $(WFLAGS) $(STDFLAGS) $(LIB_INCL) tests/h_test.cpp lib/heap.cpp lib/profiler.cpp lib/event.cpp -o tests/h_test.out - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -O3 -g -o tests/h_test.out tests/h_test.cpp lib/gcoll.a - -h_test_vg: h_test - valgrind $(VGFLAGS) tests/h_test.out - -h_test_dbg: h_test - lldb tests/h_test.out launch - -linker: - rm -f tests/linker.out - $(CC) $(WFLAGS) $(STDFLAGS) $(LIB_INCL) tests/linker.cpp lib/heap.cpp -o tests/linker.out - -linker_vg: linker - valgrind $(VGFLAGS) tests/linker.out - -game: - rm -f tests/game.out - $(CC) $(WFLAGS) $(STDFLAGS) $(LIB_INCL) tests/game.cpp lib/heap.cpp lib/profiler.cpp lib/event.cpp -o tests/game.out - -wrapper_test: - rm -f lib/event.o lib/profiler.o lib/heap.o lib/coll.a tests/wrapper_test.out -# compile object files - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -g -c -o lib/event.o lib/event.cpp -fPIC - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -g -c -o lib/profiler.o lib/profiler.cpp -fPIC - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -g -c -o lib/heap.o lib/heap.cpp -fPIC - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -g -c -o lib/cheap.o lib/cheap.cpp -fPIC -# compile object files into library - ar rcs lib/gcoll.a lib/event.o lib/profiler.o lib/heap.o lib/cheap.o - clang -stdlib=libc++ $(WFLAGS) $(LIB_INCL) -o tests/wrapper_test.out tests/wrapper_test.c lib/gcoll.a -lstdc++ - -extern_lib: -# remove old files - rm -f lib/heap.o lib/libheap.so tests/extern_lib.out -# compile heap to object file - $(CC) $(STDFLAGS) -c -fPIC -o lib/heap.o lib/heap.cpp - - $(CC) $(STDFLAGS) -shared -o lib/libheap.so lib/heap.o - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -v tests/extern_lib.cpp lib/heap.cpp -o tests/extern_lib.out - $(CC) $(STDFLAGS) $(LIB_INCL) $(LIB_SO) -v -Wall -o tests/extern_lib.out tests/extern_lib.cpp -lheap - LD_LIBRARY_PATH=$(LIB_LINK) tests/extern_lib.out - -static_lib: -# remove old files - rm -f lib/event.o lib/profiler.o lib/heap.o lib/gcoll.a tests/extern_lib.out -# compile object files - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -O3 -c -o lib/event.o lib/event.cpp -fPIC - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -O3 -c -o lib/profiler.o lib/profiler.cpp -fPIC - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -O3 -c -o lib/heap.o lib/heap.cpp -fPIC -# create static library - ar r lib/gcoll.a lib/event.o lib/profiler.o lib/heap.o - -# create test program -static_lib_test: static_lib - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -o tests/extern_lib.out tests/extern_lib.cpp lib/gcoll.a - -alloc_free_list: static_lib - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -o tests/alloc_fl.out tests/alloc_free_list.cpp lib/gcoll.a - -linked_list_test: static_lib - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -o tests/linkedlist.out tests/linkedlist.cpp lib/gcoll.a - -wrapper: -# remove old files - rm -f lib/event.o lib/profiler.o lib/heap.o lib/coll.a tests/wrapper.out -# compile object files - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -O3 -c -o lib/event.o lib/event.cpp -fPIC - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -O3 -c -o lib/profiler.o lib/profiler.cpp -fPIC - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -O3 -c -o lib/heap.o lib/heap.cpp -fPIC - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -O3 -c -o lib/cheap.o lib/cheap.cpp -fPIC -# compile object files into library - ar rcs lib/gcoll.a lib/event.o lib/profiler.o lib/heap.o lib/cheap.o -# compile test program wrapper.c with normal clang - clang -stdlib=libc++ $(WFLAGS) $(LIB_INCL) -o tests/wrapper.out tests/wrapper.c lib/gcoll.a -lstdc++ diff --git a/src/GC/docs/benchmarking.md b/src/GC/docs/benchmarking.md deleted file mode 100644 index c2b9279..0000000 --- a/src/GC/docs/benchmarking.md +++ /dev/null @@ -1,21 +0,0 @@ -# Benchmarking - -free_overlap(): - 9_000 nodes: - With indexing: - Execution time: 22624 ≈ 22ms ≈ 0s. - Without indexing: - Execution time: 24891 ≈ 24ms ≈ 0s. - - 90_000 nodes: - With indexing: - Execution time: 693642 ≈ 693ms ≈ 0s. - Without indexing: - Execution time: 712297 ≈ 712ms ≈ 0s. - -Linked list test: - 50_000 nodes: - With marking all: - Execution time: 13911478 ≈ 13911ms ≈ 13s. - Without marking: - Execution time: 234361 ≈ 234ms ≈ 0s. \ No newline at end of file diff --git a/src/GC/docs/lib/cheap.md b/src/GC/docs/lib/cheap.md deleted file mode 100644 index e5c5993..0000000 --- a/src/GC/docs/lib/cheap.md +++ /dev/null @@ -1,40 +0,0 @@ -# cheap.h & cheap.cpp - -A wrapper interface for the class `GC::Heap` for easier use -in LLVM (no nasty namespaces). This interface is relatively -straight-forward and only defines functions to use the already -public functions in the class `GC::Heap`. - -The functions are declared in a normal C-style header and -defined as "pure" C-functions. Because the public functions -exposed in `GC::Heap` are static, some of the functions -just call the static functions but are wrapped as C-functions. - -For the non-static function `GC::Heap::set_profiler()` and the -singleton get-instance function `GC::Heap::the()` a struct -is used to encapsulate the heap-object. If this library is -compiled with `DEBUG` defined a struct is typedef-ed and -can be used everywhere, otherwise this struct is opaque -and cannot be used explicitly. This struct only contains -a pointer to the heap instance and is called `cheap_t`. - -## Functions -`cheap_t *cheap_the()`: Returns an encapsulated singleton -instance. It is encapsulated in an opaque struct as the -instance itself is not meant to be used outside the C++ -library. - -`void cheap_init()`: Simply calls the `Heap::init()` -function. - -`void cheap_dispose()`: Only calls the `Heap::dispose()` -function. - -`void *cheap_alloc(unsigned long size)`: Calls `Heap::alloc(size_t size)` -and returns whatever `alloc` returns. - -`void cheap_set_profiler(cheap_t *cheap, bool mode)`: -The argument `cheap` is the encapsulated Heap singleton instance. -`mode` is the same as for `Heap::set_profiler(bool mode)`. - -For more documentation on functionality, see `src/GC/docs/lib/heap.md`. \ No newline at end of file diff --git a/src/GC/docs/lib/chunk.md b/src/GC/docs/lib/chunk.md deleted file mode 100644 index 97230f5..0000000 --- a/src/GC/docs/lib/chunk.md +++ /dev/null @@ -1,26 +0,0 @@ -# chunk.hpp - -A chunk struct object is the basic element of what can be -stored on the heap. When `Heap::alloc` is called a -chunk may be created to represent the space of memory -that was allocated on the heap by `alloc`. - -## Members -`bool m_marked`: A boolean flag to mark an object during mark/sweep. - -`uintptr_t *const m_start`: A constant pointer pointing to the start -address of the memory space that was allocated. - -`const size_t m_size`: The size of the memory space that was allocated. - -## Constructors -There are three constructors for a chunk. One regular constructor -and two copy constructors. - -`Chunk(size_t size, uintptr_t *start)`: Used for creating new chunks in -`Heap::alloc`. - -`Chunk(const Chunk *const c)`: A copy constructor used by the profiler -to store chunk data after the initial chunk is deleted. - -`Chunk(const Chunk &c)`: A secondary copy constructor used for debugging. \ No newline at end of file diff --git a/src/GC/docs/lib/event.md b/src/GC/docs/lib/event.md deleted file mode 100644 index 8884205..0000000 --- a/src/GC/docs/lib/event.md +++ /dev/null @@ -1,47 +0,0 @@ -# event.hpp & event.cpp - -An event class used by the profiler to track actions -on the heap. - -## Members -`const GCEventType m_type`: The type of event recorded. - -`const std::time_t m_timestamp`: The timestamp of the event, -initialized to the current time by `std::time(NULL)`. - -`const Chunk *m_chunk`: The chunk an event is related to. -For example, in `alloc` when a new chunk is created, a -new event is recorded with the type of `NewChunk` and -`m_chunk` then contains a copied version of that new chunk. -If an event is not related to a chunk this member is initialized -to a nullptr. - -`const size_t m_size`: In an `AllocStart` event, this member -stores the amount of bytes requested to `alloc`. Otherwise -this member is initialized to 0. - -## Constructors -`GCEvent(GCEventType type)`: Used for creating events that are -independent of a chunk and size (like `ProfilerDispose`). - -`GCEvent(GCEventType type, Chunk *chunk)`: Used for creating events -that are connected to a chunk (like `ChunkMarked`). - -`GCEvent(GCEventType type, size_t size)`: Used for creating events -that are related to a size (only `AllocStart`). - -## Destructors -`~GCEvent()`: Default destructor and also frees the member -`m_chunk` if it's not the `nullptr`. - -## Functions -`GCEventType get_type()`: Getter for the type of the event. - -`std::time_t get_time_stamp()`: Getter for the timestamp of -the event. - -`const Chunk *get_chunk()`: Getter for the Chunk the event -is related to. The chunk data is constant. - -`const char *type_to_string()`: Translates the type of the -event to a string. \ No newline at end of file diff --git a/src/GC/docs/lib/heap.md b/src/GC/docs/lib/heap.md deleted file mode 100644 index a0c31ab..0000000 --- a/src/GC/docs/lib/heap.md +++ /dev/null @@ -1,54 +0,0 @@ -# heap.hpp & heap.cpp - -## Members -`char *const m_heap`: This is the pointer to the simulated heap which -collection occurs on. It's a byte array with a constant pointer. - -`size_t m_size`: The size of bytes that has been allocated on the heap. - -`inline static Heap *m_instance`: The singleton instance of Heap. Before -the heap is initialized this is initialized to the null pointer. - -`uintptr_t *m_stack_top`: The address of the topmost stack frame which -serves as the stop for scanning the stack. Initialized as the null pointer -but assigned to the correct address in `Heap::init()`. - -`bool m_profiler_enable`: The state of the profiler, `true` if the -profiler is enabled, `false` otherwise. It is initialized as `false`. - -`std::vector m_allocated_chunks`: Contains pointers to all -chunks that are allocated on the heap and can be reachable (if -a collection has been triggered previously). - -`std::vector m_freed_chunks`: Contains pointer to -chunks that have been freed, used to try and recycle chunks. - -## Constructors -`Heap()`: Default constructor which guarantees to initialize -the `m_heap` pointer and the byte array. Declared private -in accordance with the singleton pattern. - -## Destructors -`~Heap()`: Frees the `m_heap` byte array. Declared private -in accordance with the singleton pattern. - -## Functions -`static void init()`: Initializes the heap singleton and the member -`m_instance`. Must be called before any calls to `alloc()`. - -`static void dispose()`: Disposes the heap singleton which frees -the heap. If the profiler is enabled the profiler is also disposed. - -`static void *alloc(size_t size)`: Tries to allocate `size` amount -of bytes on the heap. The allocation is C-style, meaning `alloc()` -returns a `void *` similar to `malloc` and the user should cast -this pointer to an appropriate type. If this function is called with -the argument of 0, it will return the null pointer. This function can throw -runtime errors on two occasions. One if there is not enough memory -on the heap after a collection is triggered, it will throw a runtime -error with the message "Out of memory". The other occasion is when -a collection is triggered and the heap has not been initialized -properly by calling `init()`. - -`static void set_profiler(bool mode)`: Enables or disables (`true` -or `false`) the profiler. \ No newline at end of file diff --git a/src/GC/docs/lib/profiler.md b/src/GC/docs/lib/profiler.md deleted file mode 100644 index cd925d6..0000000 --- a/src/GC/docs/lib/profiler.md +++ /dev/null @@ -1,30 +0,0 @@ -# profiler.hpp & profiler.cpp - -## Members -`inline static Profiler *m_instance`: The pointer to the profiler -singleton instance. - -`std::vector m_events`: A vector of events recorded -by the profiler. The contents are always sorted by time. - -## Constructors -`Profiler()`: Default constructor, declared private because of -the singleton pattern. - -## Destructors -`~Profiler()`: Default destructor, declared private because of -the singleton pattern. This destructor also deletes any events -that were recorded by the profiler to free memory. - -## Functions -`static void record(GCEventType type)`: Records an event independent -of a size and a chunk (like `ProfilerDispose`). - -`static void record(GCEventType type, size_t size)`: Records an event independent -of a chunk but not a size (only `AllocStart`). - -`static void record(GCEventType type, Chunk *chunk)`: Records an event independent -of a size but not a chunk (like `NewChunk`). - -`static void dispose()`: Disposes the profiler by dumping a log file of all -events and deleting events to free memory. \ No newline at end of file diff --git a/src/GC/docs/ref-guide.md b/src/GC/docs/ref-guide.md deleted file mode 100644 index 7ee627e..0000000 --- a/src/GC/docs/ref-guide.md +++ /dev/null @@ -1,83 +0,0 @@ -# GC library - reference guide - -The Heap class is the core of the library and contains all necessary -functions for using the library. This class exposes four public functions -which are `init`, `dispose`, `alloc`, and `set_profiler`. - -To use the library, simply include it as `#include "heap.hpp"` and link -it during compilation. Or you can compile it to a static library using -the target `make static_lib` which compiles everything to an .a file. -It can also be compiled to a shared library if necessary with the target -`make shared_lib` which produces an .so file. - -## Quick guide -1. If you want a profiler, call `Heap::set_profiler(true)`. Otherwise this can be skipped. -2. Call `Heap::init()` to initialize the heap before using `alloc` (**crucial**). -3. Use `Heap::alloc()` as you want. -4. At program exit, call `Heap::dispose()` to free up all the memory used. - -## Functions - -### Heap::init() -When using the library, the user has to, at the start of the program, -call the `void init()` function, which initiates the Heap singleton -and the class member `m_stack_top`. **It is crucial** that this -functions is called from the `main` function of the end program, -as `init` uses the intrinsic function `__builtin_frame_address` -to find the address of the **first** stack frame of the end program. -If the function **is not** called from the `main` function -of the end program, it is not guaranteed that the garbage collector -will collect all objects. - -The intrinsic function used is technically unsafe for this use, -but during testing it has only shown to segfault for values greater -than the one used in `init`. If you run into a segfault, please -contact the developers. - - -### Heap::set_profiler(bool mode) -This function is used to enable or disable the profiler connected -to the Heap. The profiler is primarily used for testing, but can -also be used in general to keep track of the programs history. - -This function takes a single boolean as an argument to represent -the state of the profiler. `true` means that the profiler is enabled -and `false` means that the profiler is disabled. This function -can theoretically be called at any time during program execution, -but it's probably a bad idea. It is recommended to call this function -before the call to `init` or at least at before the first call to -`alloc`. - -### Heap::alloc(size_t size) -The probably most important function in this library. This function -is called to request memory from the "heap". `alloc` takes a single -argument which is a `size_t` (unsigned long) to represent the amount -of bytes to allocate on the heap. The allocation is C-style, meaning -that alloc returns a `void` pointer similar to `malloc`, which -is then supposed to be cast by the user to a proper pointer. When -`alloc` is called and there is already not enough memory left on -the heap to accommodate the request, a collection is triggered -to free up memory for the allocation. Hence the user does not -need to make their own calls to `free` or manually free up memory. - -`alloc` can also return a null pointer, if the user requests to -allocate 0 bytes. This is not recommended. - -`alloc` can also throw runtime errors in two cases. The first one -is of there is not enough memory on the heap available after -a collection, which in case the allocation cannot complete. -The second case is during a collection, where the function -`collect` throws a runtime error if the heap is not already -initialized by a call to `init`. Calls to `alloc` can technically -take place without properly initializing the heap, but this is -not recommended. - -### Heap::dispose() -This function is used to dispose the heap at the program exit. -If the profiler is enabled, it is also disposed from a call -to `dispose`. When the profiler is disposed, a log file is -dumped containing the events on the heap. If the profiler -is disabled, nothing happens to the profiler during `dispose`. -After the profiler is disposed, the heap is deleted which -frees up all the memory used and deletes (hopefully) all -the remaining objects in memory. \ No newline at end of file diff --git a/src/GC/include/cheap.h b/src/GC/include/cheap.h deleted file mode 100644 index d74af9d..0000000 --- a/src/GC/include/cheap.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef CHEAP_H -#define CHEAP_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -//#define WRAPPER_DEBUG - -#ifdef WRAPPER_DEBUG -typedef struct cheap -{ - void *obj; -} cheap_t; -#else -struct cheap; -typedef struct cheap cheap_t; -#endif - -#define FuncCallsOnly 0x1E -#define ChunkOpsOnly 0x3E0 - -cheap_t *cheap_the(); -void cheap_init(); -void cheap_dispose(); -void *cheap_alloc(unsigned long size); -void cheap_set_profiler(cheap_t *cheap, bool mode); -void cheap_profiler_log_options(cheap_t *cheap, unsigned long flag); - -#ifdef __cplusplus -} -#endif - -#endif /* __CHEAP_H__ */ \ No newline at end of file diff --git a/src/GC/include/chunk.hpp b/src/GC/include/chunk.hpp deleted file mode 100644 index 595b50b..0000000 --- a/src/GC/include/chunk.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#include -#include - -namespace GC -{ - /** - * The basic element of what can be stored on - * the heap. A chunk contains a start address - * on the actual heap, the size of memory that - * is allocated at that address and if the - * chunk is reachable (marked). - */ - struct Chunk - { - bool m_marked {false}; - uintptr_t *const m_start {nullptr}; - const size_t m_size {0}; - - Chunk(size_t size, uintptr_t *start) : m_start(start), m_size(size) {} - Chunk(const Chunk *const c) : m_marked(c->m_marked), m_start(c->m_start), m_size(c->m_size) {} - Chunk(const Chunk &c) : m_marked(c.m_marked), m_start(c.m_start), m_size(c.m_size) {} - }; -} \ No newline at end of file diff --git a/src/GC/include/event.hpp b/src/GC/include/event.hpp deleted file mode 100644 index c18b1ce..0000000 --- a/src/GC/include/event.hpp +++ /dev/null @@ -1,55 +0,0 @@ -#pragma once - -#include - -#include "chunk.hpp" - -namespace GC -{ - /** - * Types of events that can occur on the heap. - */ - enum GCEventType - { - HeapInit = 1 << 0, - AllocStart = 1 << 1, - CollectStart = 1 << 2, - MarkStart = 1 << 3, - SweepStart = 1 << 4, - ChunkMarked = 1 << 5, - ChunkSwept = 1 << 6, - ChunkFreed = 1 << 7, - NewChunk = 1 << 8, - ReusedChunk = 1 << 9, - ProfilerDispose = 1 << 10, - FreeStart = 1 << 11 - }; - - /** - * Stores metadeta about an event on the heap. - */ - class GCEvent - { - private: - const GCEventType m_type; - const std::time_t m_timestamp {std::time(NULL)}; - const Chunk *m_chunk {nullptr}; - const size_t m_size {0}; - - public: - GCEvent(GCEventType type) : m_type(type) {} - GCEvent(GCEventType type, Chunk *chunk) : m_type(type), m_chunk(chunk) {} - GCEvent(GCEventType type, size_t size) : m_type(type), m_size(size) {} - - ~GCEvent() { - if (m_chunk != nullptr) - delete m_chunk; - } - - GCEventType get_type(); - std::time_t get_time_stamp(); - const Chunk *get_chunk(); - size_t get_size(); - const char *type_to_string(); - }; -} \ No newline at end of file diff --git a/src/GC/include/heap.hpp b/src/GC/include/heap.hpp deleted file mode 100644 index 909ac99..0000000 --- a/src/GC/include/heap.hpp +++ /dev/null @@ -1,102 +0,0 @@ -#pragma once - -#include -#include -#include - -#include "chunk.hpp" -#include "profiler.hpp" - -#define HEAP_SIZE 240240240 -#define FREE_THRESH (uint)100 -#define HEAP_DEBUG - -namespace GC -{ - /** - * Flags for the collect overlead for conditional - * collection (mark/sweep/free/all). - */ - enum CollectOption - { - MARK = 1 << 0, - SWEEP = 1 << 1, - MARK_SWEEP = 1 << 2, - FREE = 1 << 3, - COLLECT_ALL = 0b1111 // all flags above - }; - - /** - * The heap class to represent the heap for the - * garbage collection. The heap is a singleton - * instance and can be retrieved by Heap::the() - * inside the heap class. The heap is represented - * by a char array of size 65536 and can enable - * a profiler to track the actions on the heap. - */ - class Heap - { - private: - Heap() : m_heap(static_cast(malloc(HEAP_SIZE))) {} - - ~Heap() - { - std::free((char *)m_heap); - } - - char *const m_heap; - size_t m_size{0}; - char *m_heap_top{nullptr}; - // static Heap *m_instance {nullptr}; - uintptr_t *m_stack_top{nullptr}; - bool m_profiler_enable{false}; - - std::vector m_allocated_chunks; - std::vector m_freed_chunks; - std::list m_free_list; - - static bool profiler_enabled(); - // static Chunk *get_at(std::vector &list, size_t n); - void collect(); - void sweep(Heap &heap); - Chunk *try_recycle_chunks(size_t size); - void free(Heap &heap); - void free_overlap(Heap &heap); - void mark(uintptr_t *start, const uintptr_t *end, std::vector &worklist); - void print_line(Chunk *chunk); - void print_worklist(std::vector &list); - void mark_step(uintptr_t start, uintptr_t end, std::vector &worklist); - - // Temporary - Chunk *try_recycle_chunks_new(size_t size); - void free_overlap_new(Heap &heap); - - public: - /** - * These are the only five functions which are exposed - * as the API for LLVM. At the absolute start of the - * program the developer has to call init() to ensure - * that the address of the topmost stack frame is - * saved as the limit for scanning the stack in collect. - */ - - static Heap &the(); - static void init(); - static void dispose(); - static void *alloc(size_t size); - void set_profiler(bool mode); - void set_profiler_log_options(RecordOption flags); - - // Stop the compiler from generating copy-methods - Heap(Heap const &) = delete; - Heap &operator=(Heap const &) = delete; - -#ifdef HEAP_DEBUG - void collect(CollectOption flags); // conditional collection - void check_init(); // print dummy things - void print_contents(); // print dummy things - void print_allocated_chunks(Heap *heap); // print the contents in m_allocated_chunks - void print_summary(); -#endif - }; -} \ No newline at end of file diff --git a/src/GC/include/profiler.hpp b/src/GC/include/profiler.hpp deleted file mode 100644 index f70ca3b..0000000 --- a/src/GC/include/profiler.hpp +++ /dev/null @@ -1,71 +0,0 @@ -#pragma once - -#include -#include -#include - -#include "chunk.hpp" -#include "event.hpp" - -// #define FunctionCallTypes -// #define ChunkOpsTypes - -namespace GC { - - enum RecordOption - { - FunctionCalls = (GC::AllocStart | GC::CollectStart | GC::MarkStart | GC::SweepStart), - ChunkOps = (GC::ChunkMarked | GC::ChunkSwept | GC::ChunkFreed | GC::NewChunk | GC::ReusedChunk), - AllOps = 0xFFFFFF - }; - - struct ProfilerEvent - { - uint m_n {1}; - const GCEventType m_type; - - ProfilerEvent(GCEventType type) : m_type(type) {} - }; - - class Profiler { - private: - Profiler() {} - ~Profiler() - { - for (GCEvent *c : m_events) - delete c; - } - - static Profiler &the(); - inline static Profiler *m_instance {nullptr}; - std::vector m_events; - ProfilerEvent *m_last_prof_event {new ProfilerEvent(HeapInit)}; - std::vector m_prof_events; - RecordOption flags; - - std::chrono::microseconds alloc_time {0}; - // size_t alloc_counts {0}; - std::chrono::microseconds collect_time {0}; - // size_t collect_counts {0}; - - static void record_data(GCEvent *type); - std::ofstream create_file_stream(); - std::string get_log_folder(); - static void dump_trace(); - static void dump_prof_trace(); - static void dump_chunk_trace(); - // static void dump_trace_short(); - // static void dump_trace_full(); - static void print_chunk_event(GCEvent *event, char buffer[22]); - static const char *type_to_string(GCEventType type); - - public: - static RecordOption log_options(); - static void set_log_options(RecordOption flags); - static void record(GCEventType type); - static void record(GCEventType type, size_t size); - static void record(GCEventType type, Chunk *chunk); - static void record(GCEventType type, std::chrono::microseconds time); - static void dispose(); - }; -} \ No newline at end of file diff --git a/src/GC/lib/cheap.cpp b/src/GC/lib/cheap.cpp deleted file mode 100644 index 42179b6..0000000 --- a/src/GC/lib/cheap.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include -#include - -#include "heap.hpp" -#include "cheap.h" - -#ifndef WRAPPER_DEBUG -struct cheap -{ - void *obj; -}; -#endif - -cheap_t *cheap_the() -{ - cheap_t *c; - GC::Heap *heap; - - c = static_cast(malloc(sizeof(cheap_t))); - heap = &GC::Heap::the(); - c->obj = heap; - - return c; -} - -void cheap_init() -{ - GC::Heap::init(); -} - -void cheap_dispose() -{ - std::cout << "In dispose\n"; - GC::Heap::dispose(); - std::cout << "Out dispose" << std::endl; -} - -void *cheap_alloc(unsigned long size) -{ - return GC::Heap::alloc(size); -} - -void cheap_set_profiler(cheap_t *cheap, bool mode) -{ - GC::Heap *heap = static_cast(cheap->obj); - - heap->set_profiler(mode); -} - -void cheap_profiler_log_options(cheap_t *cheap, unsigned long flags) -{ - GC::Heap *heap = static_cast(cheap->obj); - - GC::RecordOption cast_flag; - if (flags == FuncCallsOnly) - cast_flag = GC::FunctionCalls; - else if (flags == ChunkOpsOnly) - cast_flag = GC::ChunkOps; - else - cast_flag = GC::AllOps; - - heap->set_profiler_log_options(cast_flag); -} \ No newline at end of file diff --git a/src/GC/lib/event.cpp b/src/GC/lib/event.cpp deleted file mode 100644 index 89a2a71..0000000 --- a/src/GC/lib/event.cpp +++ /dev/null @@ -1,71 +0,0 @@ -#include "chunk.hpp" -#include "event.hpp" - -namespace GC -{ - /** - * @returns The type of the event - */ - GCEventType GCEvent::get_type() - { - return m_type; - } - - /** - * @returns The time the event happened in - * the form of time_t. - */ - std::time_t GCEvent::get_time_stamp() - { - return m_timestamp; - } - - /** - * If the event is related to a chunk, this - * function returns the chunk that it is - * related to. If the event is independent - * of a chunk, it returns the nullptr. - * - * @returns A chunk pointer or the nullptr. - */ - const Chunk *GCEvent::get_chunk() - { - return m_chunk; - } - - /** - * If the event is an AllocStart event, this - * returns the size of the alloc() request. - * otherwise this returns 0. - * - * @returns A number representing the number - * of bytes requested to alloc() - * or 0 if the event is not an - * AllocStart event. - */ - size_t GCEvent::get_size() - { - return m_size; - } - - /** - * @returns The string conversion of the event type. - */ - const char *GCEvent::type_to_string() - { - switch (m_type) - { - case HeapInit: return "HeapInit"; - case AllocStart: return "AllocStart"; - case CollectStart: return "CollectStart"; - case MarkStart: return "MarkStart"; - case ChunkMarked: return "ChunkMarked"; - case ChunkSwept: return "ChunkSwept"; - case ChunkFreed: return "ChunkFreed"; - case NewChunk: return "NewChunk"; - case ReusedChunk: return "ReusedChunk"; - case ProfilerDispose: return "ProfilerDispose"; - default: return "[Unknown]"; - } - } -} \ No newline at end of file diff --git a/src/GC/lib/gcoll.a b/src/GC/lib/gcoll.a deleted file mode 100644 index dd34d6445a090d8ab0f17d31e151ada266147e5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712746 zcmY$iNi0gvu;bEKKm`U!TnHPPR8TN9GckfFN#J5&V9;S;U|WZY^O+bJh`=l<+ZgDK zkH+?~zcon6aP^GYnzQ%mAYDhpCw%NS5)3{AjNnYpR)#U+Wk1sDn}LGsBNrFq#H zQeabyGpn$f3bHJ|BtO2mq$o2l9ir7cxWqIWB;lFtYLSv3U!Iwgn&+Afb&*9tQGQxx zPHK@^QEGC2QHrZyaJ-=*)B_9##GK5M%J?z^ z3_~oEi&7IyQsY7128C2=VlE`4jNF~!!C`2SQkq*3Us9Bqj0kABta(aiaY24DR0e+t zn|P!q7PuI}t$^@Bj)tTOFyFW&18SI&yE9nC(4wTMGQKD^xiUE?H6EN4id|u$2vK2H z0FAr&)V#!`oYWLlJ4`b3GD}c}P~8o)$|N_jDBCq4H^4hLD7eI|EH$|#zsM6Q9)c4+ zgU#YyVX+Oi-L$woHMPJsDA*t#8p2>%S@ zH90#T#WR*57sr>R7MHla`KZCOHxx{DJlRh{)~(; zlU;mXYB_q+1H~0AmcjC{gb-X}9v=_RmWD=2iN%@8pe&Y|m+qMyTw-XLoRL@r%2b&p z#h%Ho!HJ&9uCC5Tp248t3h+)2@(wlzCnqvYF~l?lmcZem1S^NZQDO=X4A)$SR8V29 zmk+P3AaxR?9)hqTq?w5cSkTDK%)|oBO5mz@^>JfjWMqH=Mg}_u1P><4zz~suU^{@B z4h-@Patz(G8|AfCVRbbh~pLo`4YW=yn%C<4Yj(o9#LI+t)KNFm$tf^ooMa z@JME9@?gC1{{g?e3j>2kFDpp!FwBC%!iTv7R5*I(WtK2Ff>LI1Nn%k612h>!IKGKR z*$@`EP5^OJQy9SP;PTXh5(v|+C^a>O!7sHOEWr?zT3Vc%0%5}{I2TBf%@7@$mz|ei zo)-%W7m{(XN3SeMlSk+M7ht;E7EE>Ci-v~(OAsH9VQE2B10n?DSIjAm;w}k!y45Z{ z&1mM#+Gi6}j4Bxw9Xw7LOmI+p_?JheQQ*+;wR>1qb;T#Fz9y!*<&ctrp#>aVx6&`lh{MuO9vTeLMZ1rLfbrS)bqT-M{z$^`G(2 z|4$Cil!$D5X?!K#zHW-7`Onw;%kBm#Z@;wUSwrHJO-J{d3y3^i?Qr4gOaK4gZ4W<% zTrNK#^(nfCSwlX;`*?$A6=#HddgIqGas>vyjC>1O4=mgwWYP1ErEh_qXLXBZcV`0^U|EsJhQev$VeqDtU~gL~uS7rGBBb}{8F$v$v0gf(aJoDGR0 zh0Rs`EcXq04>#3l#PIGBX`Z*&q{r?2x>E1g>Hn|IWKWU2*jPMoMT)=* z-d!0Yy1grkE|>kXIo0U4?7zJHfcc5&0~K9b4a-+@{!m-XFmEC6fz4awe~9g6 ztC?-b_;22w)}H4pSSsed%ALcw$00lS4r@(&->nM1ii!U+7Vq!)7`tjiVUv@R@wIaq zGdHg7aWpQQvGE8`q3w#%I4kz;^A>S&B!#8aj8ZHgc9}f0xnAbMCX0 zn{L%c)9GrOM|qR#KE#^Nl2E*Ux(wC;47DxM(uY zx~XpUOe+KLCZ0JSdD9X_R?UBJo0hok-HEgptJg4Z3MxFbrCDJ1MJ*G5v0U(Pt5MJO9>E*yqOPa< z_Uk-cwQEgVk{OSagY-0sJm$&0ZkDTe{ynoUfAxif9sgD;#U50tJ$hF+!u_Psv8pWX zjmr;RV3>LR(A6hhISZK2xW8Ncz0rQ@!dQvzmvSDQ&(JNf&SibK;O~LCB|d8d24E+ekim2La_&nukh9Mlren29Qc5-O17dyk751-?*s9ZZuWlk)MB=CUEH{T z(ai(OCFURW4edYu&3=*(eaFSRVfIUf59(jIKGf~vxZ@Pwcw6I2bD^~; zb9qoHfAzwXb2Iwn4tWR1MVDwuxBcQxmf%kN!mejD+3W4uS8U?;_3L+C+x_Z!b|5E5 zp?rt-sUOot6l?1(ZZDo4^J3q!nQMbieZ4LB%%@MDvHz@I&!oy6v)?II5{-xN%#8gR zoGB`9TQ8-{;x~P&LA~8yfnP?qm}4B(8?;~M@bA_>{_CQL+w~SDKb=h(AEO?dnc1uk zs)%`-zDePmWKO-$)PE|sBL#k^Z1WF$y5~Td*b%#lZx>JfC3)LDyIT47>?u`q-}>I_ zGrPHVlJ0|x`=XckH|`Ez`S<3zrofFQPpckF+^)QEP_5;m`Nb!7@!K*a-qmHM?^nNl z(ltkX{f-pFo=+)j|J<{BI!SdNlOQ9%LV>}7K%qBX9Lx`X9?{S_zh8aAq-yaqmx^3J zy6J|O?Q}g|yXcNGQ~lMpRX2=uzw6#w`P9X8_O$F`|4hr7<$B>D7h)q z{pt&@cxzUA#I2jw?zTH~r>6Pb{LRYuZTmjG(e*t2TjtZhq-pNIU93Zo&HB#uav5KY zXKHZBjCF2-fxBL~9)0;pZ0eHkh?p7cvI+xtRUJM0QcHCDlGTAi`fDx~-CtxFJ_B`*?WUn&4G6-&WTzmCO=Y`{1 ztAl;!G9A@bzv3AnZ~WD81+P_Bv0QqgZ*bCGChhvlPSIfBn{1aKP4nC!$-jqRzkWq; zYWp2eHQB@A=S>f-yOu0ewlz}i<2te8n*O4#zLw6L&eS_>+7qu9dGCLFO5}d0O>64i zHrI9??iwY2~u*zZPsdc6_(wl1R%76CG3M&W~SF^5ayM z#--!h?2Z%jVl5@Qw)j33(6}^NyWMG}SgOPn$3;BtMqX0_17^8M@-FqAVi=IteM#W< zg1GZefydm zcB&JvOx&<} zV-Kf}QfT*u_djQNbe-h9apmoavf6!{W6ZX4URif;MWn|Ek95v`9h>&dlvI5>=N;Sk z)PKEaOTE@tgvuZ6JilVjNj>Mjnxv`c1V5VH?>p4jo4RFv^ZfoFs&kKc-%RtC&g)%z zOJLGs@8SlPuUay2J$%}->oA+~5qX>WX;vP)&(N}3U;O5#pgJm?T9?HIyzXLZ_?qv8b7<5W}6`>v7b8~q&{3y&(^ zcDWe8JM+*qi<+X~_6~~=Cl^>O;I@`|cIw9i<-qxZ!zjW<*se4f1`50+iDuWx%IPZ z$K#(SrXR1_e|4j9*PNeT#)qCt&vmH2cs8nPvEYKP1E|B zOIJ_%R;JGP_~yaW?b&g5_PP(;7x#Zy9hbOL zS83!1EbBB9JyjC8%z38bDH{!A*O~mO(=@g_P3(=S5u9SVNT<;#d`fD-v(8Oir)mOk zE!3HCP;Ni_e5o1>&EGO{lb^m;|9ALCjcUbDh0D8RJbf+X-byd8o_a|}D(Htw{e<$b zs%?r7nO9DqDDm$2>NgwHB6k}yZF1k1);Td!=CT~kfk|TDreR;~;t5*o*w^sQ)SoGoNs+}v2)Oob~+)?{{ zEacgb#ESHl&s}`vIz#pDsBb(R^|s;K>+lw44ZB%W+a_Pho6cEO&;I$l?;NAKSJIYT zwC}q7-&^wNBvsb_nsaMg_b(CBzN?s*V)t_D^r><|ow9m+Jna6KKC5iEKGS=q{a|0Q z-ow6AW?NN7A4%Nne4Z-!%=t0jZu{F0cd)#FaYRv`@A93RLp{4n*PKBtteb+MG z>gyz{v+t(eY}5CS{?NEx=a=lXrALf~zE3Fg$PX62Uta!L@AUlBef$Xzug$)2?!})a zGtv#KHU(7ss`wE-SEoCE3OW~D#F4LypN?v{I(D8X|Sq}d> zo6W!O)r8rHqa)Y#v{xBby$=-AuP=GXJZt~Y4~%PjvZv_S*TqR|C{NlYDV}&r2bl;FTXGiv8pEG}Vr7!!axrSGE zj_*v4XQc-9%FpWkX8KO!(H9Sqxs~$cEb zL`J_)e{KOeXO2TnnD-d^(c%KJOBH9xLHke9CG{?4z)3 z<7@4Ve|>Euva5EMFFBRE{k_}~nKucwEZ4$~UL~l1WWVk@w=rVYnbo^iMBH0yp=;#* z;i&hl$!y0LxV+4YbIJBx_xwZAkF;Ym&)KaMTjz3V{pr)@l8k0zA9#HkSHGCcT)n(M zAbWN9`yjbEW7F?EH8PnWeLHKsKE-wgZ2kJC)lEA&a@1&wwp6ukqI(NQlzL6I=qMK6G(i(l@i3a!f2`4v- z)vrvo2_%lPE9>xN3DuauwGLrVG&~rqa{P8G|L4ZJP4-q3Ies znH{Ti68AXS_}au)?E3iS!OYg>;^%X0YAb&A9*CQI$Yk2?>*eZKmhDUDRM-Bx=6&cP z^`k-Oe|?e=4=UUDb#LHHr#tM|zB_ihuaFJe{OhM!!Ai@_ogwSjGwpQp}Z> z@2?yiu9tj!%(?4T?0lZ1y{C5h{(ZE@=V4*&*Ezm#gP*Azt&nVcy#A0|aeSjtx>(2( z%{eKvh0jJ7rtYb$Et|= zoYIinLBfs#wv#t(vf8A=qY}xO_(W+D%fZl-Y@82RAH|9=>id5>!yd6T>}OKszX|ix zzn?kxE=S{j*|O#5U)n9Nc5T?lq@@^ibE@pkMb4!xS5L_O&T?jQ=6%n^achzI?Cu7A zvt-BV;%3B>0-RwRq}E-%=lBJ{+!9JX2s@=*zU7G zLJZ@kxPIBhYdP=U%b4un74)pgWODA5P?lvq`c>;zC)UmkJM?j` z>ztCUy5B-pvEHAvYL|rcy}Vk}qi03l{uOI6)poi6A%iVibwhTGU(s5TZRa&lB|iH3 z{{*9sNdOPih8HoC>9K9a$J0z_yx#SB$+Jo(otyi_?$q2p5zQa-`gHEbW#^Q%&-yM` zD_Gs{_1d~~myiU{yBKb^%`pz4Dk;^CToRs!;*RS0% z6KXflyzcgO-RxI#Q;yG@`Hv%WoD;KPDa&}C=~tHd!8yLOy)~ky zCPar#Uf#U*{|`^`KgKt1tLm8L)ldAkdVbaa#mj|nuCbfF;KJve4zK$8;&tphL-eKZ z?SB&5WP9}YcPr`Up8scm{$=KCTk%Bqq^PL={a<~|?}d!p_F8mCPCsnsI{8NYuJ4yk zwz5BZzs@E{?zC{FOQbvFwJRYEGPC)2S>6=Ce}w46 zb@a_OKk*+)nD-euokGTrk<;ns#Ds)|BnC!4Hjx7zr$W;Y@G*#*GvpgGFfgz(aDenO zK+`q@0}BHK3!@Z^v^oPjSb~9pp@9j`RA)e#8^Q!p0Lvd0bEZzx>jVp?_5%w%FU()-D^=dHa<(i1?+Yt{N8meV%`?B8DF1CZGN|Si@T*~rRv!~GV4BNJ&1jAkKJ=~$D$S0`#raRSpF&O{@s%%6&lMTt)A|g z$daJGb^2W6TThO4CzM+y6wedCzf(&hZeMM4)to^cVvLsuX*KCQeMWx;c@Azs2$z5l8Hbc*TY33sJd{gsXe812Axzx0` z`|$E=GFEj7fC6*)|K zAUbJvr1nCyZ6`MfuKl1j(f`zadHZ#XziIA$YrXDu;L}yd_}a?!Gc7i5V3eMG=bhB$ zjF{y!W&LZFKCXE0e8%jz{UhPhUM`U?%VohceP%XgsLiz3IzCh3V=LRfwW>^h)=R#x z4p_PC*KrRQ(-YUEbv+igEUzx?+R0G;PG^U`ZlTEU{-E;xEj~xLEr6(g*)dk?@3+0<;?0$TycLALyrIMJgh7<-4Lu!nwcyS6CSJaAs|qd?{(fm@btt_|O+8qKk4*TiJ6?8mm7Pn3H| zbZR`2-Kul1Nn=K?(2Mr|_WeWY*kqh+&}DMT=LHSeDAqHxaL+r`>btRHW`$97Nlw}yzE@Pd;z z-Al#a?~vQkK4HQ`v5EtRlMNLNjOFh?aXPP=a_q$s9bYyju@8}a38kDWaaS%{vs{^# z!srp{v)x@!Qr^K~*=lQtvnIY-7yG%mYNrRU>bFpta=r7X=QrciYh`6Cclzi)Zks%} zD8%KW>$dM6^|9XmH!X#jyqJxWw@r>J+?-PS@Zi6eTXXm>Ty?CzQ+-KokLsMniL>{J zzMWJ#;kI0F)3gp*w`ccG@qStKOm_S2Yww~oT?Kijta)JPAEsYF`&zH6v)&K?OE1r- ziO)8uX1aAtXV=rOG3kQYfmhXLUQwEMQ(#A>?-ZY$B}e}rJaE)Zx6@(+@8bIIMQYD& z^-N+{&zc;NcYIZXS^?|igSxxs9XiHx@r#eAy0vqboY_?MeFf}~wlhkH6h63UcNw7VD(8%qX4HWTu{Ba6osBMHyrI%4t=7`;vCrEEA{;-kk8lvv$Us zoK=1iXSCV7S(NovjXQFsB@3U~zP4U@)um^X=cR`Bi%tgN%lV=Ys42WP_ta>N@IJ=; zD`L^?+NLM&mk-DMlr5dp{pD35XV0bHhZ{MWC%w9GYLVp(d4+RZ5+^c!Y!N(vT!&3v zw=QHJtM>grGixMLCw3fZYEhoxG~xbn;j1?kBDefn$)b|<-3!0=aVA*eBs+@1fwUcV~Z7_&EWZ=_z>^wq0RUwv9sc(G-l z>3i?XQsJ2~mn0wmJ^l9V(X(G4EsBY$*%=k{W5WLSqK_=%M=w9N{j@!BW6}yyv*T~y zr&sTq{e-=t_-=pvj-pq6}gzD@KEL$$-s{eFZ#D&hL{lzC2ocbxs8uoc1^KSXr z-lyMqquu1K!!94+^Thx7A-T%W`f-aVYzMVCVC||q%pe}3-BmGXYS8Vhy9NSR{8Xsh3HvSf#dB|dJyVsE-g`ux$HvLaN$=v~ zGq=P`K3&}OXJMkFxTlruvqjHusZ8j%|DSv*QaR%^^2+kG7?x1|Gh8*R7#8`@dL_+$ zR6zP8SGQW@bF;kUfXl^*-5t=7p$`YnHe6 zV&k&*Z97-&lf0^S3=N>3A-cl_xm;jORu z%kGA6V{mtNwo=e=_Y2ijFf`IL(lb;rGB7eWFfsr&wOJS#7!<%wZUzQ-zfcAy2F3#* zF-Yu!;upe)#XGdw$-r0@#K2e~z$neb&M|?JfkA+Qfk6hU37Ry(Vg^t#SW_OP&IOBD z1QxLzsMrB0EdgrwL)oASmAEdJYl|Z9B7(l&;kN?qx!CYo|uNlmR6U?Cg z2AqdrFf*_rI8YWOTv!=6p?nwxQ3>-kOq79v8_Z;7NCMLc0u(Nwjt?w+VKU&QF$}B> zzAynOEd{1o8N$Fcf{+I@Ss4_;G=fk8Gg%q5!8C%<1T$F~%)vB*&;v7B8Jxg0f-nX% zSs9AJG%CRi?Y1F{S~4&&Fd>P9lFI6`zXGw?tdXe2WOADRe+%gi7M zVW5%B48mw45H2$VBvc_h1j)=GhTuS1i3|)3LP+TZmbR;*;*fX)#T-P#9H=-bPk}^W zDF9S>g3LkB4;P{8Vf|xRTK~iV$x|RRkTDlDuOW+p*a|qrEkNSXJ~2og47-BFVH{*y z&&S!2LC?q807O`V2qO?-4k9c-gfWOP0THGk!VE+h8ZgAW`}jLK`ozZnButD?EJ>}%EP;ltACv|~1t``3`40if zNaCQh0uwJr5(kwfF!5$2anJw=OnfquIH){?i7!SH2bEDU@y$r$pe5@t@xw^spt1@k zei=y|lsjSK&|wJ%kiU2t7#LvU;K3ho-e&;kTA286By;$Y)I){A=77v9fC_-Z3d977 zfp7|l!@vM9Q9xoKJOe5YavO*V5(D8gAP!Pq0*Qg}1E@HxyakDY@E52!sICDqL1G}x z0WF|lbsR_xg!h0HLF-Tu6C?)07eE{a1_nsE3n~L4cnMS-* zBreXtz_1zW5FwBt0|Ns{92Qm}Ay^3t6Ni=9kopRu9#r~5>L~^WHIOE#IWWB-Aqx-z z6$jZn8RS6*1_nno@jIY^VqjpH1dSh%y&(0gp%%|W69<)(AS0Hci5o-t>!38u95ztq zV_;y|h99M-x8?DpVL47|x-IOFRIY&vYozpP1T{wzO&sQa1vGIXXa+Jy6Njm{LKEkK`YQ-c9Hu@JO}q%| z?m{$inEDDd@m45*0+a@M6O>LKfEWx64AarX-Js>bW;Ah_`dw(^ccBHzH8k-WP-bLc zV7QAWt`3d&uV~`^pu!SVo}r2FhMFS+O-CSSgWMkl4L4~t@uSf6X^bXb1$Cztn)q?3 zds5KE&qMQLHk!B{)O}TG;yO_Gx1)(4huXUmO&nIfZ$uNH2`#)QLi0V$zj+`A0|Ub% zH1XL`cdkYgzW_CN7Y^|QXyW!zcV0#l-wI97H_^o9q50?|nmEkfpJ?LJQ1gYM;SKT* zC>~+yN*YZ(3uW32UTy1CN2u~mk*kFCX^oxr9l)Z+ybMj;8S1ZEH1XR|^IOow*`e`12~8Z-Rsdz~nP}oapy_4- zn)qpGdRvYrZVnaSj3#aa4d-2G;%w0PJBTI@YnLBG6JGT2G669d7#O}mX%Gbx7lpc?9cm9uJQ|v>h0(;XLizGg8m4|Jv>w++6E}j2o1=-# zK*PrwP5eHT?+>M6=5K(ew`er+Ur_g_qlu?M?JY(V?}V01^=RTzpv1tyz|f5*UIk5u z)6v9@pyG?s#Cf6Vc|Dr=YH0be8%?|uTHhT<6MqZMN3igQg~J38gMoqJ1)BOsXuAD` zCT<56|A!|26`GH@pz#bc7L*<)Ld$geJZUnoi!Ki9@}`@C!{G zmj2kF;R-YV7c|`pp^3xdTMkWp88jTU(8NDN%`rn0=Z5AN7c}v?&~Wxf6Q2yt7eQ#^ ztk85EjwXH;8a^3l;(1W<5;XBJXu6$a zF;M?rLK8m&&8PR##FL=rzd;iRjpKoeteR)3r(O^XyU6to?>8Nn2IKD1T}vHns@}rgA5D| zr_sc(L(|(cH1QHB{|}S~X$R%6SZI0>g8C08J`>6}hSD%`*tkFhnz$LXUYm<1eg&Ey zwxEftLDTbYH1Qy)`wpOqH$dx=Gic%)q2YE7O`IRU(DXnOdHCSC&- zXNA(RaNvTvQyfiP5^Ap!ns_x-y&jr)EHvD#(ZtQ5=`a#a{3JBoQqjcELCr5i6Mqj) z4^3#|0Z@KFl!p0h4%9t!(8Noi>3JoZ_(N#E+lD6Y4^8KX(ZqK^!{-8;cqueq?xKm8 zL(A1yXyV7A>ESz?_%CRBV1b$k^OqWk!N9;Eh$j9G8a{Gp;`LDXYom!Tho)x>G;tQF zdtA}Pr$WoIAT;qLsQP#`aTln6a?r#VL(9)fH1WC6^w5ST-VF_h$!OxIq3L@8nz$0Q zoLP$|?gDlHE;R7~XuKas6Q2W(uPbQcKcM0N5KY_;>i&0V;%(6M{~JwwA2i%Jq3!}1 z3o6HapyHxv;;W$U)Ik&P1ZiYoVDLZ_hxJ49(8Q&o=5(QndqTxmqlq7Yrk~?z;%A`# zd4eYX3!3lVpo!0g@>!wz59Dl+e?_6`Rt8Nx7FrHyqKU7C)|dWh;?~e~Rf;D59qO-% zXyWP6{JRHDdw@hL*Q>XyW})_1p=6%W;AhQX!&^n zO}qgb&S%lY*FwvmTWI1Jq3(H(CVmI1{tKG;PiQzWN~5OpOHlvvp^5K+#)~wXcmcGW z(LfVF4lQrZ(8NWc=_C+M{0UTj2Aa4PwES#D6Yqh>R~MRiAhg_Af+h~@KWsr0pA8L% zy=dYvbFQO_ABU=cjwW6Rwf6&>ILsU_=t2rmvIJEH!q9jZLlgf74IdjcaS5osk!a#i zpz)Q6L%ak{ToGz-7n-;pRD2})ZTw+;*iwDz#s}feF?Ju0pwrUyn-Q` z_*JNXebK}xLBlf-O*|BukNVNXk3rMJ1~l7^-$C=sBQ)_jPkOvtU7?jY&1)=sjqlp_q#iP)~-Jt2D5KVj$G@aCxu!_+6DiMv9>zY{Imx05PA=f}kf3yO z3>rRyXyQW9^dpBR4oeT(XyPz?jnKqlK@3iq$8dQ5s5s0Vm|1_ {k6 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

mG#xu?EMaudH?);`BO7pElI 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 T*z_~xLgK$1&2bP@5e5PP(UsXk diff --git a/src/GC/lib/heap.cpp b/src/GC/lib/heap.cpp deleted file mode 100644 index fade27a..0000000 --- a/src/GC/lib/heap.cpp +++ /dev/null @@ -1,671 +0,0 @@ -#include -#include -#include -#include -#include - -#include "heap.hpp" - -#define time_now std::chrono::high_resolution_clock::now() -#define to_us std::chrono::duration_cast - -using std::cout, std::endl, std::vector, std::hex, std::dec; - -namespace GC -{ - /** - * This implementation of the() guarantees laziness - * on the instance and a correct destruction with - * the destructor. - * - * @returns The singleton object. - */ - Heap& Heap::the() - { - static Heap instance; - return instance; - } - - /** - * Initialises the heap singleton and saves the address - * of the calling function's stack frame as the stack_top. - * Presumeably this address points to the stack frame of - * the compiled LLVM executable after linking. - */ - void Heap::init() - { - Heap &heap = Heap::the(); - if (heap.profiler_enabled()) - Profiler::record(HeapInit); -// clang complains because arg for __b_f_a is not 0 which is "unsafe" -#pragma clang diagnostic ignored "-Wframe-address" - heap.m_stack_top = static_cast(__builtin_frame_address(1)); - heap.m_heap_top = heap.m_heap; - } - - void Heap::set_profiler_log_options(RecordOption flags) - { - Profiler::set_log_options(flags); - } - - /** - * Disposes the heap and the profiler at program exit - * which also triggers a heap log file dumped if the - * profiler is enabled. - */ - void Heap::dispose() - { - Heap &heap = Heap::the(); - if (heap.profiler_enabled()) - Profiler::dispose(); - } - - /** - * Allocates a given amount of bytes on the heap. - * - * @param size The amount of bytes to be allocated. - * - * @return A pointer to the address where the memory - * has been allocated. This pointer is supposed - * to be casted to and object pointer. - */ - void *Heap::alloc(size_t size) - { - auto a_start = time_now; - // Singleton - Heap &heap = Heap::the(); - bool profiler_enabled = heap.profiler_enabled(); - - if (profiler_enabled) - Profiler::record(AllocStart, size); - - if (size == 0) - { - cout << "Heap: Cannot alloc 0B. No bytes allocated." << endl; - return nullptr; - } - - if (heap.m_size + size > HEAP_SIZE) - { - // auto a_ms = to_us(c_start - a_start); - // Profiler::record(AllocStart, a_ms); - heap.collect(); - // If memory is not enough after collect, crash with OOM error - if (heap.m_size + size > HEAP_SIZE) - { - if (profiler_enabled) - Profiler::dispose(); - throw std::runtime_error(std::string("Error: Heap out of memory")); - } - } - - // If a chunk was recycled, return the old chunk address - Chunk *reused_chunk = heap.try_recycle_chunks(size); - if (reused_chunk != nullptr) - { - if (profiler_enabled) - Profiler::record(ReusedChunk, reused_chunk); - auto a_end = time_now; - auto a_ms = to_us(a_end - a_start); - Profiler::record(AllocStart, a_ms); - return static_cast(reused_chunk->m_start); - } - - // If no free chunks was found (reused_chunk is a nullptr), - // then create a new chunk - auto new_chunk = new Chunk(size, (uintptr_t *)(heap.m_heap + heap.m_size)); - - heap.m_size += size; - heap.m_allocated_chunks.push_back(new_chunk); - - if (profiler_enabled) - Profiler::record(NewChunk, new_chunk); - - auto a_end = time_now; - auto a_ms = to_us(a_end - a_start); - Profiler::record(AllocStart, a_ms); - return new_chunk->m_start; - } - - /** - * Tries to recycle used and freed chunks that are - * already allocated objects by the OS but freed - * from our Heap. This reduces the amount of GC - * objects slightly which saves time from malloc'ing - * memory from the OS. - * - * @param size Amount of bytes needed for the object - * which is about to be allocated. - * - * @returns If a chunk is found and recycled, a - * pointer to the allocated memory for - * the object is returned. If not, a - * nullptr is returned to signify no - * chunks were found. - */ - Chunk *Heap::try_recycle_chunks(size_t size) - { - Heap &heap = Heap::the(); - // Check if there are any freed chunks large enough for current request - for (size_t i = 0; i < heap.m_freed_chunks.size(); i++) - { - //auto chunk = Heap::get_at(heap.m_freed_chunks, i); - auto chunk = heap.m_freed_chunks[i]; - auto iter = heap.m_freed_chunks.begin(); - advance(iter, i); - if (chunk->m_size > size) - { - // Split the chunk, use one part and add the remaining part to - // the list of freed chunks - size_t diff = chunk->m_size - size; - auto chunk_complement = new Chunk(diff, chunk->m_start + chunk->m_size); - - heap.m_freed_chunks.erase(iter); - heap.m_freed_chunks.push_back(chunk_complement); - heap.m_allocated_chunks.push_back(chunk); - - return chunk; - } - else if (chunk->m_size == size) - { - // Reuse the whole chunk - heap.m_freed_chunks.erase(iter); - heap.m_allocated_chunks.push_back(chunk); - return chunk; - } - } - // If no chunk was found, return nullptr - return nullptr; - } - - /** - * Returns a bool whether the profiler is enabled - * or not. - * - * @returns True or false if the profiler is enabled - * or disabled respectively. - */ - bool Heap::profiler_enabled() { - Heap &heap = Heap::the(); - return heap.m_profiler_enable; - } - - /** - * Collection phase of the garbage collector. When - * an allocation is requested and there is no space - * left on the heap, a collection is triggered. This - * function is private so that the user cannot trigger - * a collection unneccessarily. - */ - void Heap::collect() - { - auto c_start = time_now; - - Heap &heap = Heap::the(); - - if (heap.profiler_enabled()) - Profiler::record(CollectStart); - - // get current stack frame - auto stack_bottom = reinterpret_cast(__builtin_frame_address(0)); - - if (heap.m_stack_top == nullptr) - throw std::runtime_error(std::string("Error: Heap is not initialized, read the docs!")); - - uintptr_t *stack_top = heap.m_stack_top; - - auto work_list = heap.m_allocated_chunks; - mark(stack_bottom, stack_top, work_list); - - sweep(heap); - - free(heap); - - auto c_end = time_now; - - Profiler::record(CollectStart, to_us(c_end - c_start)); - } - - /** - * Iterates through the stack, if an element on the stack points to a chunk, - * called a root chunk, that chunk is marked (i.e. reachable). - * Then it recursively follows all chunks which are possibly reachable from - * the root chunk and mark those chunks. - * If a chunk is marked it is removed from the worklist, since it's no longer of - * concern for this method. - * - * Time complexity: 0(N^2 * log(N)) as upper bound. - * Where N is either the size of the worklist or the size of - * the stack frame, depending on which is the largest. - * - * @param start Pointer to the start of the stack frame. - * @param end Pointer to the end of the stack frame. - * @param worklist The currently allocated chunks, which haven't been marked. - */ - void Heap::mark(uintptr_t *start, const uintptr_t* const end, vector &worklist) - { - Heap &heap = Heap::the(); - bool profiler_enabled = heap.m_profiler_enable; - if (profiler_enabled) - Profiler::record(MarkStart); - - // To find adresses thats in the worklist - for (; start <= end; start++) - { - auto it = worklist.begin(); - auto stop = worklist.end(); - while (it != stop) - { - Chunk *chunk = *it; - auto c_start = reinterpret_cast(chunk->m_start); - auto c_size = reinterpret_cast(chunk->m_size); - auto c_end = reinterpret_cast(c_start + c_size); - - // Check if the stack pointer points to something within the chunk - if (c_start <= *start && *start < c_end) - { - if (!chunk->m_marked) - { - if (profiler_enabled) - Profiler::record(ChunkMarked, chunk); - chunk->m_marked = true; - it = worklist.erase(it); - - // Recursively call mark, to see if the reachable chunk further points to another chunk - mark((uintptr_t *)c_start, (uintptr_t *)c_end, worklist); - } - else - { - ++it; - } - } - else - { - ++it; - } - } - } - } - - - /** - * Sweeps the heap, unmarks the marked chunks for the next cycle, - * adds the unmarked nodes to the list of freed chunks; to be freed. - * - * Time complexity: O(N^2), where N is the number of allocated chunks. - * It is quadratic, in the worst case, - * since each call to erase() is linear. - * - * @param heap Pointer to the heap singleton instance. - */ - void Heap::sweep(Heap &heap) - { - bool profiler_enabled = heap.m_profiler_enable; - if (profiler_enabled) - Profiler::record(SweepStart); - auto iter = heap.m_allocated_chunks.begin(); - // This cannot "iter != stop", results in seg fault, since the end gets updated, I think. - while (iter != heap.m_allocated_chunks.end()) - { - Chunk *chunk = *iter; - - // Unmark the marked chunks for the next iteration. - if (chunk->m_marked) - { - chunk->m_marked = false; - ++iter; - } - else - { - // Add the unmarked chunks to freed chunks and remove from - // the list of allocated chunks - if (profiler_enabled) - Profiler::record(ChunkSwept, chunk); - heap.m_freed_chunks.push_back(chunk); - iter = heap.m_allocated_chunks.erase(iter); - heap.m_size -= chunk->m_size; - } - } - } - - /** - * Frees chunks that was moved to the list m_freed_chunks - * by the sweep phase. If there are more than a certain - * amount of free chunks, delete the free chunks to - * avoid cluttering. - * - * Time complexity: O(N^2), where N is the freed chunks. - * If free_overlap() is called, it runs in O(N^2), - * otherwise O(N). - * - * @param heap Heap singleton instance, only for avoiding - * redundant calls to the singleton get - */ - void Heap::free(Heap &heap) - { - bool profiler_enabled = heap.m_profiler_enable; - if (profiler_enabled) - Profiler::record(FreeStart); - if (heap.m_freed_chunks.size() > FREE_THRESH) - { - bool profiler_enabled = heap.profiler_enabled(); - while (heap.m_freed_chunks.size()) - { - auto chunk = heap.m_freed_chunks.back(); - heap.m_freed_chunks.pop_back(); - if (profiler_enabled) - Profiler::record(ChunkFreed, chunk); - delete chunk; - } - } - // if there are chunks but not more than FREE_THRESH - else if (heap.m_freed_chunks.size()) - { - // essentially, always check for overlap between - // chunks before finishing the allocation - free_overlap(heap); - } - } - - /** - * Checks for overlaps between freed chunks of memory - * and removes overlapping chunks while prioritizing - * the chunks at lower addresses. - * - * Time complexity: O(N^2), where N is the number of freed chunks. - * At each iteration get_at() is called, which is linear. - * - * @param heap Heap singleton instance, only for avoiding - * redundant calls to the singleton get - * - * @note Maybe this should be changed to prioritizing - * larger chunks. Should remove get_at() to indexing, - * since that's constant. - */ - void Heap::free_overlap(Heap &heap) // borde göra en record(ChunkFreed) på onödiga chunks - { - std::vector filtered; - size_t i = 0; - //auto prev = Heap::get_at(heap.m_freed_chunks, i++); - auto prev = heap.m_freed_chunks[i++]; - prev->m_marked = true; - filtered.push_back(prev); - cout << filtered.back()->m_start << endl; - for (; i < heap.m_freed_chunks.size(); i++) - { - prev = filtered.back(); - //auto next = Heap::get_at(heap.m_freed_chunks, i); - auto next = heap.m_freed_chunks[i]; - auto p_start = (uintptr_t)(prev->m_start); - auto p_size = (uintptr_t)(prev->m_size); - auto n_start = (uintptr_t)(next->m_start); - if (n_start >= (p_start + p_size)) - { - next->m_marked = true; - filtered.push_back(next); - } - } - heap.m_freed_chunks.swap(filtered); - - bool profiler_enabled = heap.m_profiler_enable; - // After swap m_freed_chunks contains still available chunks - // and filtered contains all the chunks, so delete unused chunks - for (Chunk *chunk : filtered) - { - // if chunk was filtered away, delete it - if (!chunk->m_marked) - { - if (profiler_enabled) - Profiler::record(ChunkFreed, chunk); - delete chunk; - } - else - { - chunk->m_marked = false; - } - } - } - - void Heap::set_profiler(bool mode) - { - Heap &heap = Heap::the(); - heap.m_profiler_enable = mode; - } - -#ifdef HEAP_DEBUG - /** - * Prints the result of Heap::init() and a dummy value - * for the current stack frame for reference. - */ - void Heap::check_init() - { - Heap &heap = Heap::the(); - cout << "Heap addr:\t" << &heap << "\n"; - cout << "GC m_stack_top:\t" << heap.m_stack_top << "\n"; - auto stack_bottom = reinterpret_cast(__builtin_frame_address(0)); - cout << "GC stack_bottom:\t" << stack_bottom << endl; - } - - /** - * Conditional collection, only to be used in debugging - * - * @param flags Bitmap of flags - */ - void Heap::collect(CollectOption flags) - { - set_profiler(true); - - Heap &heap = Heap::the(); - - if (heap.m_profiler_enable) - Profiler::record(CollectStart); - - cout << "DEBUG COLLECT\nFLAGS: "; - if (flags & MARK) - cout << "\n - MARK"; - if (flags & SWEEP) - cout << "\n - SWEEP"; - if (flags & FREE) - cout << "\n - FREE"; - cout << "\n"; - - // get the frame adress, whwere local variables and saved registers are located - auto stack_bottom = reinterpret_cast(__builtin_frame_address(0)); - cout << "Stack bottom in collect:\t" << stack_bottom << "\n"; - uintptr_t *stack_top = heap.m_stack_top; - - cout << "Stack end in collect:\t " << stack_top << endl; - auto work_list = heap.m_allocated_chunks; - - if (flags & MARK) - mark(stack_bottom, stack_top, work_list); - - if (flags & SWEEP) - sweep(heap); - - if (flags & FREE) - free(heap); - } - - // Mark child references from the root references - void mark_test(vector &worklist) - { - while (worklist.size() > 0) - { - Chunk *ref = worklist.back(); - worklist.pop_back(); - Chunk *child = (Chunk *)ref; // this is probably not correct - if (child != nullptr && !child->m_marked) - { - child->m_marked = true; - worklist.push_back(child); - mark_test(worklist); - } - } - } - - // Mark the root references and look for child references to them - void mark_from_roots(uintptr_t *start, const uintptr_t *end) - { - vector worklist; - for (; start > end; start--) - { - if (*start % 8 == 0) - { // all pointers must be aligned as double words - Chunk *ref = (Chunk *)*start; - if (ref != nullptr && !ref->m_marked) - { - ref->m_marked = true; - worklist.push_back(ref); - mark_test(worklist); - } - } - } - } - - // For testing purposes - void Heap::print_line(Chunk *chunk) - { - cout << "Marked: " << chunk->m_marked << "\nStart adr: " << chunk->m_start << "\nSize: " << chunk->m_size << " B\n" - << endl; - } - - void Heap::print_worklist(std::vector &list) - { - for (auto cp : list) - cout << "Chunk at:\t" << cp->m_start << "\nSize:\t\t" << cp->m_size << "\n"; - cout << endl; - } - - void Heap::print_contents() - { - Heap &heap = Heap::the(); - if (heap.m_allocated_chunks.size()) - { - cout << "\nALLOCATED CHUNKS #" << dec << heap.m_allocated_chunks.size() << endl; - for (auto chunk : heap.m_allocated_chunks) - print_line(chunk); - } - else - { - cout << "NO ALLOCATIONS\n" << endl; - } - if (heap.m_freed_chunks.size()) - { - cout << "\nFREED CHUNKS #" << dec << heap.m_freed_chunks.size() << endl; - for (auto fchunk : heap.m_freed_chunks) - print_line(fchunk); - } - else - { - cout << "NO FREED CHUNKS" << endl; - } - } - - void Heap::print_summary() - { - Heap &heap = Heap::the(); - if (heap.m_allocated_chunks.size()) - { - cout << "\nALLOCATED CHUNKS #" << dec << heap.m_allocated_chunks.size() << endl; - } - else - { - cout << "NO ALLOCATIONS\n" << endl; - } - if (heap.m_freed_chunks.size()) - { - cout << "\nFREED CHUNKS #" << dec << heap.m_freed_chunks.size() << endl; - } - else - { - cout << "NO FREED CHUNKS" << endl; - } - } - - void Heap::print_allocated_chunks(Heap *heap) { - cout << "--- Allocated Chunks ---\n" << endl; - for (auto chunk : heap->m_allocated_chunks) { - print_line(chunk); - } - } - - Chunk *Heap::try_recycle_chunks_new(size_t size) - { - Heap &heap = Heap::the(); - // Check if there are any freed chunks large enough for current request - for (size_t i = 0; i < heap.m_freed_chunks.size(); i++) - { - auto chunk = heap.m_freed_chunks[i]; //Heap::get_at(heap.m_freed_chunks, i); - auto iter = heap.m_freed_chunks.begin(); - //advance(iter, i); - i++; - if (chunk->m_size > size) - { - // Split the chunk, use one part and add the remaining part to - // the list of freed chunks - size_t diff = chunk->m_size - size; - auto chunk_complement = new Chunk(diff, chunk->m_start + chunk->m_size); - - heap.m_freed_chunks.erase(iter); - heap.m_freed_chunks.push_back(chunk_complement); - heap.m_allocated_chunks.push_back(chunk); - - return chunk; - } - else if (chunk->m_size == size) - { - // Reuse the whole chunk - heap.m_freed_chunks.erase(iter); - heap.m_allocated_chunks.push_back(chunk); - return chunk; - } - } - // If no chunk was found, return nullptr - return nullptr; - } - - void Heap::free_overlap_new(Heap &heap) // borde göra en record(ChunkFreed) på onödiga chunks - { - std::vector filtered; - size_t i = 0; - auto prev = heap.m_freed_chunks[i++]; //Heap::get_at(heap.m_freed_chunks, i++); - prev->m_marked = true; - filtered.push_back(prev); - cout << filtered.back()->m_start << endl; - for (; i < heap.m_freed_chunks.size(); i++) - { - prev = filtered.back(); - auto next = heap.m_freed_chunks[i]; //Heap::get_at(heap.m_freed_chunks, i); - auto p_start = (uintptr_t)(prev->m_start); - auto p_size = (uintptr_t)(prev->m_size); - auto n_start = (uintptr_t)(next->m_start); - if (n_start >= (p_start + p_size)) - { - next->m_marked = true; - filtered.push_back(next); - } - } - heap.m_freed_chunks.swap(filtered); - - bool profiler_enabled = heap.m_profiler_enable; - // After swap m_freed_chunks contains still available chunks - // and filtered contains all the chunks, so delete unused chunks - for (Chunk *chunk : filtered) - { - // if chunk was filtered away, delete it - if (!chunk->m_marked) - { - if (profiler_enabled) - Profiler::record(ChunkFreed, chunk); - delete chunk; - } - else - { - chunk->m_marked = false; - } - } - } - -#endif -} \ No newline at end of file diff --git a/src/GC/lib/profiler.cpp b/src/GC/lib/profiler.cpp deleted file mode 100644 index ae31f0d..0000000 --- a/src/GC/lib/profiler.cpp +++ /dev/null @@ -1,311 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#include "chunk.hpp" -#include "event.hpp" -#include "profiler.hpp" - -// #define MAC_OS - -namespace GC -{ - Profiler& Profiler::the() - { - static Profiler instance; - return instance; - } - - RecordOption Profiler::log_options() - { - Profiler &prof = Profiler::the(); - return prof.flags; - } - - void Profiler::set_log_options(RecordOption flags) - { - Profiler &prof = Profiler::the(); - prof.flags = flags; - } - - void Profiler::record_data(GCEvent *event) - { - Profiler &prof = Profiler::the(); - prof.m_events.push_back(event); - - if (prof.m_last_prof_event->m_type == event->get_type()) - prof.m_last_prof_event->m_n++; - else - { - prof.m_prof_events.push_back(prof.m_last_prof_event); - prof.m_last_prof_event = new ProfilerEvent(event->get_type()); - } - } - - /** - * Records an event independent of a chunk. - * - * @param type The type of event to record. - */ - void Profiler::record(GCEventType type) - { - Profiler &prof = Profiler::the(); - if (prof.flags & type) - Profiler::record_data(new GCEvent(type)); - // auto event = new GCEvent(type); - // auto profiler = Profiler::the(); - // profiler.m_events.push_back(event); - } - - /** - * This overload is only used with an AllocStart - * event. - * - * @param type The type of event to record. - * - * @param size The size of requested to alloc(). - */ - void Profiler::record(GCEventType type, size_t size) - { - Profiler &prof = Profiler::the(); - if (prof.flags & type) - Profiler::record_data(new GCEvent(type, size)); - // auto event = new GCEvent(type, size); - // auto profiler = Profiler::the(); - // profiler.m_events.push_back(event); - } - - void Profiler::dump_trace() - { - Profiler &prof = Profiler::the(); - if (prof.flags & FunctionCalls) - dump_prof_trace(); - else - dump_chunk_trace(); - } - - /** - * Records an event related to a chunk. - * - * @param type The type of event to record. - * - * @param chunk The chunk the event is connected - * to. - */ - void Profiler::record(GCEventType type, Chunk *chunk) - { - // Create a copy of chunk to store in the profiler - // because in free() chunks are deleted and cannot - // be referenced by the profiler. These copied - // chunks are deleted by the profiler on dispose(). - Profiler &prof = Profiler::the(); - if (prof.flags & type) - { - auto chunk_copy = new Chunk(chunk); - auto event = new GCEvent(type, chunk_copy); - Profiler::record_data(event); - } - // auto profiler = Profiler::the(); - // profiler.m_events.push_back(event); - } - - void Profiler::record(GCEventType type, std::chrono::microseconds time) - { - Profiler &prof = Profiler::the(); - if (type == AllocStart) - { - prof.alloc_time += time; - } - else if (type == CollectStart) - { - prof.collect_time += time; - } - } - - void Profiler::dump_prof_trace() - { - Profiler &prof = Profiler::the(); - prof.m_prof_events.push_back(prof.m_last_prof_event); - auto start = prof.m_prof_events.begin(); - auto end = prof.m_prof_events.end(); - int allocs = 0, collects = 0; - - char buffer[22]; - std::ofstream fstr = prof.create_file_stream(); - - while (start != end) - { - auto event = *start++; - - if (event->m_type == AllocStart) - allocs += event->m_n; - else if (event->m_type == CollectStart) - collects += event->m_n; - - fstr << "\n--------------------------------\n" - << Profiler::type_to_string(event->m_type) << " " - << event->m_n << " times:"; - } - fstr << "\n--------------------------------"; - - fstr << "\n\nTime spent on allocations:\t" << prof.alloc_time.count() << " microseconds" - << "\nAllocation cycles:\t" << allocs - << "\nTime spent on collections:\t" << prof.collect_time.count() << " microseconds" - << "\nCollection cycles:\t" << collects - << "\n--------------------------------"; - } - - /** - * Prints the history of the recorded events - * to a log file in the /tests/logs folder. - */ - void Profiler::dump_chunk_trace() - { - Profiler &prof = Profiler::the(); - auto start = prof.m_events.begin(); - auto end = prof.m_events.end(); - - // Buffer for timestamp - char buffer[22]; - - while (start != end) - { - auto event = *start++; - auto e_type = event->get_type(); - - prof.print_chunk_event(event, buffer); - } - } - - void Profiler::print_chunk_event(GCEvent *event, char buffer[22]) - { - Profiler &prof = Profiler::the(); - // File output stream - std::ofstream fstr = prof.create_file_stream(); - std::time_t tt = event->get_time_stamp(); - std::tm *btm = std::localtime(&tt); - std::strftime(buffer, 22, "%a %T", btm); - - fstr << "--------------------------------\n" - << buffer - << "\nEvent:\t" << Profiler::type_to_string(event->get_type()); - // event->type_to_string(); - - - - const Chunk *chunk = event->get_chunk(); - - if (event->get_type() == AllocStart) - { - fstr << "\nSize: " << event->get_size(); - } - else if (chunk) - { - fstr << "\nChunk: " << chunk->m_start - << "\n Size: " << chunk->m_size - << "\n Mark: " << chunk->m_marked; - } - fstr << "\n"; - } - - /** - * Deletes the profiler singleton and all - * the events recorded after recording - * the ProfilerDispose event and dumping - * the history to a log file. - */ - void Profiler::dispose() - { - Profiler::record(ProfilerDispose); - Profiler::dump_trace(); - } - - /** - * Creates a filestream for the future - * log file to print the history to in - * dump_trace(). - * - * @returns The output stream to the file. - */ - std::ofstream Profiler::create_file_stream() - { - // get current time - std::time_t tt = std::time(NULL); - std::tm *ptm = std::localtime(&tt); - - // format to string - char buffer[32]; - std::strftime(buffer, 32, "/log_%a_%H_%M_%S.txt", ptm); - std::string filename(buffer); - - // const std::string ABS_PATH = "/home/virre/dev/systemF/org/language/src/GC/"; - // // const std::string ABS_PATH = "/Users/valtermiari/Desktop/DV/Bachelors/code/language/src/GC"; - // std::string fullpath = ABS_PATH + filename; - - const std::string fullpath = get_log_folder() + filename; - - std::ofstream fstr(fullpath); - return fstr; - } - - /** - * This function retrieves the path to the folder - * of the executable to use for log files. - * - * @returns The path to the logs folder. - * - * @throws A runtime error if the call - * to readlink() fails. - */ - std::string Profiler::get_log_folder() - { -#ifndef MAC_OS - char buffer[1024]; - // chars read from path - ssize_t len = readlink("/proc/self/exe", buffer, sizeof(buffer)-1); - - // if readlink fails - if (len == -1) - { - throw std::runtime_error(std::string("Error: readlink failed on '/proc/self/exe/'")); - } - - buffer[len] = '\0'; - - // convert to string for string operators - auto path = std::string(buffer); - - // remove filename - size_t last_slash = path.find_last_of('/'); - std::string folder = path.substr(0, last_slash); -#else - auto folder = std::string("/Users/valtermiari/Desktop/DV/Bachelors/code/language/src/GC/tests"); -#endif - return folder + "/logs"; - } - - const char *Profiler::type_to_string(GCEventType type) - { - switch (type) - { - case HeapInit: return "HeapInit"; - case AllocStart: return "AllocStart"; - case CollectStart: return "CollectStart"; - case MarkStart: return "MarkStart"; - case ChunkMarked: return "ChunkMarked"; - case ChunkSwept: return "ChunkSwept"; - case ChunkFreed: return "ChunkFreed"; - case NewChunk: return "NewChunk"; - case ReusedChunk: return "ReusedChunk"; - case ProfilerDispose: return "ProfilerDispose"; - case SweepStart: return "SweepStart"; - case FreeStart: return "FreeStart"; - default: return "[Unknown]"; - } - } -} \ No newline at end of file diff --git a/src/GC/tests/MarkSweep.cpp b/src/GC/tests/MarkSweep.cpp deleted file mode 100644 index ab219d2..0000000 --- a/src/GC/tests/MarkSweep.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include -#include -#define HEAP_SIZE 65536 // Arbitrary for now, 2^16 -using namespace std; - -/* A simple mark and sweep algorithm */ - -// Shouldn't be exposed. For now, it is -struct ObjectHeader { - size_t size = sizeof(this); - bool marked = false; - -}; - -struct Object : ObjectHeader { - char name; // should be something like id, but for testing sake its char - Object* child; - // Object(char name_) {} - Object(char name_, Object* child_) { - name = name_; - child = child_; - } -}; - -// Representing the heap as a simple struct for now -struct Heap { - Object heap_space[HEAP_SIZE]; -}; - -// For now it assumes that it is given root objects from the start, no root finding included -class MarkSweep { - public: - void mark(Object* obj) { - if (!markedBit(obj)) { - markBit(obj); - Object* ref = obj->child; - if (ref != nullptr) { - mark(ref); - } - } - } - - void sweep(vector worklist) { - for (Object* obj: worklist) { - if (!markedBit(obj) && obj != nullptr) { - delete obj; - } - } - } - - private: - bool markedBit(Object* obj) { - return obj->marked; - } - - void markBit(Object* obj) { - obj->marked = true; - } - -}; - -int main() { - Object* b = new Object('B', nullptr); - // b->name = 'B'; - // b->child = nullptr; - Object* c = new Object('C', b); - // c->name = 'C'; - // c->child = b; // c -> d - Object* d = new Object('D', nullptr); - // d->name = 'D'; - // d->child = nullptr; - - //Heap* heap = new Heap{*c, *b, *d}; - vector worklist = {c, b, d}; - MarkSweep* gc = new MarkSweep(); - - gc->mark(c); - cout << "Expected 1, got: " << b->marked << '\n'; - cout << "Expected 1, got: " << c->marked << '\n'; - cout << "Expected 0, got: " << d->marked << '\n'; - - gc->sweep(worklist); - cout << b->name << '\n'; - cout << c->name << '\n'; - cout << d->name << '\n'; // The object at d is now deleted (freed) - return 0; -} \ No newline at end of file diff --git a/src/GC/tests/advance.cpp b/src/GC/tests/advance.cpp deleted file mode 100644 index 89dca71..0000000 --- a/src/GC/tests/advance.cpp +++ /dev/null @@ -1,83 +0,0 @@ -#include -#include -#include -#include -#include -#include - -// void time_test() -// { -// using TimeStamp = std::chrono::_V2::system_clock::time_point; - -// std::list l; -// char c = 'a'; -// for (int i = 1; i <= 5; i++) { -// l.push_back(c++); -// } - -// auto iter = l.begin(); -// auto stop = l.end(); - -// while (iter != stop) { -// std::cout << *iter << " "; - -// iter++; -// } -// std::cout << std::endl; -// iter = l.begin(); -// while (*iter != *stop) { -// std::cout << *iter << " "; -// iter++; -// } -// std::cout << std::endl; - -// std::cout << "rebased" << std::endl; -// std::cout << "iter: " << *iter << "\nstop: " << *stop << std::endl; - -// TimeStamp ts = std::chrono::system_clock::now(); -// std::time_t tt = std::chrono::system_clock::to_time_t(ts); -// std::string tstr = std::ctime(&tt); -// tstr.resize(tstr.size()-1); -// std::cout << tstr << std::endl; -// } - -void iter_test() -{ - std::list list; - list.push_back(1); - list.push_back(2); - list.push_back(4); - list.push_back(5); - - auto iter = list.begin(); - - while (iter != list.end()) - { - if (*iter == 4) - { - iter = list.erase(iter); - std::cout << *iter << "\n"; - list.insert(iter, 3); - // list.insert(iter, 3); - // std::cout << "n: " << *(++iter) << "\n"; - // iter = list.erase(++iter); - } - iter++; - } - - for (int i : list) - { - std::cout << i << " "; - } - std::cout << std::endl; -} - - - -int main() { - std::cout << "hello" << std::endl; - - iter_test(); - - return 0; -} \ No newline at end of file diff --git a/src/GC/tests/alloc_free.cpp b/src/GC/tests/alloc_free.cpp deleted file mode 100644 index 4a0f6f8..0000000 --- a/src/GC/tests/alloc_free.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include - -#include "heap.hpp" - -struct Obj { - int a; - int b; - int c; -}; - -int main() { - GC::Heap::init(); - Obj *obj; - - for (int i = 0; i < 4; i++) { - obj = static_cast(GC::Heap::alloc(sizeof(Obj))); - obj->a = i * i + 1; - obj->b = i * i + 2; - obj->c = i * i + 3; - } - - // heap->force_collect(); - auto heap = GC::Heap::debug_the(); - heap->collect(COLLECT_ALL); - - std::cout << obj->a << ", " << obj->b << ", " << obj->c << std::endl; - - //delete heap; - GC::Heap::dispose(); - - return 0; -} \ No newline at end of file diff --git a/src/GC/tests/alloc_free_list.cpp b/src/GC/tests/alloc_free_list.cpp deleted file mode 100644 index a0d1a27..0000000 --- a/src/GC/tests/alloc_free_list.cpp +++ /dev/null @@ -1,250 +0,0 @@ -#include -#include - -#include "heap.hpp" - -using GC::Chunk; - -void alloc_test(); -void add_to_free_list(Chunk *chunk); -void merge_free_list(Chunk *chunk, bool do_merge); -void do_merge_list(); -void print_free_list(); - -std::list m_free_list; - -int main() -{ - alloc_test(); - - // std::list test; - - // test.push_back(1); - // test.push_back(2); - // test.push_back(3); - // test.push_back(4); - // test.push_back(5); - - // auto iter = test.begin(); - - // std::cout << "First? " << *(iter++) << "\n"; - // std::cout << "Second? " << *(iter--) << "\n"; - // std::cout << "First? " << *iter << std::endl; - - // auto i = test.begin(); - // while (i != test.end()) - // { - // std::cout << *i << " "; - // ++i; - // } - - // if (i == test.end()) - // std::cout << "great success!"; - - // std::cout << std::endl; - - return 0; -} - -void alloc_test() -{ - auto tmp = static_cast(__builtin_frame_address(0)); - - auto c1 = new Chunk((size_t)(8), tmp); - auto c2 = new Chunk((size_t)(4), c1->m_start + (size_t)(8)); - auto c3 = new Chunk((size_t)(16), c2->m_start + (size_t)(4)); - auto c4 = new Chunk((size_t)(4), c3->m_start + (size_t)(16)); - auto c5 = new Chunk((size_t)(32), c4->m_start + (size_t)(4)); - - // std::cout << "test: " << (uintptr_t *)(tmp + (size_t)(2)) << std::endl; - - std::cout << "tmp: " << tmp << "\ntmp: " << (tmp + (size_t)(28)) << std::endl; - - // add_to_free_list(c1); - // add_to_free_list(c2); - // add_to_free_list(c3); - // add_to_free_list(c4); - // add_to_free_list(c5); - - merge_free_list(c1, false); - merge_free_list(c2, false); - merge_free_list(c3, false); - merge_free_list(c4, false); - merge_free_list(c5, false); - - std::cout << "----- BEFORE MERGE ----------------------"; - // print_free_list(); - - do_merge_list(); - - std::cout << "----- AFTER MERGE -----------------------"; - // print_free_list(); -} - -void add_to_free_list(Chunk *chunk) -{ - Chunk *curr; - auto iter = m_free_list.begin(); - uintptr_t *prev_start = nullptr; - uintptr_t *prev_end = nullptr; - - if (m_free_list.size() == 0) - { - m_free_list.push_back(chunk); - return; - } - - while (iter != m_free_list.end()) - { - curr = *iter; - - // If the curr chunk is aligned before param - if (curr->m_start + curr->m_size == chunk->m_start) - { - Chunk *merged = new Chunk( - curr->m_size + chunk->m_size, - curr->m_start); - iter = m_free_list.erase(iter); - m_free_list.insert(iter, merged); - return; - } - - // If the curr chunk is aligned after param - if (chunk->m_start + chunk->m_size == curr->m_start) - { - Chunk *merged = new Chunk( - curr->m_size + chunk->m_size, - chunk->m_start); - iter = m_free_list.erase(iter); - m_free_list.insert(iter, merged); - return; - } - - // If the first chunk starts after param - if (prev_start == nullptr && curr->m_start > chunk->m_start) - { - m_free_list.insert(iter, chunk); - return; - } - - if (prev_end < chunk->m_start && (chunk->m_start + chunk->m_size) < curr->m_start) - { - m_free_list.insert(iter, chunk); - return; - } - - prev_start = curr->m_start; - prev_end = prev_start + curr->m_size; - iter++; - } - - // This is only reachable if the chunk is at the end - m_free_list.push_back(chunk); -} - -void merge_free_list(Chunk *chunk, bool do_merge) -{ - auto i = m_free_list.begin(); - uintptr_t *prev_start = nullptr, *prev_end; - bool chunk_inserted = false; - - while (i != m_free_list.end()) - { - - // if chunk is left-aligned - if ((*i)->m_start + (*i)->m_size == chunk->m_start) - { - m_free_list.insert(++i, chunk); - chunk_inserted = true; - break; - } - - // if chunk is right-aligned - if (chunk->m_start + chunk->m_size == (*i)->m_start) - { - m_free_list.insert(i, chunk); - chunk_inserted = true; - break; - } - - // is new first - if (prev_start == nullptr && (*i)->m_start > chunk->m_start) - { - m_free_list.insert(i, chunk); - chunk_inserted = true; - break; - } - - // if between chunks - if (prev_end < chunk->m_start && (chunk->m_start + chunk->m_size) < (*i)->m_start) - { - m_free_list.insert(i, chunk); - chunk_inserted = true; - break; - } - - prev_start = (*i)->m_start; - prev_end = (*i)->m_start + (*i)->m_size; - i++; - } - - // is new last - if (!chunk_inserted && i == m_free_list.end()) - m_free_list.push_back(chunk); - - if (do_merge) - do_merge_list(); -} - -void do_merge_list() -{ - std::cout << "DO MERGE" << std::endl; - auto i = m_free_list.begin(); - Chunk *prev = *(i++), *curr; - print_free_list(); - - while (i != m_free_list.end()) - { - curr = *i; - - if ((prev->m_start + prev->m_size) == curr->m_start) - { - Chunk *merged = new Chunk( - prev->m_size + curr->m_size, - prev->m_start - ); - - // replace current and previous with merged - i = m_free_list.erase(i); - i = m_free_list.erase(--i); - m_free_list.insert(i, merged); - - prev = merged; - } - else - { - prev = curr; - i++; - } - print_free_list(); - } - print_free_list(); -} - -void print_free_list() -{ - std::cout << "free-list count: " << m_free_list.size() << "\n"; - - auto iter = m_free_list.begin(); - size_t cnt = 1; - - while (iter != m_free_list.end()) - { - std::cout << "C" << cnt << ":\n\tstart: " << (*iter)->m_start - << "\n\tsize: " << (*iter)->m_size << "\n"; - iter++; - cnt++; - } - - std::cout << std::endl; -} \ No newline at end of file diff --git a/src/GC/tests/events.cpp b/src/GC/tests/events.cpp deleted file mode 100644 index e517092..0000000 --- a/src/GC/tests/events.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include - -using namespace std; -// broken :( -// [event_source(native)] -class ESource { -public: - __event void TestEvent(int eValue); -}; - -// [event_receiver(native)] -class EReceiver { -public: - void Handler1(int eValue) { - cout << "Handler1 with: " << eValue << endl; - } - - void Handler2(int eValue) { - cout << "Handler2 with: " << eValue << endl; - } - - void hookEvent(ESource *eSource) { - __hook(&ESource::TestEvent, eSource, &EReceiver::Handler1); - __hook(&ESource::TestEvent, eSource, &EReceiver::Handler2); - } - - void unhookEvent(ESource *eSource) { - __unhook(&ESource::TestEvent, eSource, &EReceiver::Handler1); - __unhook(&ESource::TestEvent, eSource, &EReceiver::Handler2); - } -}; - -int main() { - - ESource src; - EReceiver rcv; - - rcv.hookEvent(&src); - __raise src.TestEvent(12); - rcv.unhookEvent(&src); - - return 0; -} \ No newline at end of file diff --git a/src/GC/tests/extern_lib.cpp b/src/GC/tests/extern_lib.cpp deleted file mode 100644 index fa30051..0000000 --- a/src/GC/tests/extern_lib.cpp +++ /dev/null @@ -1,94 +0,0 @@ -#include -#include - -#include "heap.hpp" - -GC::Heap& singleton_test(); -void init_gc(GC::Heap& heap); -void frame_test(GC::Heap& heap); - -int main() { - std::cout << "in main" << std::endl; - GC::Heap &heap = singleton_test(); - - init_gc(heap); - frame_test(heap); - - heap.dispose(); - - return 0; -} - -/** - * This test is supposed to determine if the singleton pattern - * implementation is working correctly. This test passes if the - * first and second call prints the same memory address. - * - * Result: pass - * - * @return Pointer to the Heap singleton instance -*/ -GC::Heap& singleton_test() { - std::cout << "TESTING SINGLETON INSTANCES" << std::endl; - std::cout << "===========================" << std::endl; - std::cout << "Call 1:\t" << &GC::Heap::the() << std::endl; // First call which initializes the singleton instance - GC::Heap &heap = GC::Heap::the(); // Second call which should return the initialized instance - std::cout << "Call 2:\t" << &heap << std::endl; - std::cout << "===========================" << std::endl; - return heap; -} - - -/** - * This test calls Heap::init() which saves the stack-frame - * address from the calling function (this function). - * Heap::init() is supposed to be called at the absolute - * start of the program to save the address of the - * topmost stack frame. This test doesn't do anything - * but prepares for the next test(s). - * - * @param heap The Heap pointer to the singleton instance. - * -*/ -void init_gc(GC::Heap& heap){ - std::cout << "\n\n INITIALIZING THE HEAP" << std::endl; - std::cout << "===========================" << std::endl; - heap.init(); - heap.set_profiler(true); - std::cout << "===========================" << std::endl; -} - -/** - * This function tests the functionality of the intrinsic - * function `__builtin_frame_address` which returns the - * address of the corresponding level of stack frame. - * When given a param of 0, it returns the current stack frame. - * When given a param of 1, it returns the previous stack - * frame, and so on. - * - * This test passes on two conditions: - * 1) if the address of the current frame is smaller than - * the address of the previous frame (assumed). - * 2) if the previous frame has the same address as the one - * saved in the Heap instance after running Heap::init(). - * - * Result: pass - * - * @param heap The Heap instance -*/ -void frame_test(GC::Heap& heap) { - std::cout << "\n\n TESTING FRAME ADDRESSES" << std::endl; - std::cout << "===========================" << std::endl; - -#pragma clang diagnostic ignored "-Wframe-address" // clang++ directive to ignore warnings about __b_f_a - auto curr_frame = reinterpret_cast(__builtin_frame_address(0)); // addr of curr stack frame - std::cout << "Current stack frame:\t" << curr_frame << std::endl; -#pragma clang diagnostic ignored "-Wframe-address" - auto prev_frame = reinterpret_cast(__builtin_frame_address(1)); // addr of prev stack frame - std::cout << "Previous stack frame:\t" << prev_frame << std::endl; - - heap.check_init(); // prints the saved absolute top of the stack - // auto alloced = heap->alloc(sizeof(unsigned long)); - - std::cout << "===========================" << std::endl; -} \ No newline at end of file diff --git a/src/GC/tests/file.cpp b/src/GC/tests/file.cpp deleted file mode 100644 index f4a0373..0000000 --- a/src/GC/tests/file.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include -#include -#include -#include -#include -#include - -void time_string(char *buffer); -void print_log_file(const std::string TESTS_PATH); -void readlink_test(); -void null_test(); - -int main() -{ - // char time_buffer[31]; - // time_string(time_buffer); - - // const std::string TESTS_PATH = "/home/virre/dev/systemF/org/language/src/GC/tests/"; - // print_log_file(TESTS_PATH); - - // readlink_test(); - - null_test(); - - return 0; -} - -void time_string(char *const buffer) -{ - std::time_t tt = std::time(NULL); - std::tm *ptm = std::localtime(&tt); - std::strftime(buffer, 31, "/logs/log_%a_%H_%M_%S.txt", ptm); - std::cout << buffer << std::endl; -} - -void print_log_file(const std::string TESTS_PATH) -{ - std::string path = TESTS_PATH + "/testlog.txt"; - - std::ofstream testF(path); - - testF << "hellow york"; - - testF.close(); -} - -void readlink_test() -{ - char buffer[1024]; - ssize_t len = readlink("/proc/self/exe", buffer, sizeof(buffer)-1); - if (len == -1) - { - std::cout << "readlink error" << std::endl; - return; - } - - buffer[len] = '\0'; - std::cout << "readlink:\n" << "'''" << buffer << "'''"; // << std::endl; - - auto path = std::string(buffer); - std::cout << path << "\nlen: " << path.size() << "\ncap:" << path.capacity(); - - size_t last_slash = path.find_last_of('/'); - std::string folder = path.substr(0, last_slash); - - std::cout << "\n" << folder; - - std::string log_path = folder + "/log_file_bla.txt"; - std::cout << "\n" << log_path << std::endl; - -} - -void null_test() { - int *p = nullptr; - - std::cout << "P: " << nullptr << std::endl; -} \ No newline at end of file diff --git a/src/GC/tests/game.cpp b/src/GC/tests/game.cpp deleted file mode 100644 index e01ec8e..0000000 --- a/src/GC/tests/game.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include - -#include "player.hpp" -#include "heap.hpp" - -#define X_LENGTH 1000 -#define Y_LENGTH 500 -#define MAX_PLAYERS 100 - -/* -* Description: -* This class is designed to test the Garbage Collector with a mock game, -* that consists of several live objects in the form of players, that in -* turn consists partially of Point objects. -* -* Goal: -* to find out if all the objects are allocated successfully -* and to see if they are reachable from the stack, i.e. they can get marked. -* -* Result: -* all objects gets allocated, but only Game object gets marked. -*/ - - -class Game { - -private: - - std::vector *players; - //std::vector *players; - Point *dimensions; - -public: - - Game() { - dimensions->x = X_LENGTH; - dimensions->y = Y_LENGTH; - } - - void init() { - players = static_cast*>(GC::Heap::alloc(sizeof(Player*) * MAX_PLAYERS)); - //players = static_cast*>(GC::Heap::alloc(sizeof(Player) * MAX_PLAYERS)); - dimensions = static_cast(GC::Heap::alloc(sizeof(Point))); - dimensions->x = X_LENGTH; - dimensions->y = Y_LENGTH; - } - - void add_player(Player *p) { - players->push_back(p); - } - - Player* create_player(string *s, Point *pos, Point *size, Point *dir) { - Player *p = static_cast(GC::Heap::alloc(sizeof(Player))); - /* - Cannot allocate by new, since it the allocates outside of "out" heap. That also lead so us having to - define an alternative constructor, that's actually a method. Since our "alloc" does not call the constructor - of the object - */ - p->init(s, pos, size, dir); - return p; - } - - void create_players(int nr) { - for (int i = 0; i < nr; i++) { - - std::string *str = static_cast(GC::Heap::alloc(sizeof(std::string))); - Point *pos = static_cast(GC::Heap::alloc(sizeof(Point))); - Point *size = static_cast(GC::Heap::alloc(sizeof(Point))); - Point *dir = static_cast(GC::Heap::alloc(sizeof(Point))); - - Player *p = create_player(str, pos, size, dir); - add_player(p); - } - } - -}; - -int main() { - GC::Heap::init(); - GC::Heap *gc = GC::Heap::debug_the(); - gc->check_init(); - - Game *game = static_cast(gc->alloc(sizeof(Game))); - game->init(); - game->create_players(2); - - std::cout << "Player size: " << sizeof(Player) << std::endl; - std::cout << "Game size: " << sizeof(Game) << std::endl; - std::cout << "Point size: " << sizeof(Point) << std::endl; - - gc->collect(GC::MARK); - gc->print_contents(); - - return 0; -} \ No newline at end of file diff --git a/src/GC/tests/h_test.cpp b/src/GC/tests/h_test.cpp deleted file mode 100644 index 625e36a..0000000 --- a/src/GC/tests/h_test.cpp +++ /dev/null @@ -1,107 +0,0 @@ -#include -#include - -#include "heap.hpp" - -using std::cout, std::endl; - -struct Node { - int id; - Node *child; -}; - -Node *create_chain(int depth) { - cout << "entering create_chain"; - std::vector nodes; - if (depth > 0) { - Node *last_node = static_cast(GC::Heap::alloc(sizeof(Node))); - last_node->id = depth; - last_node->child = nullptr; - nodes.push_back(last_node); - for (size_t i = 0; i < depth; i++) { - Node *node = static_cast(GC::Heap::alloc(sizeof(Node))); - node->id = depth-i; - node->child = nodes[i]; - nodes.push_back(node); - } - cout << "\nexiting create_chain" << endl; - return nodes[depth]; - } - else - return 0; -} - -void create_array(size_t size) { - int *arr = static_cast(GC::Heap::alloc(sizeof(int) * size)); -} - -void detach_pointer(long **ptr) { - cout << "entering detach_pointer"; - long *dummy_ptr = nullptr; - *ptr = dummy_ptr; - cout << "\nexiting detach_pointer" << endl; -} - -Node *test_chain(int depth, bool detach) { - cout << "entering test_chain"; - auto stack_start = reinterpret_cast(__builtin_frame_address(0)); - - Node *node_chain = create_chain(depth); - if (detach) - node_chain->child = nullptr; - - cout << "\nexiting test_chain" << endl; - return node_chain; -} - -void test_some_types() { - cout << "entering test_some_types" << endl; - auto stack_start = reinterpret_cast(__builtin_frame_address(0)); - std::cout << "Stack start from test_some_types:\t" << stack_start << std::endl; - - long *l = static_cast(GC::Heap::alloc(sizeof(long))); - std::cout << "l points to:\t\t" << l << std::endl; - detach_pointer(&l); - std::cout << "l points to:\t\t" << l << std::endl; - - // Some more dummy values of different sizes, to test stack pointer alignment - int *i = static_cast(GC::Heap::alloc(sizeof(int))); - char *c = static_cast(GC::Heap::alloc(sizeof(int))); - short *s = static_cast(GC::Heap::alloc(sizeof(short))); - cout << "exiting test_some_types" << endl; -} - -int main() { - cout << "entering main" << endl; - using namespace std::literals; - - auto start = std::chrono::high_resolution_clock::now(); - //std::cout << "Value of start: " << start.time_since_epoch().count() << std::endl; - GC::Heap::init(); - GC::Heap &gc = GC::Heap::the(); - gc.set_profiler(true); - GC::Profiler::set_log_options(GC::FunctionCalls); - gc.check_init(); - auto stack_start = reinterpret_cast(__builtin_frame_address(0)); - - Node *root1 = static_cast(gc.alloc(sizeof(Node))); - Node *root2 = static_cast(gc.alloc(sizeof(Node))); - root1 = test_chain(58000, false); - root2 = test_chain(58000, false); - - - gc.collect(GC::COLLECT_ALL); - auto end = std::chrono::high_resolution_clock::now(); - //std::cout << "Value of end: " << end.time_since_epoch().count() << std::endl; - - gc.print_summary(); - gc.dispose(); - - std::cout - << "Execution time: " - << std::chrono::duration_cast(end - start).count() << " ≈ " - << (end - start) / 1ms << "ms ≈ " - << (end - start) / 1s << "s.\n"; - - return 0; -} \ No newline at end of file diff --git a/src/GC/tests/linkedlist.cpp b/src/GC/tests/linkedlist.cpp deleted file mode 100644 index 61ab3c4..0000000 --- a/src/GC/tests/linkedlist.cpp +++ /dev/null @@ -1,74 +0,0 @@ -#include -#include - -#include "heap.hpp" - -#define allocNode static_cast(GC::Heap::alloc(sizeof(Node))) - -using std::cout, std::endl; - -struct Node // sizeof(Node) = 16 -{ - int value; - Node *next {nullptr}; -}; - -Node *create_list(size_t length) -{ - Node *head = allocNode; - head->value = 0; - - Node *prev = head; - - for (size_t i = 1; i < length; i++) - { - Node *next = allocNode; - next->value = i; - prev->next = next; - prev = next; - } - - return head; -} - -void print_list(Node* head) -{ - cout << "\nPrinting list...\n"; - while (head != nullptr) - { - cout << head->value << " "; - head = head->next; - } - cout << endl; -} - -void clear_list(Node *head) -{ - while (head != nullptr) - { - Node *tmp = head->next; - head->next = nullptr; - head = tmp; - } -} - -void run_list_test() -{ - Node *list = create_list(10); - print_list(list); -} - -int main() -{ - GC::Heap::init(); - GC::Heap &heap = GC::Heap::the(); - heap.set_profiler(true); - GC::Profiler::set_log_options(GC::FunctionCalls); - - for (int i = 0; i < 10; i++) - run_list_test(); - - GC::Heap::dispose(); - - return 0; -} \ No newline at end of file diff --git a/src/GC/tests/linker.cpp b/src/GC/tests/linker.cpp deleted file mode 100644 index fb5b979..0000000 --- a/src/GC/tests/linker.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include - -#include "heap.hpp" - -struct Obj { - int a; - int b; - int c; -}; - -int main() { - - - - return 0; -} \ No newline at end of file diff --git a/src/GC/tests/player.hpp b/src/GC/tests/player.hpp deleted file mode 100644 index 8a8e30f..0000000 --- a/src/GC/tests/player.hpp +++ /dev/null @@ -1,51 +0,0 @@ -#include - -using std::string; - -class Point { - -public: - - int x, y; - Point() {} - Point(int _x, int _y) : x(_x), y(_y) {} -}; - -class Player { - -private: - - string *name; - Point *position; - Point *size; - Point *direction; - -public: - - Player() {} - -/* Player(string n, Point pos, Point s, Point dir) - : name(n), position(pos.x, pos.y), size(s.x, s.y), direction(dir.x, dir.y) - {} */ - - void move() { - position->x += direction->x; - position->y += direction->y; - } - - void set_speed(int dx, int dy) { - direction->x = dx; - direction->y = dy; - } - - // This is probably neccessary to initialize an object with our GC - // Since allocation and construction cannot be done at the same time - void init(string *n, Point *pos, Point *s, Point *dir) { - name = n; - position = pos; - size = s; - direction = dir; - - } - -}; diff --git a/src/GC/tests/stack.cpp b/src/GC/tests/stack.cpp deleted file mode 100644 index 8f8382e..0000000 --- a/src/GC/tests/stack.cpp +++ /dev/null @@ -1,76 +0,0 @@ -#include -#include -#include -#include - -/* - * Stack.cpp - * - Tests stack scanning and stack pointers - * - * Goal: Find the values of the following variables - * and their position on the stack - * - unsigned long a - * - unsigned long b - * - unsigned long global_1 - * - unsigned long global_2 - * - * Result: Passed -*/ - - - - -std::vector iv; - -void collect() { - std::cout << "in collect" << std::endl; - - uintptr_t *stack_start = reinterpret_cast(__builtin_frame_address(0)); - - // denna orsakar segfault om man ger __b_f_a ett värde större än 2 - // uintptr_t *stack_end = reinterpret_cast(__builtin_frame_address(100)); - - std::cout << "SP1:\t" << stack_start << "\nSP2:\t" << (stack_start - 1*sizeof(int)) << std::endl; - std::cout << "SP-:\t" << --stack_start << std::endl; - - const uintptr_t *stack_end = (stack_start + 30*sizeof(int)); - int vars_found = 0; - - while (stack_start < stack_end) { - - if (std::find(iv.begin(), iv.end(), stack_start) != iv.end()) { - vars_found++; - std::cout << "Found " << *(reinterpret_cast(stack_start)) << " at " << stack_start << std::endl; - } - - // std::cout << "SP address:\t\t" << stack_start << "\nSP value:\t\t" << *(reinterpret_cast(stack_start)) << std::endl; - - stack_start++; - } - - if (vars_found == 0) { - std::cout << "Found nothing" << std::endl; - } -} - -int add(unsigned long a, unsigned long b) { - iv.push_back(reinterpret_cast(&a)); - iv.push_back(reinterpret_cast(&b)); - std::cout << "'a':\t" << &a << "\n'b':\t" << &b << std::endl; - collect(); - return a + b; -} - -int main() { - - unsigned long global_1 = 16; - unsigned long global_2 = 32; - - iv.push_back(&global_1); - iv.push_back(&global_2); - - std::cout << "'g1':\t" << &global_1 << "\n'g2':\t" << &global_2 << std::endl; - - add(3,2); - return 0; -} \ No newline at end of file diff --git a/src/GC/tests/stack2.cpp b/src/GC/tests/stack2.cpp deleted file mode 100644 index f1a78bc..0000000 --- a/src/GC/tests/stack2.cpp +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include - -void dummy1(); -void dummy2(); - -int main() { - - uintptr_t *prev1 = reinterpret_cast(__builtin_frame_address(0)); - uintptr_t *prev2 = static_cast(__builtin_frame_address(0)); - - std::cout << "reinterpret:\t" << prev1 << "\nstatic:\t\t" << prev2 << std::endl; - - std::cout << "Start:\t\t" << prev1 << std::endl; -#pragma clang diagnostic ignored "-Wframe-address" - uintptr_t *tmp = reinterpret_cast(__builtin_frame_address(1)); - std::cout << "Frame 1:\t" << tmp << "\t\tDiff:\t" << std::hex << "0x"<< tmp - prev1 << std::endl; - prev1 = tmp; - -#pragma clang diagnostic ignored "-Wframe-address" - tmp = reinterpret_cast(__builtin_frame_address(2)); - std::cout << "Frame 2:\t" << tmp << "\tDiff:\t" << std::hex << "0x" << tmp - prev1 << std::endl; - prev1 = tmp; - -// arg > 2 for __builtin_frame_address() results in segfault -// #pragma clang diagnostic ignored "-Wframe-address" -// tmp = reinterpret_cast(__builtin_frame_address(3)); -// std::cout << "Frame 3:\t" << tmp << "\tDiff:\t" << std::hex << "0x" << prev1 - tmp << std::endl; - - dummy1(); - - return 0; -} - -void dummy1() { - std::cout << "D1 SFrame:\t" << __builtin_frame_address(0); -#pragma clang diagnostic ignored "-Wframe-address" - std::cout << "\t\tPrev:\t" << __builtin_frame_address(1) << std::endl; - std::cout << "D1 RA:\t\t" << std::hex << __builtin_return_address(0) << std::endl; - dummy2(); -} - -void dummy2() { - std::cout << "Frame:\t\t" << __builtin_frame_address(0); -#pragma clang diagnostic ignored "-Wframe-address" - std::cout << "\t\tPrev:\t" << __builtin_frame_address(1) << std::endl; - void *ra = __builtin_return_address(0); - std::cout << "D2 RA:\t\t" << std::hex << ra << std::endl; - // gives same value as pure 'ra' - // std::cout << "D2 ERA:\t\t" << std::hex << __builtin_extract_return_addr(ra) << std::endl; -} \ No newline at end of file diff --git a/src/GC/tests/struct_test.cpp b/src/GC/tests/struct_test.cpp deleted file mode 100644 index 2b2b677..0000000 --- a/src/GC/tests/struct_test.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include - -#include "heap.hpp" - -using namespace std; - -struct Node { - int value; - Node *left; - Node *right; -}; - -int getValue(); -Node *createNode(); -void insert(); - -int main() { - GC::Heap::init(); - Node *node = static_cast(GC::Heap::alloc(sizeof(Node))); - - return 0; -} - -int getValue() { - cout << "Enter a value to insert: "; - int value; - cin >> value; - return value; -} - -Node *createNode() { - Node *node = static_cast(GC::Heap::alloc(sizeof(Node))); - node->value = getValue(); - return node; -} - -void insert(Node *root) { - Node *node = createNode(); - Node *curr = root; - while (curr) -} \ No newline at end of file diff --git a/src/GC/tests/wrapper.c b/src/GC/tests/wrapper.c deleted file mode 100644 index d6f042c..0000000 --- a/src/GC/tests/wrapper.c +++ /dev/null @@ -1,96 +0,0 @@ -#include -#include -#include - -#include "cheap.h" - -typedef struct object -{ - int x, y, z; - double velocity; -} Object; - -void test_init() -{ - printf("----- IN TEST_INIT ----------------------------\n"); - - cheap_init(); - - printf("----- EXIT TEST_INIT --------------------------\n"); -} - -/* Uncomment ONLY if run with DEBUG defined in cheap.h */ - -cheap_t *test_the() -{ - printf("----- IN TEST_THE -----------------------------\n"); - - cheap_t *fst_heap = cheap_the(); - - printf("Heap 1:\t%p\n", fst_heap->obj); - - cheap_t *snd_heap = cheap_the(); - - printf("Heap 2:\t%p\n", snd_heap->obj); - - printf("----- EXIT TEST_THE ---------------------------\n"); - - free(snd_heap); - return fst_heap; -} - -void test_profiler(cheap_t *heap) -{ - printf("----- IN TEST_PROFILER ------------------------\n"); - - cheap_set_profiler(heap, false); - cheap_set_profiler(heap, true); - cheap_profiler_log_options(heap, FuncCallsOnly); - - printf("----- EXIT TEST_PROFILER ----------------------\n"); -} - -Object *test_alloc() -{ - printf("----- IN TEST_ALLOC ---------------------------\n"); - - Object *o; - o = (Object *)(cheap_alloc(sizeof(Object))); - - o->x = 3; - o->y = 4; - o->z = 5; - o->velocity = 1.0f; - - printf("----- EXIT TEST_ALLOC -------------------------\n"); - return o; -} - -void test_dispose() -{ - printf("----- IN TEST_DISPOSE -------------------------\n"); - - cheap_dispose(); - - printf("----- EXIT TEST_DISPOSE -----------------------\n"); -} - -int main() -{ - test_init(); - - /* Uncomment ONLY if run with DEBUG defined in cheap.h */ - cheap_t *heap = test_the(); - test_profiler(heap); - - Object *o = test_alloc(); - printf("Object size: %lu\n", sizeof(Object)); - printf("Object:\n\tx: %d\n\ty: %d\n\tz: %d\n\tvel: %f\n", o->x, o->y, o->z, o->velocity); - - test_dispose(); - - /* Sefault I don't understand, don't uncomment */ - // free(heap); - // free(o); - return 0; -} \ No newline at end of file diff --git a/src/GC/tests/wrapper_test.c b/src/GC/tests/wrapper_test.c deleted file mode 100644 index 729cf69..0000000 --- a/src/GC/tests/wrapper_test.c +++ /dev/null @@ -1,45 +0,0 @@ -#include -#include - -#include "cheap.h" - -typedef struct node { - int id; - struct node *child; -} Node; - -// Global variables make the test less complex -Node *HEAD = NULL; -Node *CURRENT = NULL; - -// Creates a linked list of length depth. Global head "HEAD" is updated. -void *create_linked_list(int depth) { - HEAD = (Node*)(cheap_alloc(sizeof(Node))); - HEAD->id = 0; - // Purposely omitting adding a child to "last_node", since its the last node - for (int i = 1; i < depth - 1; i++) { - insert_first(i); - } -} - -void *insert_first(int node_id) { - Node *new_head; - new_head = (Node*)(cheap_alloc(sizeof(Node))); - new_head->id = node_id; - new_head->child = HEAD; - - HEAD = new_head; -} - -void test_linked_list(int list_length){ - cheap_init(); - cheap_t *heap = cheap_the(); - cheap_set_profiler(heap, true); - create_linked_list(list_length); - cheap_dispose(); - free(heap); -} - -int main (int argc, char **argv) { - test_linked_list(30); -} \ No newline at end of file diff --git a/src/GC/todo.md b/src/GC/todo.md deleted file mode 100644 index 83fcf2c..0000000 --- a/src/GC/todo.md +++ /dev/null @@ -1,11 +0,0 @@ -# Garbage collection - -## Project -Deliver to samuel - -## GC TODO: -- PR till master - -## Tests TODO -- Write complex datastructures for tests with larger programs -- Testa `__builtin_frame_address` mer specifikt för att se om första stack framen skannas \ No newline at end of file diff --git a/src/Main.hs b/src/Main.hs index ea6103a..b487222 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -138,7 +138,8 @@ main' opts s = log monomorphized printToErr "\n -- Compiler --" - generatedCode <- fromErr $ generateCode monomorphized (gc opts) + -- generatedCode <- fromErr $ generateCode monomorphized (gc opts) + generatedCode <- fromErr $ generateCode monomorphized False check <- doesPathExist "output" when check (removeDirectoryRecursive "output") @@ -148,7 +149,8 @@ main' opts s = writeFile "output/llvm.ll" generatedCode debugDotViz - compile generatedCode (gc opts) + -- compile generatedCode (gc opts) + compile generatedCode False printToErr "Compilation done!" printToErr "\n-- Program output --" print =<< spawnWait "./output/hello_world"

1G{y)?FLXWc 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