Update makefile and fix analzer complaints
This commit is contained in:
32
Makefile
32
Makefile
@@ -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) $<
|
||||||
|
|||||||
14
src/arena.c
14
src/arena.c
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user