From 2851c408d1c4ae2bce66ac2d42b93d50772ed501 Mon Sep 17 00:00:00 2001 From: Samuel Hammersberg Date: Thu, 30 Mar 2023 11:41:10 +0200 Subject: [PATCH] Added the updated GC. --- src/GC/Makefile | 32 ++++++++++-- src/GC/docs/lib/cheap.md | 40 +++++++++++++++ src/GC/include/cheap.h | 32 ++++++++++++ src/GC/lib/cheap.cpp | 48 ++++++++++++++++++ src/GC/lib/event.cpp | 6 +-- src/GC/lib/gcoll.a | Bin 712746 -> 712746 bytes src/GC/tests/file.cpp | 11 ++++- src/GC/tests/wrapper.c | 95 ++++++++++++++++++++++++++++++++++++ src/GC/tests/wrapper_test.c | 45 +++++++++++++++++ 9 files changed, 301 insertions(+), 8 deletions(-) create mode 100644 src/GC/docs/lib/cheap.md create mode 100644 src/GC/include/cheap.h create mode 100644 src/GC/lib/cheap.cpp create mode 100644 src/GC/tests/wrapper.c create mode 100644 src/GC/tests/wrapper_test.c diff --git a/src/GC/Makefile b/src/GC/Makefile index add6d73..6b33ca8 100644 --- a/src/GC/Makefile +++ b/src/GC/Makefile @@ -40,6 +40,17 @@ 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) -O3 -g -c -o lib/event.o lib/event.cpp -fPIC + $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -O3 -g -c -o lib/profiler.o lib/profiler.cpp -fPIC + $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -O3 -g -c -o lib/heap.o lib/heap.cpp -fPIC + $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -O3 -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 @@ -55,12 +66,25 @@ 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 -g -c -o lib/event.o lib/event.cpp -fPIC - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -O3 -g -c -o lib/profiler.o lib/profiler.cpp -fPIC - $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -O3 -g -c -o lib/heap.o lib/heap.cpp -fPIC + $(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 \ No newline at end of file + $(CC) $(STDFLAGS) $(WFLAGS) $(LIB_INCL) -o tests/extern_lib.out tests/extern_lib.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/lib/cheap.md b/src/GC/docs/lib/cheap.md new file mode 100644 index 0000000..e5c5993 --- /dev/null +++ b/src/GC/docs/lib/cheap.md @@ -0,0 +1,40 @@ +# 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/include/cheap.h b/src/GC/include/cheap.h new file mode 100644 index 0000000..d2c649d --- /dev/null +++ b/src/GC/include/cheap.h @@ -0,0 +1,32 @@ +#ifndef CHEAP_H +#define CHEAP_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// #define DEBUG + +#ifdef DEBUG +typedef struct cheap +{ + void *obj; +} cheap_t; +#else +struct cheap; +typedef struct cheap cheap_t; +#endif + +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); + +#ifdef __cplusplus +} +#endif + +#endif /* __CHEAP_H__ */ \ No newline at end of file diff --git a/src/GC/lib/cheap.cpp b/src/GC/lib/cheap.cpp new file mode 100644 index 0000000..29a0b10 --- /dev/null +++ b/src/GC/lib/cheap.cpp @@ -0,0 +1,48 @@ +#include +#include + +#include "heap.hpp" +#include "cheap.h" + +#ifndef 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); +} \ No newline at end of file diff --git a/src/GC/lib/event.cpp b/src/GC/lib/event.cpp index 2815a77..185c613 100644 --- a/src/GC/lib/event.cpp +++ b/src/GC/lib/event.cpp @@ -1,6 +1,6 @@ -#include -#include -#include +// #include +// #include +// #include #include "chunk.hpp" #include "event.hpp" diff --git a/src/GC/lib/gcoll.a b/src/GC/lib/gcoll.a index 1fec9e8a9873bcddaccefe376f301dc380fcb024..dd34d6445a090d8ab0f17d31e151ada266147e5d 100644 GIT binary patch delta 4713 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 Vl*8Wcl*7^Pl*75*DTnJtF#v=NFs%Rp delta 4713 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 +#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); + + 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 new file mode 100644 index 0000000..729cf69 --- /dev/null +++ b/src/GC/tests/wrapper_test.c @@ -0,0 +1,45 @@ +#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