mirror of
https://github.com/Fennix-Project/Userspace.git
synced 2025-05-28 15:34:26 +00:00
Updated libs
This commit is contained in:
parent
dc1971acef
commit
9ff9b3a319
@ -1,8 +1,10 @@
|
|||||||
build:
|
build:
|
||||||
cp include/* ../out/system/include
|
cp include/* ../out/system/include
|
||||||
make --quiet -C libgcc build
|
make --quiet -C libgcc build
|
||||||
|
make --quiet -C libinit build
|
||||||
make --quiet -C libssp build
|
make --quiet -C libssp build
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
make -C libgcc clean
|
make -C libgcc clean
|
||||||
|
make -C libinit clean
|
||||||
make -C libssp clean
|
make -C libssp clean
|
||||||
|
15
libs/include/init.h
Normal file
15
libs/include/init.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#ifndef __FENNIX_LIBS_INIT_H__
|
||||||
|
#define __FENNIX_LIBS_INIT_H__
|
||||||
|
|
||||||
|
#include <types.h>
|
||||||
|
|
||||||
|
int printf_libinit(const char *format, ...) __attribute__((format(__printf__, (1), (2))));
|
||||||
|
int vprintf_libinit(const char *format, va_list arg) __attribute__((format(__printf__, ((1)), (0))));
|
||||||
|
int sprintf_libinit(char *s, const char *format, ...) __attribute__((format(__printf__, (2), (3))));
|
||||||
|
int vsprintf_libinit(char *s, const char *format, va_list arg) __attribute__((format(__printf__, ((2)), (0))));
|
||||||
|
int snprintf_libinit(char *s, size_t count, const char *format, ...) __attribute__((format(__printf__, (3), (4))));
|
||||||
|
int vsnprintf_libinit(char *s, size_t count, const char *format, va_list arg) __attribute__((format(__printf__, ((3)), (0))));
|
||||||
|
|
||||||
|
void init_log(const char *fmt, ...) __attribute__((format(__printf__, (1), (2))));
|
||||||
|
|
||||||
|
#endif // !__FENNIX_LIBS_INIT_H__
|
47
libs/libinit/Makefile
Normal file
47
libs/libinit/Makefile
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# Config file
|
||||||
|
include ../../../Makefile.conf
|
||||||
|
|
||||||
|
NAME=init
|
||||||
|
|
||||||
|
OBJECT_NAME=lib$(NAME).a
|
||||||
|
|
||||||
|
OUTPUT_DIR=../../out/system/lib/
|
||||||
|
|
||||||
|
CC = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)gcc
|
||||||
|
AS = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)as
|
||||||
|
AR = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)ar
|
||||||
|
NASM = /usr/bin/nasm
|
||||||
|
|
||||||
|
C_SOURCES = $(shell find ./ -type f -name '*.c')
|
||||||
|
CPP_SOURCES = $(shell find ./ -type f -name '*.cpp')
|
||||||
|
S_SOURCES = $(shell find ./ -type f -name '*.S')
|
||||||
|
ASM_SOURCES = $(shell find ./ -type f -name '*.asm')
|
||||||
|
OBJ = ${C_SOURCES:.c=.o} ${CPP_SOURCES:.cpp=.o} ${ASM_SOURCES:.asm=.o} ${S_SOURCES:.S=.o}
|
||||||
|
|
||||||
|
ifeq ($(OSARCH), amd64)
|
||||||
|
ASM_ARCH := elf64
|
||||||
|
else ifeq ($(OSARCH), i686)
|
||||||
|
ASM_ARCH := elf32
|
||||||
|
endif
|
||||||
|
|
||||||
|
CFLAGS := -fPIC -I../include -I../../libc/include
|
||||||
|
|
||||||
|
build: $(OBJECT_NAME)
|
||||||
|
|
||||||
|
$(OBJECT_NAME): $(OBJ)
|
||||||
|
$(AR) rcs $(OUTPUT_DIR)$@ $(OBJ)
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC) $(CFLAGS) -std=c17 -c $< -o $@
|
||||||
|
|
||||||
|
%.o: %.cpp
|
||||||
|
$(CC) $(CFLAGS) -std=c++20 -c $< -o $@
|
||||||
|
|
||||||
|
%.o: %.S
|
||||||
|
$(AS) -c $< -o $@
|
||||||
|
|
||||||
|
%.o: %.asm
|
||||||
|
$(NASM) $< -f $(ASM_ARCH) -o $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(OBJ)
|
10
libs/libinit/libinit.c
Normal file
10
libs/libinit/libinit.c
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#include <init.h>
|
||||||
|
|
||||||
|
void init_log(const char *fmt, ...)
|
||||||
|
{
|
||||||
|
printf_libinit("\eCCCCCC[\e0088FFinit\eCCCCCC] \eAAAAAA");
|
||||||
|
va_list args;
|
||||||
|
va_start(args, fmt);
|
||||||
|
vprintf_libinit(fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
}
|
1591
libs/libinit/printf.c
Normal file
1591
libs/libinit/printf.c
Normal file
File diff suppressed because it is too large
Load Diff
171
libs/libinit/printf.h
Normal file
171
libs/libinit/printf.h
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
/**
|
||||||
|
* @author (c) Eyal Rozenberg <eyalroz1@gmx.com>
|
||||||
|
* 2021-2022, Haifa, Palestine/Israel
|
||||||
|
* @author (c) Marco Paland (info@paland.com)
|
||||||
|
* 2014-2019, PALANDesign Hannover, Germany
|
||||||
|
*
|
||||||
|
* @note Others have made smaller contributions to this file: see the
|
||||||
|
* contributors page at https://github.com/eyalroz/printf/graphs/contributors
|
||||||
|
* or ask one of the authors.
|
||||||
|
*
|
||||||
|
* @brief Small stand-alone implementation of the printf family of functions
|
||||||
|
* (`(v)printf`, `(v)s(n)printf` etc., geared towards use on embedded systems with
|
||||||
|
* a very limited resources.
|
||||||
|
*
|
||||||
|
* @note the implementations are thread-safe; re-entrant; use no functions from
|
||||||
|
* the standard library; and do not dynamically allocate any memory.
|
||||||
|
*
|
||||||
|
* @license The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PRINTF_H_
|
||||||
|
#define PRINTF_H_
|
||||||
|
|
||||||
|
#include <types.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define ATTR_PRINTF(one_based_format_index, first_arg) \
|
||||||
|
__attribute__((format(__printf__, (one_based_format_index), (first_arg))))
|
||||||
|
#define ATTR_VPRINTF(one_based_format_index) ATTR_PRINTF((one_based_format_index), 0)
|
||||||
|
#else
|
||||||
|
#define ATTR_PRINTF((one_based_format_index), (first_arg))
|
||||||
|
#define ATTR_VPRINTF(one_based_format_index)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef PRINTF_ALIAS_STANDARD_FUNCTION_NAMES
|
||||||
|
#define PRINTF_ALIAS_STANDARD_FUNCTION_NAMES 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if PRINTF_ALIAS_STANDARD_FUNCTION_NAMES
|
||||||
|
#define printf_ printf
|
||||||
|
#define sprintf_ sprintf
|
||||||
|
#define vsprintf_ vsprintf
|
||||||
|
#define snprintf_ snprintf
|
||||||
|
#define vsnprintf_ vsnprintf
|
||||||
|
#define vprintf_ vprintf
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// If you want to include this implementation file directly rather than
|
||||||
|
// link against, this will let you control the functions' visibility,
|
||||||
|
// e.g. make them static so as not to clash with other objects also
|
||||||
|
// using them.
|
||||||
|
#ifndef PRINTF_VISIBILITY
|
||||||
|
#define PRINTF_VISIBILITY
|
||||||
|
#endif
|
||||||
|
/**
|
||||||
|
* An implementation of the C standard's printf/vprintf
|
||||||
|
*
|
||||||
|
* @note you must implement a @ref putchar_ function for using this function - it invokes @ref putchar_
|
||||||
|
* rather than directly performing any I/O (which insulates it from any dependence on the operating system
|
||||||
|
* and external libraries).
|
||||||
|
*
|
||||||
|
* @param format A string specifying the format of the output, with %-marked specifiers of how to interpret
|
||||||
|
* additional arguments.
|
||||||
|
* @param arg Additional arguments to the function, one for each %-specifier in @p format string
|
||||||
|
* @return The number of characters written into @p s, not counting the terminating null character
|
||||||
|
*/
|
||||||
|
///@{
|
||||||
|
PRINTF_VISIBILITY
|
||||||
|
int printf_libinit(const char *format, ...) ATTR_PRINTF(1, 2);
|
||||||
|
PRINTF_VISIBILITY
|
||||||
|
int vprintf_libinit(const char *format, va_list arg) ATTR_VPRINTF(1);
|
||||||
|
///@}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An implementation of the C standard's sprintf/vsprintf
|
||||||
|
*
|
||||||
|
* @note For security considerations (the potential for exceeding the buffer bounds), please consider using
|
||||||
|
* the size-constrained variant, @ref snprintf / @ref vsnprintf , instead.
|
||||||
|
*
|
||||||
|
* @param s An array in which to store the formatted string. It must be large enough to fit the formatted
|
||||||
|
* output!
|
||||||
|
* @param format A string specifying the format of the output, with %-marked specifiers of how to interpret
|
||||||
|
* additional arguments.
|
||||||
|
* @param arg Additional arguments to the function, one for each specifier in @p format
|
||||||
|
* @return The number of characters written into @p s, not counting the terminating null character
|
||||||
|
*/
|
||||||
|
///@{
|
||||||
|
PRINTF_VISIBILITY
|
||||||
|
int sprintf_libinit(char *s, const char *format, ...) ATTR_PRINTF(2, 3);
|
||||||
|
PRINTF_VISIBILITY
|
||||||
|
int vsprintf_libinit(char *s, const char *format, va_list arg) ATTR_VPRINTF(2);
|
||||||
|
///@}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An implementation of the C standard's snprintf/vsnprintf
|
||||||
|
*
|
||||||
|
* @param s An array in which to store the formatted string. It must be large enough to fit either the
|
||||||
|
* entire formatted output, or at least @p n characters. Alternatively, it can be NULL, in which case
|
||||||
|
* nothing will be printed, and only the number of characters which _could_ have been printed is
|
||||||
|
* tallied and returned.
|
||||||
|
* @param n The maximum number of characters to write to the array, including a terminating null character
|
||||||
|
* @param format A string specifying the format of the output, with %-marked specifiers of how to interpret
|
||||||
|
* additional arguments.
|
||||||
|
* @param arg Additional arguments to the function, one for each specifier in @p format
|
||||||
|
* @return The number of characters that COULD have been written into @p s, not counting the terminating
|
||||||
|
* null character. A value equal or larger than @p n indicates truncation. Only when the returned value
|
||||||
|
* is non-negative and less than @p n, the null-terminated string has been fully and successfully printed.
|
||||||
|
*/
|
||||||
|
///@{
|
||||||
|
PRINTF_VISIBILITY
|
||||||
|
int snprintf_libinit(char *s, size_t count, const char *format, ...) ATTR_PRINTF(3, 4);
|
||||||
|
PRINTF_VISIBILITY
|
||||||
|
int vsnprintf_libinit(char *s, size_t count, const char *format, va_list arg) ATTR_VPRINTF(3);
|
||||||
|
///@}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* printf/vprintf with user-specified output function
|
||||||
|
*
|
||||||
|
* An alternative to @ref printf_, in which the output function is specified dynamically
|
||||||
|
* (rather than @ref putchar_ being used)
|
||||||
|
*
|
||||||
|
* @param out An output function which takes one character and a type-erased additional parameters
|
||||||
|
* @param extra_arg The type-erased argument to pass to the output function @p out with each call
|
||||||
|
* @param format A string specifying the format of the output, with %-marked specifiers of how to interpret
|
||||||
|
* additional arguments.
|
||||||
|
* @param arg Additional arguments to the function, one for each specifier in @p format
|
||||||
|
* @return The number of characters for which the output f unction was invoked, not counting the terminating null character
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
PRINTF_VISIBILITY
|
||||||
|
int fctprintf_libinit(void (*out)(char c, void *extra_arg), void *extra_arg, const char *format, ...) ATTR_PRINTF(3, 4);
|
||||||
|
PRINTF_VISIBILITY
|
||||||
|
int vfctprintf_libinit(void (*out)(char c, void *extra_arg), void *extra_arg, const char *format, va_list arg) ATTR_VPRINTF(3);
|
||||||
|
|
||||||
|
#if PRINTF_ALIAS_STANDARD_FUNCTION_NAMES
|
||||||
|
#undef printf_
|
||||||
|
#undef sprintf_
|
||||||
|
#undef vsprintf_
|
||||||
|
#undef snprintf_
|
||||||
|
#undef vsnprintf_
|
||||||
|
#undef vprintf_
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // PRINTF_H_
|
@ -12,11 +12,8 @@ AR = ../../../$(TC_COMPILER_PATH)/$(TC_COMPILER_ARCH)ar
|
|||||||
NASM = /usr/bin/nasm
|
NASM = /usr/bin/nasm
|
||||||
|
|
||||||
C_SOURCES = $(shell find ./ -type f -name '*.c')
|
C_SOURCES = $(shell find ./ -type f -name '*.c')
|
||||||
S_SOURCES = $(shell find ./ -type f -name '*.s')
|
|
||||||
ASM_SOURCES = $(shell find ./ -type f -name '*.asm')
|
ASM_SOURCES = $(shell find ./ -type f -name '*.asm')
|
||||||
OBJ = ${C_SOURCES:.c=.o} ${ASM_SOURCES:.asm=.o} ${S_SOURCES:.s=.o}
|
OBJ = ${C_SOURCES:.c=.o} ${ASM_SOURCES:.asm=.o}
|
||||||
|
|
||||||
INCLUDE_DIR = ../include
|
|
||||||
|
|
||||||
ifeq ($(OSARCH), amd64)
|
ifeq ($(OSARCH), amd64)
|
||||||
ASM_ARCH := elf64
|
ASM_ARCH := elf64
|
||||||
@ -24,21 +21,21 @@ else ifeq ($(OSARCH), i686)
|
|||||||
ASM_ARCH := elf32
|
ASM_ARCH := elf32
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CFLAGS := -fPIC -I$(INCLUDE_DIR)
|
CFLAGS := -fPIC -I../include -I../../libc/include
|
||||||
|
|
||||||
build: $(OBJECT_NAME)
|
build: $(OBJECT_NAME)
|
||||||
|
|
||||||
$(OBJECT_NAME): $(OBJ)
|
$(OBJECT_NAME): $(OBJ)
|
||||||
$(AR) rcs $(OUTPUT_DIR)$@ $(OBJ)
|
$(AR) rcs $(OUTPUT_DIR)$@ $(OBJ)
|
||||||
|
|
||||||
%.o: %.c $(HEADERS) $(HEADERS2)
|
%.o: %.c
|
||||||
$(CC) $(CFLAGS) -std=c17 -c $< -o $@
|
$(CC) $(CFLAGS) -std=c17 -c $< -o $@
|
||||||
|
|
||||||
%.o: %.cpp $(HEADERS) $(HEADERS2)
|
%.o: %.cpp
|
||||||
$(CC) $(CFLAGS) -std=c++20 -c $< -o $@
|
$(CC) $(CFLAGS) -std=c++20 -c $< -o $@
|
||||||
|
|
||||||
%.o: %.asm
|
%.o: %.asm
|
||||||
$(NASM) $< -f $(ASM_ARCH) -o $@
|
$(NASM) $< -f $(ASM_ARCH) -o $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
rm -f $(OBJ)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user