From 5ac4de42038a90bc22f9d7799acdfe6420ec6b07 Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Tue, 27 Dec 2022 14:52:08 +0400 Subject: [PATCH] Remove libc (#158) It has been moved to https://github.com/tailix/libclayer --- .github/workflows/main.yml | 2 +- .gitignore | 4 - CONTRIBUTING.md | 4 +- ChangeLog | 4 + Makefile.am | 16 ---- README.md | 20 ++--- configure.ac | 20 ----- libc/Makefile.am | 30 -------- libc/include/Makefile.am | 9 --- libc/include/ctype.h | 20 ----- libc/include/errno.h | 16 ---- libc/include/inttypes.h | 12 --- libc/include/kernaux/libc.h | 26 ------- libc/include/setjmp.h | 27 ------- libc/include/stdlib.h | 29 -------- libc/include/string.h | 37 ---------- libc/include/sys/types.h | 12 --- libc/src/asm/i386/longjmp.S | 25 ------- libc/src/asm/i386/setjmp.S | 25 ------- libc/src/asm/x86_64/longjmp.S | 27 ------- libc/src/asm/x86_64/setjmp.S | 28 ------- libc/src/ctype.c | 35 --------- libc/src/errno.c | 7 -- libc/src/kernaux.c | 17 ----- libc/src/stdlib.c | 70 ------------------ libc/src/string.c | 135 ---------------------------------- make/checks.am | 2 - make/shared.am | 6 -- 28 files changed, 12 insertions(+), 653 deletions(-) delete mode 100644 libc/Makefile.am delete mode 100644 libc/include/Makefile.am delete mode 100644 libc/include/ctype.h delete mode 100644 libc/include/errno.h delete mode 100644 libc/include/inttypes.h delete mode 100644 libc/include/kernaux/libc.h delete mode 100644 libc/include/setjmp.h delete mode 100644 libc/include/stdlib.h delete mode 100644 libc/include/string.h delete mode 100644 libc/include/sys/types.h delete mode 100644 libc/src/asm/i386/longjmp.S delete mode 100644 libc/src/asm/i386/setjmp.S delete mode 100644 libc/src/asm/x86_64/longjmp.S delete mode 100644 libc/src/asm/x86_64/setjmp.S delete mode 100644 libc/src/ctype.c delete mode 100644 libc/src/errno.c delete mode 100644 libc/src/kernaux.c delete mode 100644 libc/src/stdlib.c delete mode 100644 libc/src/string.c diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7a21c54..239aaa3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -122,7 +122,7 @@ jobs: - name: autogen run: ./autogen.sh - name: configure - run: ./configure --host='i386-elf' ${{matrix.assert}} --enable-freestanding --with-libc CC="$(which i686-linux-gnu-gcc)" + run: ./configure --host='i386-elf' ${{matrix.assert}} --enable-freestanding CC="$(which i686-linux-gnu-gcc)" - name: make run: make diff --git a/.gitignore b/.gitignore index 0eef5a1..492540c 100644 --- a/.gitignore +++ b/.gitignore @@ -45,8 +45,6 @@ /examples/Makefile.in /fixtures/Makefile.in /include/Makefile.in -/libc/Makefile.in -/libc/include/Makefile.in /tests/Makefile.in ########################################### @@ -78,8 +76,6 @@ /examples/Makefile /fixtures/Makefile /include/Makefile -/libc/Makefile -/libc/include/Makefile /tests/Makefile /libkernaux.pc diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c75e7d2..beec6fc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,8 +4,8 @@ Common * Add your name to [COPYING](/COPYING). * Don't add your name to `AUTHORS` - it's for maintainers. * Add copyright notice in the beginning of changed files except the headers. -* If you change the behavior (even just fix a bug) of **libkernaux** (stable) or - [libc](/libc), add a record to [ChangeLog](/ChangeLog). +* If you change the behavior (even just fix a bug), add a record + to [ChangeLog](/ChangeLog). Prohibitions: diff --git a/ChangeLog b/ChangeLog index 9f91e1a..7e93f82 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2022-12-27 Alex Kotov + + * configure.ac: Package "--with[out]-libc" has been removed + 2022-12-23 Alex Kotov libkernaux 0.7.0 released diff --git a/Makefile.am b/Makefile.am index 203bdba..d85971e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -6,11 +6,6 @@ EXTRA_DIST = autogen.sh CONTRIBUTING.md sha256sums.txt src/assert.h SUBDIRS = include -if WITH_LIBC -# FIXME: after "make clean" libc is not rebuiling -SUBDIRS += libc -endif - SUBDIRS += . if ENABLE_FIXTURES @@ -21,9 +16,6 @@ if ENABLE_CHECKS SUBDIRS += examples tests endif -libc/libc.la: - $(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/libc libc.la - AM_CFLAGS += -DKERNAUX_ACCESS_PRIVATE lib_LTLIBRARIES = libkernaux.la @@ -45,14 +37,6 @@ libkernaux_la_SOURCES = \ src/generic/mutex.c \ src/runtime.c -######## -# libc # -######## - -if WITH_LIBC -libkernaux_la_LIBADD += libc/libc.la -endif - ####### # ARCH # ####### diff --git a/README.md b/README.md index 1ca6878..dcac2c3 100644 --- a/README.md +++ b/README.md @@ -81,14 +81,6 @@ zero). Work-in-progress APIs can change at any time. * [Example: vfprintf](/examples/printf_file_va.c) * [Example: snprintf](/examples/printf_str.c) * [Example: vsnprintf](/examples/printf_str_va.c) -* libc replacement (*work in progress*) - * [ctype.h](/libc/include/ctype.h) - * [errno.h](/libc/include/errno.h) - * [inttypes.h](/libc/include/inttypes.h) - * [setjmp.h](/libc/include/setjmp.h) - * [stdlib.h](/libc/include/stdlib.h) - * [string.h](/libc/include/string.h) - * [sys/types.h](/libc/include/sys/types.h) * Architecture-specific code (*work in progress*) * [Declarations](/include/kernaux/arch/) * [Functions](/include/kernaux/asm/) @@ -143,11 +135,6 @@ stable options. * `--enable-pkg-config[=PATH]` - install pkg-config files [PATH='${libdir}/pkgconfig'] -#### Packages - -* `--with-libc` - provides the replacement for some standard C functions. - Useful in freestanding environment, where no libc is present. - ### Default options #### Features @@ -211,6 +198,9 @@ You can test with `make check`. Create configuration script with `./autogen.sh` (if present). +The library requires some functions from the standard C library. +Use [libclayer](https://github.com/tailix/libclayer). + Let's assume that your target triplet is `i386-elf`. Configure with [cross-compiler](https://wiki.osdev.org/GCC_Cross-Compiler) in `$PATH` to make without it in `$PATH`: @@ -220,8 +210,8 @@ without it in `$PATH`: --host='i386-elf' \ --disable-shared \ --enable-freestanding \ - --with-libc \ - CC="$(which i386-elf-gcc)" + CC="$(which i386-elf-gcc)" \ + CFLAGS='-I' ``` The variables include `AR`, `AS`, `CC`, `CCAS`, `LD`, `NM`, `OBJDUMP`, `RANLIB`, diff --git a/configure.ac b/configure.ac index 00709d9..8afa541 100644 --- a/configure.ac +++ b/configure.ac @@ -30,8 +30,6 @@ AC_CONFIG_FILES([ fixtures/Makefile fixtures/multiboot2_bin_examples_gen.c include/Makefile - libc/Makefile - libc/include/Makefile include/kernaux/version.h tests/Makefile tests/test_multiboot2_header_print.c @@ -62,7 +60,6 @@ AC_ARG_ENABLE([checks-all], AS_HELP_STRING([--enable-checks-all], [ena AC_ARG_ENABLE([checks-cppcheck], AS_HELP_STRING([--enable-checks-cppcheck], [enable cppcheck])) AC_ARG_ENABLE([checks-pthreads], AS_HELP_STRING([--enable-checks-pthreads], [enable tests that require pthreads])) AC_ARG_ENABLE([checks-python], AS_HELP_STRING([--enable-checks-python], [enable tests that require Python 3 with YAML and Jinja2])) -AC_ARG_ENABLE([split-libc], AS_HELP_STRING([--enable-split-libc], [split off libc])) dnl Features (with parameter) AC_ARG_ENABLE([pkg-config], AS_HELP_STRING([--enable-pkg-config@<:@=PATH@:>@], [install pkg-config files @<:@PATH='${libdir}/pkgconfig'@:>@])) @@ -86,9 +83,6 @@ AC_ARG_WITH( [printf], AS_HELP_STRING([--without-printf], [wit AC_ARG_WITH( [printf-fmt], AS_HELP_STRING([--without-printf-fmt], [without printf format parser])) AC_ARG_WITH( [units], AS_HELP_STRING([--without-units], [without measurement units utils])) -dnl Packages (disabled by default) -AC_ARG_WITH( [libc], AS_HELP_STRING([--with-libc], [with libc replacement])) - ################ @@ -151,7 +145,6 @@ AS_IF([test "$enable_checks_all" = yes], [enable_checks_all=yes], [ena AS_IF([test "$enable_checks_cppcheck" = yes], [enable_checks_cppcheck=yes], [enable_checks_cppcheck=no]) AS_IF([test "$enable_checks_pthreads" = yes], [enable_checks_pthreads=yes], [enable_checks_pthreads=no]) AS_IF([test "$enable_checks_python" = yes], [enable_checks_python=yes], [enable_checks_python=no]) -AS_IF([test "$enable_split_libc" = yes], [enable_split_libc=yes], [enable_split_libc=no]) dnl Features (with parameter) AS_IF([test "$enable_pkg_config" = yes], [enable_pkg_config='${libdir}/pkgconfig']) @@ -176,9 +169,6 @@ AS_IF([test "$with_printf" = no ], [with_printf=no], [wit AS_IF([test "$with_printf_fmt" = no ], [with_printf_fmt=no], [with_printf_fmt=yes]) AS_IF([test "$with_units" = no ], [with_units=no], [with_units=yes]) -dnl Packages (disabled by default) -AS_IF([test "$with_libc" = yes], [with_libc=yes], [with_libc=no]) - ############# @@ -187,8 +177,6 @@ AS_IF([test "$with_libc" = yes], [with_libc=yes], [wit AS_IF([test "$enable_checks" = yes -a "$enable_freestanding" = yes], AC_MSG_ERROR([can not build freestanding tests])) AS_IF([test "$enable_fixtures" = yes -a "$enable_freestanding" = yes], AC_MSG_ERROR([can not build freestanding fixtures])) -AS_IF([test "$enable_checks" = yes -a "$with_libc" = yes], AC_MSG_ERROR([can not use package `libc' with tests])) -AS_IF([test "$enable_fixtures" = yes -a "$with_libc" = yes], AC_MSG_ERROR([can not use package `libc' with fixtures])) AS_IF([test "$with_printf" = yes -a "$with_ntoa" = no], AC_MSG_ERROR([package `printf' requires package `ntoa'])) AS_IF([test "$with_printf" = yes -a "$with_printf_fmt" = no], AC_MSG_ERROR([package `printf' requires package `printf-fmt'])) @@ -220,7 +208,6 @@ AM_CONDITIONAL([ENABLE_CHECKS], [test "$enable_checks" = yes]) AM_CONDITIONAL([ENABLE_CHECKS_CPPCHECK], [test "$enable_checks_cppcheck" = yes]) AM_CONDITIONAL([ENABLE_CHECKS_PTHREADS], [test "$enable_checks_pthreads" = yes]) AM_CONDITIONAL([ENABLE_CHECKS_PYTHON], [test "$enable_checks_python" = yes]) -AM_CONDITIONAL([ENABLE_SPLIT_LIBC], [test "$enable_split_libc" = yes]) dnl Features (with parameter) AM_CONDITIONAL([ENABLE_PKG_CONFIG], [test ! -z "$enable_pkg_config"]) @@ -242,9 +229,6 @@ AM_CONDITIONAL([WITH_PRINTF], [test "$with_printf" = yes]) AM_CONDITIONAL([WITH_PRINTF_FMT], [test "$with_printf_fmt" = yes]) AM_CONDITIONAL([WITH_UNITS], [test "$with_units" = yes]) -dnl Packages (disabled by default) -AM_CONDITIONAL([WITH_LIBC], [test "$with_libc" = yes]) - dnl Packages (virtual) AM_CONDITIONAL([WITH_ARCH_X86], [test "$with_arch_i386" = yes -o "$with_arch_x86_64" = yes]) @@ -275,7 +259,6 @@ AS_IF([test "$enable_checks" = yes], [AC_DEFINE([ENABLE_CHECKS], AS_IF([test "$enable_checks_cppcheck" = yes], [AC_DEFINE([ENABLE_CHECKS_CPPCHECK], [1], [enabled cppcheck])]) AS_IF([test "$enable_checks_pthreads" = yes], [AC_DEFINE([ENABLE_CHECKS_PTHREADS], [1], [enabled tests that require pthreads])]) AS_IF([test "$enable_checks_python" = yes], [AC_DEFINE([ENABLE_CHECKS_PYTHON], [1], [enabled tests that require Python 3 with YAML and Jinja2])]) -AS_IF([test "$enable_split_libc" = yes], [AC_DEFINE([ENABLE_SPLIT_LIBC], [1], [split off libc])]) dnl Packages (enabled by default) AS_IF([test "$with_arch_i386" = yes], [AC_DEFINE([WITH_ARCH_I386], [1], [with architecture i386])]) @@ -294,9 +277,6 @@ AS_IF([test "$with_printf" = yes], [AC_DEFINE([WITH_PRINTF], AS_IF([test "$with_printf_fmt" = yes], [AC_DEFINE([WITH_PRINTF_FMT], [1], [with printf format parser])]) AS_IF([test "$with_units", = yes], [AC_DEFINE([WITH_UNITS], [1], [with measurement units utils])]) -dnl Packages (disabled by default) -AS_IF([test "$with_libc" = yes], [AC_DEFINE([WITH_LIBC], [1], [with libc replacement])]) - dnl Packages (virtual) AS_IF([test "$with_arch_i386" = yes], [AC_DEFINE([WITH_ARCH_X86], [1], [with architecture x86])]) AS_IF([test "$with_arch_x86_64" = yes], [AC_DEFINE([WITH_ARCH_X86], [1], [with architecture x86])]) diff --git a/libc/Makefile.am b/libc/Makefile.am deleted file mode 100644 index 524872f..0000000 --- a/libc/Makefile.am +++ /dev/null @@ -1,30 +0,0 @@ -include $(top_srcdir)/make/shared.am - -SUBDIRS = include - -if ENABLE_SPLIT_LIBC -lib_LTLIBRARIES = libc.la -else -EXTRA_LTLIBRARIES = libc.la -endif - -libc_la_SOURCES = \ - src/ctype.c \ - src/errno.c \ - src/kernaux.c \ - src/stdlib.c \ - src/string.c - -if ASM_I386 -libc_la_SOURCES += \ - src/asm/i386/longjmp.S \ - src/asm/i386/setjmp.S -endif - -if ASM_X86_64 -libc_la_SOURCES += \ - src/asm/x86_64/longjmp.S \ - src/asm/x86_64/setjmp.S -endif - -# TODO: implement setjmp/longjmp for riscv64 diff --git a/libc/include/Makefile.am b/libc/include/Makefile.am deleted file mode 100644 index 4a748cc..0000000 --- a/libc/include/Makefile.am +++ /dev/null @@ -1,9 +0,0 @@ -nobase_include_HEADERS = \ - kernaux/libc.h \ - ctype.h \ - errno.h \ - inttypes.h \ - setjmp.h \ - stdlib.h \ - string.h \ - sys/types.h diff --git a/libc/include/ctype.h b/libc/include/ctype.h deleted file mode 100644 index f8b895a..0000000 --- a/libc/include/ctype.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef _CTYPE_H -#define _CTYPE_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -int isdigit(int c); -int islower(int c); -int isspace(int c); -int isupper(int c); - -int tolower(int c); -int toupper(int c); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libc/include/errno.h b/libc/include/errno.h deleted file mode 100644 index 755a4c7..0000000 --- a/libc/include/errno.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef _ERRNO_H -#define _ERRNO_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -#define ERANGE 1 - -extern int errno; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libc/include/inttypes.h b/libc/include/inttypes.h deleted file mode 100644 index 0e78627..0000000 --- a/libc/include/inttypes.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _INTTYPES_H -#define _INTTYPES_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libc/include/kernaux/libc.h b/libc/include/kernaux/libc.h deleted file mode 100644 index 46ceb92..0000000 --- a/libc/include/kernaux/libc.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef KERNAUX_INCLUDED_LIBC -#define KERNAUX_INCLUDED_LIBC - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -struct KernAux_Libc { - void (*abort)() __attribute__((noreturn)); - void (*exit)(int status) __attribute__((noreturn)); - - void *(*calloc)(size_t nmemb, size_t size); - void (*free)(void *ptr); - void *(*malloc)(size_t size); - void *(*realloc)(void *ptr, size_t size); -}; - -extern struct KernAux_Libc kernaux_libc; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libc/include/setjmp.h b/libc/include/setjmp.h deleted file mode 100644 index b46ffac..0000000 --- a/libc/include/setjmp.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef _SETJMP_H -#define _SETJMP_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -// TODO: define in architecture-specific header -typedef unsigned long __jmp_buf[sizeof(long) == 8 ? 8 : 6]; - -typedef struct __jmp_buf_tag { - __jmp_buf __jb; - unsigned long __fl; - unsigned long __ss[128 / sizeof(long)]; -} jmp_buf[1]; - -__attribute__((returns_twice)) -int setjmp(jmp_buf env); - -__attribute__((noreturn)) -void longjmp(jmp_buf env, int val); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h deleted file mode 100644 index 18baf84..0000000 --- a/libc/include/stdlib.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef _STDLIB_H -#define _STDLIB_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#define EXIT_SUCCESS 0 -#define EXIT_FAILURE 1 - -int atoi(const char *str); - -__attribute__((noreturn)) -void abort(); -__attribute__((noreturn)) -void exit(int status); - -void *calloc(size_t nmemb, size_t size); -void free(void *ptr); -void *malloc(size_t size); -void *realloc(void *ptr, size_t size); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libc/include/string.h b/libc/include/string.h deleted file mode 100644 index 682a117..0000000 --- a/libc/include/string.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef _STRING_H -#define _STRING_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -// mem* -int memcmp(const void *s1, const void *s2, size_t n); -void *memcpy(void *dest, const void *src, size_t n); -void *memmove(void *dest, const void *src, size_t n); -void *memchr(const void *s, int c, size_t n); -void *memset(void *s, int c, size_t n); - -// str* -char *strcat(char *dest, const char *src); -char *strchr(const char *s, int c); -int strcmp(const char *s1, const char *s2); -char *strcpy(char *dest, const char *src); -size_t strlen(const char *s); - -// strn* -char *strncat(char *dest, const char *src, size_t n); -int strncmp(const char *s1, const char *s2, size_t n); -char *strncpy(char *dest, const char *src, size_t n); -size_t strnlen(const char *s, size_t maxlen); - -// str* -char *strstr(const char *haystack, const char *needle); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libc/include/sys/types.h b/libc/include/sys/types.h deleted file mode 100644 index d1bf329..0000000 --- a/libc/include/sys/types.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef _SYS_TYPES_H -#define _SYS_TYPES_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libc/src/asm/i386/longjmp.S b/libc/src/asm/i386/longjmp.S deleted file mode 100644 index 00fafbd..0000000 --- a/libc/src/asm/i386/longjmp.S +++ /dev/null @@ -1,25 +0,0 @@ -/** - * The code was taken from musl libc. - * - * Copyright (c) 2011 Rich Felker - * Copyright (c) 2022 Alexander Monakov - * Copyright (c) 2022 Alex Kotov - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -.global longjmp -.type longjmp, @function -longjmp: - mov 4(%esp) , %edx - mov 8(%esp) , %eax - cmp $1 , %eax - adc $0 , %al - mov (%edx) , %ebx - mov 4(%edx) , %esi - mov 8(%edx) , %edi - mov 12(%edx) , %ebp - mov 16(%edx) , %esp - jmp *20(%edx) diff --git a/libc/src/asm/i386/setjmp.S b/libc/src/asm/i386/setjmp.S deleted file mode 100644 index 841544d..0000000 --- a/libc/src/asm/i386/setjmp.S +++ /dev/null @@ -1,25 +0,0 @@ -/** - * The code was taken from musl libc. - * - * Copyright (c) 2011-2015 Rich Felker - * Copyright (c) 2022 Alex Kotov - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -.global setjmp -.type setjmp, @function -setjmp: - mov 4(%esp) , %eax - mov %ebx , (%eax) - mov %esi , 4(%eax) - mov %edi , 8(%eax) - mov %ebp , 12(%eax) - lea 4(%esp) , %ecx - mov %ecx , 16(%eax) - mov (%esp) , %ecx - mov %ecx , 20(%eax) - xor %eax , %eax - ret diff --git a/libc/src/asm/x86_64/longjmp.S b/libc/src/asm/x86_64/longjmp.S deleted file mode 100644 index 7565082..0000000 --- a/libc/src/asm/x86_64/longjmp.S +++ /dev/null @@ -1,27 +0,0 @@ -/** - * The code was taken from musl libc. - * - * Copyright (c) 2011 Nicholas J. Kain - * Copyright (c) 2011-2012 Rich Felker - * Copyright (c) 2022 Alexander Monakov - * Copyright (c) 2022 Alex Kotov - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -.global longjmp -.type longjmp, @function -longjmp: - xor %eax , %eax - cmp $1 , %esi /* CF = val ? 0 : 1 */ - adc %esi , %eax /* eax = val + !val */ - mov (%rdi) , %rbx /* rdi is the jmp_buf, restore regs from it */ - mov 8(%rdi) , %rbp - mov 16(%rdi) , %r12 - mov 24(%rdi) , %r13 - mov 32(%rdi) , %r14 - mov 40(%rdi) , %r15 - mov 48(%rdi) , %rsp - jmp *56(%rdi) /* goto saved address without altering rsp */ diff --git a/libc/src/asm/x86_64/setjmp.S b/libc/src/asm/x86_64/setjmp.S deleted file mode 100644 index 6279a60..0000000 --- a/libc/src/asm/x86_64/setjmp.S +++ /dev/null @@ -1,28 +0,0 @@ -/** - * The code was taken from musl libc. - * - * Copyright (c) 2011 Nicholas J. Kain - * Copyright (c) 2011-2012 Rich Felker - * Copyright (c) 2022 Alexander Monakov - * Copyright (c) 2022 Alex Kotov - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -.global setjmp -.type setjmp, @function -setjmp: -mov %rbx , (%rdi) /* rdi is jmp_buf, move registers onto it */ -mov %rbp , 8(%rdi) -mov %r12 , 16(%rdi) -mov %r13 , 24(%rdi) -mov %r14 , 32(%rdi) -mov %r15 , 40(%rdi) -lea 8(%rsp) , %rdx /* this is our rsp WITHOUT current ret addr */ -mov %rdx , 48(%rdi) -mov (%rsp) , %rdx /* save return addr ptr for new rip */ -mov %rdx , 56(%rdi) -xor %eax , %eax /* always return 0 */ -ret diff --git a/libc/src/ctype.c b/libc/src/ctype.c deleted file mode 100644 index 92ab5f4..0000000 --- a/libc/src/ctype.c +++ /dev/null @@ -1,35 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -int isdigit(const int c) -{ - return (unsigned)c - '0' < 10; -} - -int islower(const int c) -{ - return (unsigned)c - 'a' < 26; -} - -int isspace(const int c) -{ - return c == ' ' || (unsigned)c - '\t' < 5; -} - -int isupper(const int c) -{ - return (unsigned)c - 'A' < 26; -} - -int tolower(const int c) -{ - return isupper(c) ? (c + ('a' - 'A')) : c; -} - -int toupper(const int c) -{ - return islower(c) ? (c - ('a' - 'A')) : c; -} diff --git a/libc/src/errno.c b/libc/src/errno.c deleted file mode 100644 index ebd7d69..0000000 --- a/libc/src/errno.c +++ /dev/null @@ -1,7 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -int errno = 0; diff --git a/libc/src/kernaux.c b/libc/src/kernaux.c deleted file mode 100644 index 688c769..0000000 --- a/libc/src/kernaux.c +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include - -struct KernAux_Libc kernaux_libc = { - .abort = NULL, - .exit = NULL, - - .calloc = NULL, - .free = NULL, - .malloc = NULL, - .realloc = NULL, -}; diff --git a/libc/src/stdlib.c b/libc/src/stdlib.c deleted file mode 100644 index 5d6a9ca..0000000 --- a/libc/src/stdlib.c +++ /dev/null @@ -1,70 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include -#include -#include - -void exit(const int status) -{ - // Custom implementation - kernaux_libc.exit(status); -} - -void abort() -{ - // Custom implementation - if (kernaux_libc.abort) kernaux_libc.abort(); - - // Default implementation - exit(EXIT_FAILURE); -} - -void *calloc(const size_t nmemb, const size_t size) -{ - // Custom implementation - if (kernaux_libc.calloc) return kernaux_libc.calloc(nmemb, size); - - // Default implementation - const size_t total_size = nmemb * size; - if (!total_size) return NULL; - if (total_size / nmemb != size) return NULL; - void *const ptr = malloc(total_size); - if (ptr) memset(ptr, 0, total_size); - return ptr; -} - -void free(void *const ptr) -{ - // Custom implementation - kernaux_libc.free(ptr); -} - -void *malloc(const size_t size) -{ - // Custom implementation - return kernaux_libc.malloc(size); -} - -void *realloc(void *const ptr, const size_t size) -{ - // Custom implementation - return kernaux_libc.realloc(ptr, size); -} - -int atoi(const char *str) -{ - while (isspace(*str)) ++str; - bool is_negative = false; - switch (*str) { - case '-': is_negative = true; // fall through - case '+': ++str; - } - int result = 0; - while (isdigit(*str)) result = 10 * result - (*str++ - '0'); - return is_negative ? result : -result; -} diff --git a/libc/src/string.c b/libc/src/string.c deleted file mode 100644 index 45045f8..0000000 --- a/libc/src/string.c +++ /dev/null @@ -1,135 +0,0 @@ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include -#include - -int memcmp(const void *s1, const void *s2, size_t n) -{ - for (const unsigned char *p1 = s1, *p2 = s2; n--; ++p1, ++p2) { - if (*p1 != *p2) return *p1 - *p2; - } - return 0; -} - -void *memcpy(void *dest, const void *src, size_t n) -{ - char *dest_cell = dest; - char *src_cell = (char*)src; - while (n--) *dest_cell++ = *src_cell++; - return dest; -} - -void *memmove(void *dest, const void *src, size_t n) -{ - char *dest_cell = dest; - char *src_cell = (char*)src; - if (dest_cell <= src_cell) { - while (n--) *dest_cell++ = *src_cell++; - } else { - dest_cell += n; - src_cell += n; - while (n--) *--dest_cell = *--src_cell; - } - return dest; -} - -void *memchr(const void *s, int c, size_t n) -{ - for (const unsigned char *p = s; n--; ++p) { - if ((unsigned char)c == *p) return (void*)p; - } - return NULL; -} - -void *memset(void *s, int c, size_t n) -{ - char *ss = s; - while (n--) *ss++ = c; - return s; -} - -char *strcat(char *dest, const char *src) -{ - char *const dest_start = dest; - while (*dest) ++dest; - while ((*dest++ = *src++)); - return dest_start; -} - -char *strchr(const char *s, int c) -{ - for (; *s != (char)c; ++s) if (*s == '\0') return NULL; - return (char*)s; -} - -int strcmp(const char *s1, const char *s2) -{ - for (; *s1; ++s1, ++s2) if (*s1 != *s2) return *s1 < *s2 ? -1 : 1; - return 0; -} - -char *strcpy(char *dest, const char *src) -{ - char *tmp = dest; - while ((*dest++ = *src++) != '\0'); - return tmp; -} - -size_t strlen(const char *s) -{ - const char *ss = s; - while (*ss != '\0') ++ss; - return ss - s; -} - -char *strncat(char *dest, const char *src, size_t n) -{ - char *const dest_start = dest; - if (n) { - while (*dest) ++dest; - while ((*dest++ = *src++)) { - if (--n == 0) { - *dest = '\0'; - break; - } - } - } - return dest_start; -} - -int strncmp(const char *s1, const char *s2, size_t n) -{ - for (; *s1 && n; ++s1, ++s2, --n) if (*s1 != *s2) return *s1 < *s2 ? -1 : 1; - return 0; -} - -char *strncpy(char *dest, const char *src, size_t n) -{ - char *tmp = dest; - while (n-- && (*dest++ = *src++) != '\0'); - return tmp; -} - -size_t strnlen(const char *s, size_t maxlen) -{ - const char *ss = s; - while (*ss != '\0' && maxlen--) ++ss; - return ss - s; -} - -char *strstr(const char *haystack, const char *needle) -{ - const size_t needle_slen = strlen(needle); - if (!needle_slen) return (char*)haystack; - - size_t haystack_slen = strlen(haystack); - while (haystack_slen >= needle_slen) { - --haystack_slen; - if (!memcmp(haystack, needle, needle_slen)) return (char*)haystack; - ++haystack; - } - - return NULL; -} diff --git a/make/checks.am b/make/checks.am index 0424b4a..94b4eb3 100644 --- a/make/checks.am +++ b/make/checks.am @@ -31,8 +31,6 @@ CPPCHECK_PATHS = \ $(top_srcdir)/examples \ $(top_builddir)/include \ $(top_srcdir)/include \ - $(top_builddir)/libc \ - $(top_srcdir)/libc \ $(top_builddir)/src \ $(top_srcdir)/src \ $(top_builddir)/tests \ diff --git a/make/shared.am b/make/shared.am index 767a8db..0f94fd0 100644 --- a/make/shared.am +++ b/make/shared.am @@ -9,12 +9,6 @@ AM_CFLAGS = \ -I$(top_srcdir)/include \ -D_POSIX_C_SOURCE=200809L -if WITH_LIBC -AM_CFLAGS += \ - -I$(top_builddir)/libc/include \ - -I$(top_srcdir)/libc/include -endif - if ENABLE_WERROR AM_CFLAGS += -Werror endif