From 95f161442435d05017f9ea41df6f15790bff6e67 Mon Sep 17 00:00:00 2001 From: mmamayka Date: Sat, 19 Aug 2023 02:07:22 +0300 Subject: [PATCH] test util library extracted to global tinylibc library --- CMakeLists.txt | 8 ++++++++ lib/CMakeLists.txt | 3 +++ lib/tinylibc/CMakeLists.txt | 17 +++++++++++++++++ src/asmutil.s => lib/tinylibc/_getchar.s | 8 +------- {t/util => lib/tinylibc}/exit.s | 2 +- lib/tinylibc/include/printf.h | 1 + lib/tinylibc/include/tinylibc.h | 18 ++++++++++++++++++ lib/tinylibc/printf.c | 1 + src/entry.c | 2 +- src/include/printf.h | 1 - src/printf.c | 1 - t/CMakeLists.txt | 7 ------- t/got_linking/CMakeLists.txt | 4 ++-- t/got_linking/lib.c | 2 +- t/got_linking/startup.c | 4 ++-- t/util/include/util.h | 6 ------ 16 files changed, 56 insertions(+), 29 deletions(-) create mode 100644 lib/CMakeLists.txt create mode 100644 lib/tinylibc/CMakeLists.txt rename src/asmutil.s => lib/tinylibc/_getchar.s (72%) rename {t/util => lib/tinylibc}/exit.s (79%) create mode 120000 lib/tinylibc/include/printf.h create mode 100644 lib/tinylibc/include/tinylibc.h create mode 120000 lib/tinylibc/printf.c delete mode 120000 src/include/printf.h delete mode 120000 src/printf.c delete mode 100644 t/util/include/util.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b127b9..aa4812b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,12 @@ project(dynamic-linker LANGUAGES C ASM) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + + +add_subdirectory(lib) + + + set(DYNAMIC_LINKER_SO ld-dynamic.so) set(DYNAMIC_LINKER_CFLAGS -O2 -Wall -Wextra -g -fno-stack-protector @@ -35,6 +41,8 @@ target_compile_options(${DYNAMIC_LINKER_SO} PRIVATE $<$:${DYNAMIC_LINKER_ASMFLAGS}> ) +target_link_libraries(${DYNAMIC_LINKER_SO} PRIVATE tinylibc) + target_link_options(${DYNAMIC_LINKER_SO} PRIVATE ${DYNAMIC_LINKER_LDFLAGS}) target_include_directories(${DYNAMIC_LINKER_SO} diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt new file mode 100644 index 0000000..4a4bb34 --- /dev/null +++ b/lib/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.22.1) + +add_subdirectory(tinylibc) diff --git a/lib/tinylibc/CMakeLists.txt b/lib/tinylibc/CMakeLists.txt new file mode 100644 index 0000000..461ac00 --- /dev/null +++ b/lib/tinylibc/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.22.1) + +set(TINYLIBC_CFLAGS -O2 -Wall -Wextra -g -fno-stack-protector) +set(TINYLIBC_ASFLAGS -x assembler-with-cpp ${TINYLIBC_CFLAGS}) + +add_library(tinylibc STATIC) + +target_compile_options(tinylibc PRIVATE + $<$:${TINYLIBC_CFLAGS}> + $<$:${TINYLIBC_ASFLAGS}> +) + +target_include_directories(tinylibc PUBLIC include) + +file(GLOB TINYLIBC_SRC "./*.[cs]") + +target_sources(tinylibc PRIVATE ${TINYLIBC_SRC}) diff --git a/src/asmutil.s b/lib/tinylibc/_getchar.s similarity index 72% rename from src/asmutil.s rename to lib/tinylibc/_getchar.s index 2555c28..c995ceb 100644 --- a/src/asmutil.s +++ b/lib/tinylibc/_getchar.s @@ -1,14 +1,8 @@ - -#include +#include .section .text, "ax", @progbits -.global exit -exit: - mov $1, %rdi - syscall - .global _putchar _putchar: push %rdi diff --git a/t/util/exit.s b/lib/tinylibc/exit.s similarity index 79% rename from t/util/exit.s rename to lib/tinylibc/exit.s index fe09fe6..c2bf7af 100644 --- a/t/util/exit.s +++ b/lib/tinylibc/exit.s @@ -1,5 +1,5 @@ -#include +#include .section .text, "ax", @progbits diff --git a/lib/tinylibc/include/printf.h b/lib/tinylibc/include/printf.h new file mode 120000 index 0000000..57462fa --- /dev/null +++ b/lib/tinylibc/include/printf.h @@ -0,0 +1 @@ +../../../third_party/printf/printf.h \ No newline at end of file diff --git a/lib/tinylibc/include/tinylibc.h b/lib/tinylibc/include/tinylibc.h new file mode 100644 index 0000000..6f29b1a --- /dev/null +++ b/lib/tinylibc/include/tinylibc.h @@ -0,0 +1,18 @@ +#ifndef MY1STLD_LIB_TINYLIBC_H +#define MY1STLD_LIB_TINYLIBC_H + +#include "printf.h" + +void exit(int exit_code); + +#define ASSERT_EXIT_CODE 666 +#define assert(condition) \ + do { \ + if(!condition) { \ + printf("assetion %s failed at %s:%i\n", \ + #condition, __FILE__, __LINE__); \ + exit(ASSERT_EXIT_CODE); \ + } \ + } while(0) \ + +#endif /* MY1STLD_LIB_TINYLIBC_H */ diff --git a/lib/tinylibc/printf.c b/lib/tinylibc/printf.c new file mode 120000 index 0000000..0e32f14 --- /dev/null +++ b/lib/tinylibc/printf.c @@ -0,0 +1 @@ +../../third_party/printf/printf.c \ No newline at end of file diff --git a/src/entry.c b/src/entry.c index 00c38a9..ef56824 100644 --- a/src/entry.c +++ b/src/entry.c @@ -5,7 +5,7 @@ #include #include -#include "printf.h" +#include "tinylibc.h" #ifndef NDEBUG # define DEBUG_LOG(...) \ diff --git a/src/include/printf.h b/src/include/printf.h deleted file mode 120000 index 87cbc46..0000000 --- a/src/include/printf.h +++ /dev/null @@ -1 +0,0 @@ -../../third_party/printf/printf.h \ No newline at end of file diff --git a/src/printf.c b/src/printf.c deleted file mode 120000 index 7a33151..0000000 --- a/src/printf.c +++ /dev/null @@ -1 +0,0 @@ -../third_party/printf/printf.c \ No newline at end of file diff --git a/t/CMakeLists.txt b/t/CMakeLists.txt index c906212..b07468f 100644 --- a/t/CMakeLists.txt +++ b/t/CMakeLists.txt @@ -7,13 +7,6 @@ set(TEST_LDFLAGS -nostartfiles -nodefaultlibs ) set(TEST_ASMFLAGS -x assembler-with-cpp) -add_library(test_util STATIC) -target_compile_options(test_util PRIVATE - $<$:${TEST_CFLAGS}> - $<$:${TEST_ASMFLAGS}> -) -target_sources(test_util PRIVATE util/exit.s) - # startup test add_executable(startup_test) diff --git a/t/got_linking/CMakeLists.txt b/t/got_linking/CMakeLists.txt index e170c34..19fbd69 100644 --- a/t/got_linking/CMakeLists.txt +++ b/t/got_linking/CMakeLists.txt @@ -17,7 +17,7 @@ target_sources(got_linking_lib PRIVATE lib.c) add_executable(got_linking_test) -target_include_directories(got_linking_test PRIVATE ../util/include) +#target_include_directories(got_linking_test PRIVATE ../../lib/tinylibc/include) target_compile_options(got_linking_test PRIVATE $<$:${TEST_CFLAGS}> @@ -28,7 +28,7 @@ target_link_options(got_linking_test PRIVATE ${TEST_LDFLAGS} ) -target_link_libraries(got_linking_test PRIVATE got_linking_lib test_util) +target_link_libraries(got_linking_test PRIVATE got_linking_lib tinylibc) target_sources(got_linking_test PRIVATE startup.c) diff --git a/t/got_linking/lib.c b/t/got_linking/lib.c index 5177fda..438e147 100644 --- a/t/got_linking/lib.c +++ b/t/got_linking/lib.c @@ -1,2 +1,2 @@ -int so_variable = 0; +int so_variable = 1; diff --git a/t/got_linking/startup.c b/t/got_linking/startup.c index 91f7b44..c77096e 100644 --- a/t/got_linking/startup.c +++ b/t/got_linking/startup.c @@ -1,7 +1,7 @@ -#include "util.h" #include "lib.h" +#include "tinylibc.h" void _start() { - so_variable++; + assert(so_variable == 1); exit(0); } diff --git a/t/util/include/util.h b/t/util/include/util.h deleted file mode 100644 index 15250dc..0000000 --- a/t/util/include/util.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef MY1STLD_TEST_UTIL_H -#define MY1STLD_TEST_UTIL_H - -void exit(int exit_code); - -#endif /* MY1STLD_TEST_UTIL_H */