Update makefile and fix analzer complaints

This commit is contained in:
Ole Morud
2023-06-05 22:24:49 +02:00
parent 1fd96ff1ce
commit b3638c3c00
3 changed files with 41 additions and 11 deletions

View File

@@ -1,6 +1,28 @@
CC := gcc all:
CFLAGS := -g -O3 -std=c2x -Wall -Wextra -Wpedantic -Werror -Iinclude
BUILD ?= debug
COMPILER ?= gcc
# ==== set compiler flags ====
# credits Maxim Egorushkin:
# https://stackoverflow.com/questions/48791883/best-practice-for-building-a-make-file/48793058#48793058
CC := $(COMPILER)
# -fsanitize={address,undefined}
CFLAGS.gcc.debug := -Og -ggdb -pg -fsanitize=address -fno-omit-frame-pointer
CFLAGS.gcc.release := -O3 -g -march=native -DNDEBUG
CFLAGS.gcc := -fanalyzer
CFLAGS.clang.debug :=-O0 -g3 -DBACKTRACE -rdynamic
CFLAGS.clang.release :=-O3 -g -march=native -DNDEBUG
CFLAGS.clang :=
CFLAGS := ${CFLAGS.${COMPILER}} ${CFLAGS.${COMPILER}.${BUILD}} \
-Iinclude \
-std=c2x \
-Wall -Wextra -Wpedantic -Werror
BUILD_DIR := build BUILD_DIR := build
BIN_DIR := lib BIN_DIR := lib
@@ -9,6 +31,8 @@ TEST_DIR := test
OBJS := $(BUILD_DIR)/arena.o OBJS := $(BUILD_DIR)/arena.o
FPIC_OBJS := $(BUILD_DIR)/fpic/arena.o FPIC_OBJS := $(BUILD_DIR)/fpic/arena.o
all : static
static : $(BIN_DIR)/libarena.a static : $(BIN_DIR)/libarena.a
dynamic : $(BIN_DIR)/libarena.so dynamic : $(BIN_DIR)/libarena.so
@@ -16,13 +40,13 @@ dynamic : $(BIN_DIR)/libarena.so
tests : test/test_arena tests : test/test_arena
$(TEST_DIR)/test_arena : src/test_arena.c $(BIN_DIR)/libarena.a | $(TEST_DIR) $(TEST_DIR)/test_arena : src/test_arena.c $(BIN_DIR)/libarena.a | $(TEST_DIR)
$(CC) -o $@ -O0 -Iinclude -ggdb $^ $(CC) -o $@ $(CFLAGS) $^
$(BIN_DIR)/libarena.a : $(OBJS) | $(BIN_DIR) $(BIN_DIR)/libarena.a : $(OBJS) | $(BIN_DIR)
ar cr $@ $^ ar cr $@ $^
$(BIN_DIR)/libarena.so : $(FPIC_OBJS) | $(BIN_DIR) $(BIN_DIR)/libarena.so : $(FPIC_OBJS) | $(BIN_DIR)
$(CC) -shared -o $@ $^ $(CC) -o $@ -shared $(CFLAGS) $^
$(BUILD_DIR)/%.o : src/%.c | $(BUILD_DIR) $(BUILD_DIR)/%.o : src/%.c | $(BUILD_DIR)
$(CC) -o $@ -c $(CFLAGS) $< $(CC) -o $@ -c $(CFLAGS) $<

View File

@@ -58,11 +58,13 @@ void _arena_new_page(arena_t* a, size_t size)
return; return;
} }
a->head->next = calloc(1, sizeof *(a->head->next)); void* tmp = calloc(1, sizeof *(a->head->next));
if (a->head->next == NULL) if (tmp == NULL)
exit(errno); exit(errno);
a->head->next = tmp;
a->head = a->head->next; a->head = a->head->next;
a->head->data = malloc(size); a->head->data = malloc(size);
@@ -115,12 +117,14 @@ void* arena_calloc(arena_t* a, size_t nmemb, size_t size)
void* arena_realloc_tail(arena_t* a, size_t len) void* arena_realloc_tail(arena_t* a, size_t len)
{ {
if (a->head->offset == BIG_PAGE) { if (a->head->offset == BIG_PAGE) {
a->head->data = realloc(a->head->data, len); void* tmp = realloc(a->head->data, len);
if (a->head->data == NULL) if (tmp == NULL)
exit(errno); exit(errno);
return a->head->data; a->head->data = tmp;
return tmp;
} }
a->head->offset = a->head->prev_offset; a->head->offset = a->head->prev_offset;

View File

@@ -17,10 +17,10 @@ int main()
for (size_t i = 0; i < 1024; i++) { for (size_t i = 0; i < 1024; i++) {
char* c = arena_alloc(&default_arena, sizeof *c); char* c = arena_alloc(&default_arena, sizeof *c);
*c = i & 0xFF;
if (c == NULL) if (c == NULL)
err(EXIT_FAILURE, "failed to allocate memory"); err(EXIT_FAILURE, "failed to allocate memory");
*c = i & 0xFF;
} }
printf("\n OK!\n"); printf("\n OK!\n");
@@ -36,5 +36,7 @@ int main()
printf("\n OK!\n"); printf("\n OK!\n");
arena_delete(&default_arena);
return 0; return 0;
} }