diff --git a/AK/Assertions.h b/AK/Assertions.h index ca074781f1..a941d7a697 100644 --- a/AK/Assertions.h +++ b/AK/Assertions.h @@ -1,6 +1,6 @@ #pragma once -#ifdef SERENITY_KERNEL +#ifdef SERENITY #include "kassert.h" #else #include diff --git a/AK/StdLib.h b/AK/StdLib.h index ca7196432c..607682d784 100644 --- a/AK/StdLib.h +++ b/AK/StdLib.h @@ -1,6 +1,6 @@ #pragma once -#ifdef SERENITY_KERNEL +#ifdef SERENITY #include #else #include diff --git a/AK/Types.h b/AK/Types.h index e0aaf808c5..be4fc35031 100644 --- a/AK/Types.h +++ b/AK/Types.h @@ -1,6 +1,6 @@ #pragma once -#if defined(SERENITY_KERNEL) || defined(SERENITY_LIBC) +#if defined(SERENITY) typedef unsigned char byte; typedef unsigned short word; typedef unsigned int dword; diff --git a/AK/kmalloc.h b/AK/kmalloc.h index d90e6150e0..2c5c2bdb4f 100644 --- a/AK/kmalloc.h +++ b/AK/kmalloc.h @@ -1,6 +1,6 @@ #pragma once -#ifdef SERENITY_KERNEL +#ifdef SERENITY #include #else #include diff --git a/AK/kstdio.h b/AK/kstdio.h index 11a3b03bd6..00b0697712 100644 --- a/AK/kstdio.h +++ b/AK/kstdio.h @@ -1,6 +1,6 @@ #pragma once -#ifdef SERENITY_KERNEL +#ifdef SERENITY #include #else #include diff --git a/AK/ktime.h b/AK/ktime.h index f082def89e..326c4ecce4 100644 --- a/AK/ktime.h +++ b/AK/ktime.h @@ -1,6 +1,6 @@ #pragma once -#ifdef SERENITY_KERNEL +#ifdef SERENITY #include #else #include diff --git a/ELFLoader/ELFImage.cpp b/ELFLoader/ELFImage.cpp index adeab3ba4d..a4dbdc26c3 100644 --- a/ELFLoader/ELFImage.cpp +++ b/ELFLoader/ELFImage.cpp @@ -1,7 +1,7 @@ #include "ELFImage.h" #include -#ifdef SERENITY_KERNEL +#ifdef SERENITY ELFImage::ELFImage(ByteBuffer&& buffer) : m_buffer(buffer) { @@ -136,7 +136,7 @@ const char* ELFImage::tableString(unsigned offset) const const char* ELFImage::rawData(unsigned offset) const { -#ifdef SERENITY_KERNEL +#ifdef SERENITY return reinterpret_cast(m_buffer.pointer()) + offset; #else return reinterpret_cast(m_file.pointer()) + offset; diff --git a/ELFLoader/ELFImage.h b/ELFLoader/ELFImage.h index 78f1c28621..839fa20c0b 100644 --- a/ELFLoader/ELFImage.h +++ b/ELFLoader/ELFImage.h @@ -1,6 +1,6 @@ #pragma once -#ifndef SERENITY_KERNEL +#ifndef SERENITY #include #endif @@ -11,7 +11,7 @@ class ELFImage { public: -#ifdef SERENITY_KERNEL +#ifdef SERENITY explicit ELFImage(ByteBuffer&&); #else explicit ELFImage(MappedFile&&); @@ -131,7 +131,7 @@ private: const char* sectionHeaderTableString(unsigned offset) const; const char* sectionIndexToString(unsigned index); -#ifdef SERENITY_KERNEL +#ifdef SERENITY ByteBuffer m_buffer; #else MappedFile m_file; diff --git a/ELFLoader/ELFLoader.cpp b/ELFLoader/ELFLoader.cpp index bfbd4bbbee..40df901f37 100644 --- a/ELFLoader/ELFLoader.cpp +++ b/ELFLoader/ELFLoader.cpp @@ -1,7 +1,7 @@ #include "ELFLoader.h" #include -#ifdef SERENITY_KERNEL +#ifdef SERENITY ELFLoader::ELFLoader(ExecSpace& execSpace, ByteBuffer&& file) #else ELFLoader::ELFLoader(ExecSpace& execSpace, MappedFile&& file) diff --git a/ELFLoader/ELFLoader.h b/ELFLoader/ELFLoader.h index e7249ee8c7..f8f4877243 100644 --- a/ELFLoader/ELFLoader.h +++ b/ELFLoader/ELFLoader.h @@ -9,7 +9,7 @@ class ELFLoader { public: -#ifdef SERENITY_KERNEL +#ifdef SERENITY ELFLoader(ExecSpace&, ByteBuffer&&); #else ELFLoader(ExecSpace&, MappedFile&&); diff --git a/ELFLoader/ExecSpace.cpp b/ELFLoader/ExecSpace.cpp index 8fe97a76ce..fb6d55a0dd 100644 --- a/ELFLoader/ExecSpace.cpp +++ b/ELFLoader/ExecSpace.cpp @@ -12,7 +12,7 @@ ExecSpace::~ExecSpace() { } -#ifdef SERENITY_KERNEL +#ifdef SERENITY int puts(const char* str) { kprintf("%s\n", str); @@ -25,7 +25,7 @@ void ExecSpace::initializeBuiltins() m_symbols.set("puts", { (char*)puts, 0 }); } -#ifdef SERENITY_KERNEL +#ifdef SERENITY bool ExecSpace::loadELF(ByteBuffer&& file) #else bool ExecSpace::loadELF(MappedFile&& file) @@ -49,7 +49,7 @@ static void disassemble(const char* data, size_t length) if (!length) return; -#ifdef SERENITY_KERNEL +#ifdef SERENITY for (unsigned i = 0; i < length; ++i) { kprintf("%b ", (unsigned char)data[i]); } diff --git a/ELFLoader/ExecSpace.h b/ELFLoader/ExecSpace.h index 2b175d473a..1e22468af4 100644 --- a/ELFLoader/ExecSpace.h +++ b/ELFLoader/ExecSpace.h @@ -37,7 +37,7 @@ public: ExecSpace(); ~ExecSpace(); -#ifdef SERENITY_KERNEL +#ifdef SERENITY bool loadELF(ByteBuffer&&); #else bool loadELF(MappedFile&&); diff --git a/Kernel/Makefile b/Kernel/Makefile index 1abe88803d..6cedc78961 100644 --- a/Kernel/Makefile +++ b/Kernel/Makefile @@ -61,7 +61,7 @@ FLAVOR_FLAGS = -fomit-frame-pointer -mregparm=3 -march=i386 -m32 -fno-exceptions OPTIMIZATION_FLAGS = -Os -fno-asynchronous-unwind-tables INCLUDE_FLAGS = -I.. -I. -DEFINES = -DSERENITY_KERNEL -DSANITIZE_PTRS +DEFINES = -DSERENITY -DSANITIZE_PTRS CXXFLAGS = $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(KERNEL_FLAGS) $(FLAVOR_FLAGS) $(ARCH_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES) #CXX = /usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-g++ diff --git a/LibC/.gitignore b/LibC/.gitignore new file mode 100644 index 0000000000..1f6ba4783d --- /dev/null +++ b/LibC/.gitignore @@ -0,0 +1,2 @@ +*.o +LibC.a diff --git a/LibC/Makefile b/LibC/Makefile index 3bf0931624..592a212efe 100644 --- a/LibC/Makefile +++ b/LibC/Makefile @@ -1,6 +1,7 @@ OBJS = \ stdio.o \ - unistd.o + unistd.o \ + entry.o LIBRARY = LibC.a ARCH_FLAGS = @@ -11,7 +12,7 @@ FLAVOR_FLAGS = -fomit-frame-pointer -mregparm=3 -march=i386 -m32 -fno-exceptions OPTIMIZATION_FLAGS = -Os -fno-asynchronous-unwind-tables INCLUDE_FLAGS = -I.. -I. -DEFINES = -DSERENITY_LIBC -DSANITIZE_PTRS +DEFINES = -DSERENITY -DSANITIZE_PTRS CXXFLAGS = $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(LIBC_FLAGS) $(FLAVOR_FLAGS) $(ARCH_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES) CXX = g++ diff --git a/LibC/entry.cpp b/LibC/entry.cpp new file mode 100644 index 0000000000..37bb9942ae --- /dev/null +++ b/LibC/entry.cpp @@ -0,0 +1,12 @@ +#include + +extern "C" int main(int, char**); + +extern "C" int elf_entry() +{ + // FIXME: Pass appropriate argc/argv. + main(0, nullptr); + + // Birger's birthday <3 + return 20150614; +} diff --git a/Userland/Makefile b/Userland/Makefile new file mode 100644 index 0000000000..9472b1d436 --- /dev/null +++ b/Userland/Makefile @@ -0,0 +1,27 @@ +OBJS = \ + id.o + +ARCH_FLAGS = +STANDARD_FLAGS = -std=c++17 -nostdinc++ -nostdlib +USERLAND_FLAGS = -ffreestanding -fno-stack-protector -fno-ident +WARNING_FLAGS = -Wextra -Wall -Wundef -Wcast-qual -Wwrite-strings +FLAVOR_FLAGS = -fomit-frame-pointer -mregparm=3 -march=i386 -m32 -fno-exceptions -fno-rtti -ffunction-sections -fdata-sections -fmerge-all-constants -fno-unroll-loops -falign-functions=1 -falign-jumps=1 -falign-loops=1 -fno-pie -fno-pic +OPTIMIZATION_FLAGS = -Os -fno-asynchronous-unwind-tables +INCLUDE_FLAGS = -I.. -I. + +DEFINES = -DSERENITY -DSANITIZE_PTRS + +CXXFLAGS = $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(USERLAND_FLAGS) $(FLAVOR_FLAGS) $(ARCH_FLAGS) $(STANDARD_FLAGS) $(INCLUDE_FLAGS) $(DEFINES) +CXX = g++ +LD = ld +AR = ar +LDFLAGS = -T linker.ld --strip-debug -melf_i386 --gc-sections --build-id=none -z norelro -z now + +all: $(OBJS) + +.cpp.o: + @echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $< + +clean: + @echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) + diff --git a/Userland/id.cpp b/Userland/id.cpp new file mode 100644 index 0000000000..fd76e81427 --- /dev/null +++ b/Userland/id.cpp @@ -0,0 +1,12 @@ +#include +#include + +int main(int c, char** v) +{ + uid_t uid = getuid(); + gid_t gid = getgid(); + pid_t pid = getpid(); + printf("uid=%u, gid=%u, pid=%u\n", uid, gid, pid); + return 0; +} + diff --git a/VirtualFileSystem/DiskDevice.h b/VirtualFileSystem/DiskDevice.h index 5a36695620..05e599ff17 100644 --- a/VirtualFileSystem/DiskDevice.h +++ b/VirtualFileSystem/DiskDevice.h @@ -3,7 +3,7 @@ #include #include -#ifdef SERENITY_KERNEL +#ifdef SERENITY // FIXME: Support 64-bit DiskOffset typedef dword DiskOffset; #else diff --git a/VirtualFileSystem/FileHandle.cpp b/VirtualFileSystem/FileHandle.cpp index e0c6bda02f..ed32499059 100644 --- a/VirtualFileSystem/FileHandle.cpp +++ b/VirtualFileSystem/FileHandle.cpp @@ -13,7 +13,7 @@ FileHandle::~FileHandle() { } -#ifndef SERENITY_KERNEL +#ifndef SERENITY bool additionWouldOverflow(Unix::off_t a, Unix::off_t b) { ASSERT(a > 0); @@ -69,7 +69,7 @@ Unix::off_t FileHandle::seek(Unix::off_t offset, int whence) break; case SEEK_CUR: newOffset = m_currentOffset + offset; -#ifndef SERENITY_KERNEL +#ifndef SERENITY if (additionWouldOverflow(m_currentOffset, offset)) return -EOVERFLOW; #endif diff --git a/VirtualFileSystem/FileHandle.h b/VirtualFileSystem/FileHandle.h index 42ee234aef..16956eb87c 100644 --- a/VirtualFileSystem/FileHandle.h +++ b/VirtualFileSystem/FileHandle.h @@ -14,7 +14,7 @@ public: ByteBuffer readEntireFile(); -#ifdef SERENITY_KERNEL +#ifdef SERENITY int fd() const { return m_fd; } void setFD(int fd) { m_fd = fd; } #endif @@ -26,7 +26,7 @@ private: Unix::off_t m_currentOffset { 0 }; -#ifdef SERENITY_KERNEL +#ifdef SERENITY int m_fd { -1 }; #endif }; diff --git a/VirtualFileSystem/Limits.h b/VirtualFileSystem/Limits.h index b004b3ba9e..efb058684a 100644 --- a/VirtualFileSystem/Limits.h +++ b/VirtualFileSystem/Limits.h @@ -2,7 +2,7 @@ #include "UnixTypes.h" -#ifdef SERENITY_KERNEL +#ifdef SERENITY inline static const Unix::off_t maxFileOffset = 2147483647; #else #include diff --git a/VirtualFileSystem/UnixTypes.h b/VirtualFileSystem/UnixTypes.h index 7b817cb6be..eeed7bb94b 100644 --- a/VirtualFileSystem/UnixTypes.h +++ b/VirtualFileSystem/UnixTypes.h @@ -15,7 +15,7 @@ typedef dword nlink_t; typedef dword uid_t; typedef dword gid_t; -#ifdef SERENITY_KERNEL +#ifdef SERENITY // FIXME: Support 64-bit offsets! typedef signed_dword off_t; typedef unsigned int time_t;