From ac1b94ebc1cfb881c137901683b08893d236b32f Mon Sep 17 00:00:00 2001 From: Guillem George Date: Tue, 4 Nov 2025 15:57:00 +0100 Subject: [PATCH] ' --- .gitignore | 6 ++++++ malloc/Makefile | 18 ++++++++++++++++++ malloc/src/malloc.c | 19 +++++++++++++++++++ malloc/tests/corruptionproof | Bin 0 -> 16632 bytes malloc/tests/memoryfootprint | Bin 0 -> 18064 bytes malloc/tests/speed | Bin 0 -> 17280 bytes 6 files changed, 43 insertions(+) create mode 100644 malloc/Makefile create mode 100644 malloc/src/malloc.c create mode 100755 malloc/tests/corruptionproof create mode 100755 malloc/tests/memoryfootprint create mode 100755 malloc/tests/speed diff --git a/.gitignore b/.gitignore index 7d45161..e8bcbb7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,9 @@ a.out +*~ +*.swp *.o *.a +*.so +*.class +*.log +*.core diff --git a/malloc/Makefile b/malloc/Makefile new file mode 100644 index 0000000..65f356b --- /dev/null +++ b/malloc/Makefile @@ -0,0 +1,18 @@ +CC=gcc +CFLAGS= +LDFLAGS= + +SRCS= +OBJS=${SRC:.c=.o} +TARGET=libmalloc.so + +library: $(OBJS) + $(CC) -shared -o $(TARGET) $^ + +debug: + +check: + +clean: + $(RM) *.o + $(RM) $(TARGET) diff --git a/malloc/src/malloc.c b/malloc/src/malloc.c new file mode 100644 index 0000000..8b99ad9 --- /dev/null +++ b/malloc/src/malloc.c @@ -0,0 +1,19 @@ +#include + +__attribute__((visibility("default"))) void *malloc(size_t size) +{ + return NULL; +} + +__attribute__((visibility("default"))) void free(void *ptr) +{} + +__attribute__((visibility("default"))) void *realloc(void *ptr, size_t size) +{ + return NULL; +} + +__attribute__((visibility("default"))) void *calloc(size_t nmemb, size_t size) +{ + return NULL; +} diff --git a/malloc/tests/corruptionproof b/malloc/tests/corruptionproof new file mode 100755 index 0000000000000000000000000000000000000000..26ebc81739cce73f44f543c2a26a2c17d6ebd564 GIT binary patch literal 16632 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 literal 0 HcmV?d00001 diff --git a/malloc/tests/memoryfootprint b/malloc/tests/memoryfootprint new file mode 100755 index 0000000000000000000000000000000000000000..1718375bbfa45852028af52036b9ee97d1651036 GIT binary patch literal 18064 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 literal 0 HcmV?d00001 diff --git a/malloc/tests/speed b/malloc/tests/speed new file mode 100755 index 0000000000000000000000000000000000000000..a1026c800bfa6503f70654b09ab54ae5a8588a4a GIT binary patch literal 17280 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 literal 0 HcmV?d00001