Moved stdlib to a seperate folder and added some more headers that are required for compiling libgcc (no implementation yet).

This commit is contained in:
Patrick 2024-02-02 00:01:48 +01:00
parent 00f4e0de3a
commit 712b95c9d7
22 changed files with 154 additions and 42 deletions

View File

@ -4,15 +4,11 @@ any_target_sources = Split('''
src/app/main.cpp
src/libs/psf.cpp
src/cstdlib/assert.cpp
src/cstdlib/stdio.cpp
src/cstdlib/stdlib.cpp
src/cstdlib/string.cpp
''')
env.Append(KERNEL_SOURCES = [env.File(f) for f in any_target_sources])
env = SConscript('kernel/SConscript', exports = 'env')
env = SConscript('stdlib/SConscript', exports = 'env')
Return('env')

View File

@ -0,0 +1,11 @@
#pragma once
#include <stdint.h>
extern "C"
{
extern const uint8_t LAT9_08[];
extern const unsigned LAT9_08_SIZE;
}

View File

@ -1,35 +0,0 @@
#pragma once
#if !defined(BAD_APPLE_OS_STDIO_H_INCLUDED)
#define BAD_APPLE_OS_STDIO_H_INCLUDED
#include <stdarg.h>
#include <stddef.h>
#include "./detail/common.h"
#define stdin __stdin
BA_EXTERN_C_BEGIN
typedef struct __file FILE;
extern FILE* __stdin;
static int EOF = -1;
int putchar(int chr) BA_CXX_NOEXCEPT;
int puts(const char* str) BA_CXX_NOEXCEPT;
int printf(const char* format, ...) BA_CXX_NOEXCEPT __attribute__((format(printf, 1, 2)));
int vprintf(const char* format, va_list vlist) BA_CXX_NOEXCEPT;
int snprintf(char* buffer, size_t bufferSize, const char* format, ...) BA_CXX_NOEXCEPT __attribute__((format(printf, 3, 4)));
int vsnprintf(char* buffer, size_t bufferSize, const char* format, va_list vlist) BA_CXX_NOEXCEPT;
int fgetc(FILE* stream) BA_CXX_NOEXCEPT;
char* fgets(char* buffer, int count, FILE* stream) BA_CXX_NOEXCEPT;
inline int getc(FILE* stream) BA_CXX_NOEXCEPT { return fgetc(stream); }
inline int getchar() BA_CXX_NOEXCEPT { return fgetc(stdin); }
BA_EXTERN_C_END
#endif // !defined(BAD_APPLE_OS_STDIO_H_INCLUDED)

View File

@ -0,0 +1,13 @@
.section .rodata
.global LAT9_08
.type LAT9_08 @object
.section .rodata
.global LAT9_08_SIZE
.type LAT9_08_SIZE @object
LAT9_08:
.incbin "/home/mewin/Documents/projects/C++/bad_apple_os/targets/_any/src/os/resources/lat9-08.psf"
LAT9_08_END:
LAT9_08_SIZE:
.int LAT9_08_END - LAT9_08

View File

@ -0,0 +1,13 @@
Import('env')
stdlib_sources = Split('''
src/assert.cpp
src/stdio.cpp
src/stdlib.cpp
src/string.cpp
''')
env.Append(KERNEL_SOURCES = [env.File(f) for f in stdlib_sources])
Return('env')

View File

@ -10,12 +10,14 @@
#define BA_CXX_NOEXCEPT noexcept
#define BA_EXTERN_C_BEGIN extern "C" {
#define BA_EXTERN_C_END }
#define BA_C_RESTRICT
#else
#define BA_CXX_NODISCARD
#define BA_CXX_NORETURN
#define BA_CXX_NOEXCEPT
#define BA_EXTERN_C_BEGIN
#define BA_EXTERN_C_END
#define BA_C_RESTRICT restrict
#endif
#endif // !defined(BAD_APPLE_OS_DETAIL_ATTRIBUTES_H_INCLUDED)

View File

@ -0,0 +1,7 @@
#pragma once
#if !defined(BAD_APPLE_OS_ERRNO_H_INCLUDED)
#define BAD_APPLE_OS_ERRNO_H_INCLUDED
#endif // !defined(BAD_APPLE_OS_ERRNO_H_INCLUDED)

View File

@ -0,0 +1,9 @@
#pragma once
#if !defined(BAD_APPLE_OS_STDINT_H_INCLUDED)
#define BAD_APPLE_OS_STDINT_H_INCLUDED
#include "stdint-gcc.h" // TODO?
#endif // !defined(BAD_APPLE_OS_STDINT_H_INCLUDED)

View File

@ -0,0 +1,47 @@
#pragma once
#if !defined(BAD_APPLE_OS_STDIO_H_INCLUDED)
#define BAD_APPLE_OS_STDIO_H_INCLUDED
#include <stdarg.h>
#include <stddef.h>
#include "./detail/common.h"
#define stdin __stdin
BA_EXTERN_C_BEGIN
typedef struct __file FILE;
extern FILE* __stdin;
static int EOF = -1;
int putchar(int chr) BA_CXX_NOEXCEPT;
int puts(const char* str) BA_CXX_NOEXCEPT;
int printf(const char* BA_C_RESTRICT format, ...) BA_CXX_NOEXCEPT __attribute__((format(printf, 1, 2)));
int vprintf(const char* BA_C_RESTRICT format, va_list vlist) BA_CXX_NOEXCEPT;
int sprintf(char* BA_C_RESTRICT buffer, const char* BA_C_RESTRICT format, ...) BA_CXX_NOEXCEPT;
int snprintf(char* BA_C_RESTRICT buffer, size_t bufferSize, const char* BA_C_RESTRICT format, ...) BA_CXX_NOEXCEPT __attribute__((format(printf, 3, 4)));
int vsnprintf(char* BA_C_RESTRICT buffer, size_t bufferSize, const char* BA_C_RESTRICT format, va_list vlist) BA_CXX_NOEXCEPT;
int fclose(FILE* stream) BA_CXX_NOEXCEPT;
int fflush(FILE* stream) BA_CXX_NOEXCEPT;
int fgetc(FILE* stream) BA_CXX_NOEXCEPT;
FILE* fopen(const char* BA_C_RESTRICT filename, const char* BA_C_RESTRICT mode) BA_CXX_NOEXCEPT;
char* fgets(char* buffer, int count, FILE* stream) BA_CXX_NOEXCEPT;
int fprintf(FILE* BA_C_RESTRICT stream, const char* BA_C_RESTRICT format, ...) BA_CXX_NOEXCEPT __attribute__((format(printf, 2, 3)));
size_t fread(void* BA_C_RESTRICT buffer, size_t size, size_t count, FILE* BA_C_RESTRICT stream) BA_CXX_NOEXCEPT;
int fseek(FILE* stream, long offset, int origin) BA_CXX_NOEXCEPT;
long ftell(FILE* stream) BA_CXX_NOEXCEPT;
size_t fwrite(const void* BA_C_RESTRICT buffer, size_t size, size_t count, FILE* BA_C_RESTRICT stream) BA_CXX_NOEXCEPT;
void setbuf(FILE* BA_C_RESTRICT stream, char* BA_C_RESTRICT buffer) BA_CXX_NOEXCEPT;
int vfprintf(FILE* BA_C_RESTRICT stream, const char* BA_C_RESTRICT format, va_list vlist) BA_CXX_NOEXCEPT;
inline int getc(FILE* stream) BA_CXX_NOEXCEPT { return fgetc(stream); }
inline int getchar() BA_CXX_NOEXCEPT { return fgetc(stdin); }
BA_EXTERN_C_END
#endif // !defined(BAD_APPLE_OS_STDIO_H_INCLUDED)

View File

@ -10,6 +10,13 @@
BA_EXTERN_C_BEGIN
BA_CXX_NORETURN void abort();
int atexit(void (*func)()) BA_CXX_NOEXCEPT;
BA_CXX_NODISCARD char* getenv(const char* name) BA_CXX_NOEXCEPT;
BA_CXX_NODISCARD int abs(int n) BA_CXX_NOEXCEPT;
BA_CXX_NODISCARD int atoi(const char* str) BA_CXX_NOEXCEPT;
BA_CXX_NODISCARD void* calloc(size_t num, size_t size) BA_CXX_NOEXCEPT;
BA_CXX_NODISCARD void* malloc(size_t size) BA_CXX_NOEXCEPT;
void free(void* ptr) BA_CXX_NOEXCEPT;

View File

@ -14,6 +14,10 @@ BA_CXX_NODISCARD int memcmp(const void* lhs, const void* rhs, size_t count) BA_C
void* memcpy(void* dest, const void* src, size_t count) BA_CXX_NOEXCEPT;
void* memmove(void* dest, const void* src, size_t count) BA_CXX_NOEXCEPT;
void* memset(void* dest, int value, size_t count) BA_CXX_NOEXCEPT;
BA_CXX_NODISCARD char* strcat(char* BA_C_RESTRICT dest, const char* BA_C_RESTRICT src) BA_CXX_NOEXCEPT;
BA_CXX_NODISCARD char* strchr(const char* str, int ch) BA_CXX_NOEXCEPT;
BA_CXX_NODISCARD char* strcpy(char* BA_C_RESTRICT dest, const char* BA_C_RESTRICT src) BA_CXX_NOEXCEPT;
BA_CXX_NODISCARD size_t strlen(const char* str) BA_CXX_NOEXCEPT;
BA_EXTERN_C_END

View File

@ -0,0 +1,9 @@
#pragma once
#if !defined(BAD_APPLE_OS_SYS_TYPES_H_INCLUDED)
#define BAD_APPLE_OS_SYS_TYPES_H_INCLUDED
typedef int pid_t;
#endif // !defined(BAD_APPLE_OS_SYS_TYPES_H_INCLUDED)

View File

@ -0,0 +1,7 @@
#pragma once
#if !defined(BAD_APPLE_OS_TIME_H_INCLUDED)
#define BAD_APPLE_OS_TIME_H_INCLUDED
#endif // !defined(BAD_APPLE_OS_TIME_H_INCLUDED)

View File

@ -0,0 +1,22 @@
#pragma once
#if !defined(BAD_APPLE_OS_UNISTD_H_INCLUDED)
#define BAD_APPLE_OS_UNISTD_H_INCLUDED
#include <stdint.h>
#include <sys/types.h>
#include "./detail/common.h"
BA_EXTERN_C_BEGIN
pid_t fork() BA_CXX_NOEXCEPT;
int execv(const char* pathname, char* const argv[]) BA_CXX_NOEXCEPT;
int execve(const char* pathname, char* const argv[], char* const envp[]) BA_CXX_NOEXCEPT;
int execvp(const char* file, char* const argv[]) BA_CXX_NOEXCEPT;
pid_t getpid() BA_CXX_NOEXCEPT;
BA_EXTERN_C_END
#endif // !defined(BAD_APPLE_OS_UNISTD_H_INCLUDED)

View File

@ -11,7 +11,7 @@ kernel_env.Append(CFLAGS = ['-ffreestanding'])
kernel_env.Append(CPPDEFINES = ['__baos_kernel_source__=1'])
kernel_env.Append(CXXFLAGS = ['-ffreestanding', '-fno-exceptions', '-fno-rtti', '-std=c++20'])
kernel_env.Append(LINKFLAGS = ['-T', kernel_env.File('linker.ld').abspath, '-ffreestanding', '-nostdlib', '-mcmodel=large', '-mno-red-zone', '-mno-mmx', '-mno-sse', '-mno-sse2'])
kernel_env.Append(CPPPATH = ['#targets/_any/include', '#bastl/include', 'include', '/usr/include/efi', '#targets/_any/kernel/include'])
kernel_env.Append(CPPPATH = ['#targets/_any/include', '#bastl/include', 'include', '/usr/include/efi', '#targets/_any/kernel/include', '#targets/_any/stdlib/include'])
def get_crt_object(name: str) -> str:
import subprocess

View File

@ -213,7 +213,7 @@ void kernel_main()
for (const MemoryRange& range : ranges)
{
// std::printf("Start: 0x%lX, Pages: %ld, Type: %s\n", range.pageBase << 12, range.numPages, memoryTypeName(range.type));
std::printf("Start: 0x%lX, Pages: %ld, Type: %s\n", range.pageBase << 12, range.numPages, memoryTypeName(range.type));
}
if (!picsInited)