From ea6eab0bcf2d3f9f8b70d083f86dce806a6fd08a Mon Sep 17 00:00:00 2001 From: Victor Olin Date: Wed, 22 Feb 2023 18:30:15 +0100 Subject: [PATCH] Fixed bugs on freeing chunks and stack-scanning Co-authored-by: ValterMiari --- .gitignore | 2 ++ src/GC/Makefile | 15 +++++------ src/GC/include/heap.hpp | 1 + src/GC/lib/heap.cpp | 57 ++++++++++++++++++++-------------------- src/GC/lib/heap.o | Bin 138408 -> 0 bytes src/GC/lib/libheap.so | Bin 82920 -> 0 bytes src/GC/tests/h_test.cpp | 31 ++++++++++------------ 7 files changed, 53 insertions(+), 53 deletions(-) delete mode 100644 src/GC/lib/heap.o delete mode 100755 src/GC/lib/libheap.so diff --git a/.gitignore b/.gitignore index 934c3da..1daddd6 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,6 @@ llvm.ll /language .vscode/ +src/GC/lib/*.o +src/GC/lib/*.so src/GC/tests/*.out diff --git a/src/GC/Makefile b/src/GC/Makefile index 1039403..354adad 100644 --- a/src/GC/Makefile +++ b/src/GC/Makefile @@ -1,18 +1,17 @@ -mkfile_path = $(abspath $(lastword $(MAKEFILE_LIST))) -current_dir = $(notdir $(patsubst %/,%,$(dir $(mkfile_path)))) CC = clang++ - -PWD_V = /Users/valtermiari/Desktop/DV/Bachelors/code/language/src/GC/include -LIB_INCL = -I/home/virre/dev/systemF/org/language/src/GC/include -LIB_SO = -L/home/virre/dev/systemF/org/language/src/GC/lib -LIB_LINK = /home/virre/dev/systemF/org/language/src/GC/lib - +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 +test_test: + echo "$(shell pwd)" + heap: $(CC) $(WFLAGS) $(STDFLAGS) $(LIB_INCL) lib/heap.cpp diff --git a/src/GC/include/heap.hpp b/src/GC/include/heap.hpp index d0f805d..575d6f7 100644 --- a/src/GC/include/heap.hpp +++ b/src/GC/include/heap.hpp @@ -44,6 +44,7 @@ namespace GC { size_t m_allocated_size; uintptr_t *m_stack_end = nullptr; + // maybe change to std::list std::vector m_allocated_chunks; std::vector m_freed_chunks; diff --git a/src/GC/lib/heap.cpp b/src/GC/lib/heap.cpp index efc7c80..58c4966 100644 --- a/src/GC/lib/heap.cpp +++ b/src/GC/lib/heap.cpp @@ -147,14 +147,14 @@ namespace GC { std::vector filtered; size_t i = 0; filtered.push_back(heap->m_freed_chunks.at(i++)); - //cout << filtered.back()->start << endl; + cout << filtered.back()->start << endl; for (; i < heap->m_freed_chunks.size(); i++) { auto prev = filtered.back(); - cout << "Previous start:\t" << prev->start << endl; - cout << "Previous end:\t" << prev->start + prev->size << endl; auto next = heap->m_freed_chunks.at(i); - cout << "Next start:\t" << next->start << endl; - if (next->start > (prev->start + prev->size)) { + auto p_start = (uintptr_t)(prev->start); + auto p_size = (uintptr_t)(prev->size); + auto n_start = (uintptr_t)(next->start); + if (n_start >= (p_start + p_size)) { filtered.push_back(next); } } @@ -186,7 +186,6 @@ namespace GC { cout << "Stack end in collect:\t " << stack_end << endl; auto work_list = heap->m_allocated_chunks; - //print_worklist(work_list); if (flags & MARK) { mark(stack_start, stack_end, work_list); @@ -229,33 +228,35 @@ namespace GC { void Heap::mark(uintptr_t *start, const uintptr_t *end, vector worklist) { int counter = 0; // To find adresses thats in the worklist - for (; start > end; start--) { + for (; start < end; start++) { counter++; // all pointers must be aligned as double words - if (*start % 8 == 0) { - for (auto it = worklist.begin(); it != worklist.end();) { - Chunk *chunk = *it; - uintptr_t c_start = reinterpret_cast(chunk->start); - uintptr_t c_end = reinterpret_cast(chunk->start + chunk->size); - - // Check if the stack pointer aligns with the chunk - //if ((c_start <= *start && *start < c_end) && chunk != nullptr) { - if (c_start == *start) { - cout << "Start points to:\t" << hex << *start << endl; - cout << "Chunk start:\t\t" << hex << c_start << endl; - cout << "Chunk end:\t\t" << hex << c_end << "\n" << endl; - - if (!chunk->marked) { - chunk->marked = true; - it = worklist.erase(it); - } - else - ++it; - } - else + for (auto it = worklist.begin(); it != worklist.end();) { + Chunk *chunk = *it; + if (chunk == nullptr) { + assert(false && "EPIC FAIL"); + } + uintptr_t c_start = reinterpret_cast(chunk->start); + uintptr_t c_end = reinterpret_cast(chunk->start + chunk->size); + // Check if the stack pointer aligns with the chunk + if (c_start <= *start && *start < c_end) { + //if (c_start == *start) { + cout << "Start points to:\t" << hex << *start << endl; + cout << "Chunk start:\t\t" << hex << c_start << endl; + cout << "Chunk end:\t\t" << hex << c_end << "\n" << endl; + + if (!chunk->marked) { + chunk->marked = true; + it = worklist.erase(it); + } + else { ++it; } + } + else { + ++it; + } } } cout << "Counter: " << counter << endl; diff --git a/src/GC/lib/heap.o b/src/GC/lib/heap.o deleted file mode 100644 index 0e5421d2990b2561b9577b4d3ef9c10913213458..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138408 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%0Av*y6I=cpVDWzh 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�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 diff --git a/src/GC/tests/h_test.cpp b/src/GC/tests/h_test.cpp index 97ebdec..5c263f1 100644 --- a/src/GC/tests/h_test.cpp +++ b/src/GC/tests/h_test.cpp @@ -63,26 +63,23 @@ void test_some_types() { } int main() { + //gc->init(); + //gc->check_init(); auto stack_start = reinterpret_cast(__builtin_frame_address(0)); std::cout << "Stack start from main:\t" << stack_start << std::endl; - // This is allocated outside of the scope of the GC, thus garbage - for (int i = 0; i < 10; i++) { - gc->alloc(sizeof(int)); + + // char *c = static_cast(gc->alloc(sizeof(char))); // 0x0 | 0x0 + // int *i = static_cast(gc->alloc(sizeof(int))); // 0x1-0x4 | 0x4-0x8 + // char *c2 = static_cast(gc->alloc(sizeof(char)));// 0x5 | 0x9-0x + // long *l = static_cast(gc->alloc(sizeof(long))); // 0x6-0xd | 0x + + // This is allocated outside of the scope of the GC (if gc->init() isn't called), thus garbage + long *longs[21]; + std::cout << "Pointer to ints:\t" << longs << std::endl; + for (int i = 0; i < 21; i++) { + longs[i] = static_cast(gc->alloc(sizeof(long))); } - /* int depth = 10; - Node* nodes[depth]; - Node *last_node = static_cast(gc->alloc(sizeof(Node))); - last_node->id = depth; - last_node->child = nullptr; - nodes[0] = last_node; - for (int i = 1; i < depth; i++) { - Node *node = static_cast(gc->alloc(sizeof(Node))); - node->id = depth-i; - node->child = nodes[i-1]; - nodes[i] = node; - } */ - //test_chain(10, false); - //test_some_types(); + gc->collect(MARK | SWEEP | FREE); // free misses some chunks gc->print_contents(); return 0;