浏览代码

fix temporary user_space_program/init

greatbridf 9 月之前
父节点
当前提交
62e0eaff42
共有 4 个文件被更改,包括 40 次插入6 次删除
  1. 34 1
      gblibc/CMakeLists.txt
  2. 1 1
      gblibc/src/fcntl.c
  3. 1 1
      init_script.sh
  4. 4 3
      user-space-program/CMakeLists.txt

+ 34 - 1
gblibc/CMakeLists.txt

@@ -21,10 +21,36 @@ add_library(gblibc STATIC
     src/platform-independent.s
 )
 
-add_library(crt0 OBJECT
+add_library(gblibc_32 STATIC
+    src/stdio.c
+    src/arithmetic.c
+    src/string.c
+    src/fcntl.c
+    src/unistd.c
+    src/wait.c
+    src/assert.c
+    src/dirent.c
+    src/ctype.c
+    src/stdlib.c
+    src/errno.c
+    src/init.c
+    src/internal.c
+    src/stat.c
+    src/time.c
+    src/signal.c
+    src/platform-independent.s
+)
+
+add_library(crt0_32 OBJECT
     src/crt0.s
 )
 
+target_compile_options(gblibc_32 PRIVATE "-m32")
+target_compile_options(gblibc_32 PRIVATE "-mcmodel=32")
+target_compile_options(crt0_32 PRIVATE "-m32")
+target_link_options(gblibc_32 PRIVATE "LINKER:-melf_i386")
+target_link_options(crt0_32 PRIVATE "LINKER:-melf_i386")
+
 file(GLOB_RECURSE GBLIBC_PUBLIC_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include)
 
 target_include_directories(gblibc PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
@@ -33,3 +59,10 @@ target_include_directories(gblibc PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
 set_target_properties(gblibc PROPERTIES PRIVATE_HEADER
     "private-include/devutil.h,private-include/syscall.h")
 set_target_properties(gblibc PROPERTIES PUBLIC_HEADER "${GBLIBC_PUBLIC_HEADERS}")
+
+target_include_directories(gblibc_32 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
+                                  PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/private-include)
+
+set_target_properties(gblibc_32 PROPERTIES PRIVATE_HEADER
+    "private-include/devutil.h,private-include/syscall.h")
+set_target_properties(gblibc_32 PROPERTIES PUBLIC_HEADER "${GBLIBC_PUBLIC_HEADERS}")

+ 1 - 1
gblibc/src/fcntl.c

@@ -12,7 +12,7 @@ int open(const char* filename, int flags, ...)
         va_list vl;
         va_start(vl, flags);
 
-        ret = syscall3(SYS_open, (uint32_t)filename, flags, va_arg(vl, mode_t));
+        ret = syscall3(SYS_open, (uint32_t)filename, flags, va_arg(vl, int));
 
         va_end(vl);
     }

+ 1 - 1
init_script.sh

@@ -40,5 +40,5 @@ alias ll="ls -l "
 alias la="ls -la "
 EOF
 
-exec /bin/sh -l \
+exec /mnt/init /bin/sh -l \
     < /dev/console > /dev/console 2> /dev/console

+ 4 - 3
user-space-program/CMakeLists.txt

@@ -1,10 +1,11 @@
 cmake_minimum_required(VERSION 3.15)
 project(user_space_program C ASM)
 
-set(CMAKE_C_FLAGS "-nostdlib -nostdinc -static -W -Wall -mstack-protector-guard=global")
-set(CMAKE_ASM_FLAGS "-nostdlib -static -mstack-protector-guard=global")
+set(CMAKE_C_FLAGS "-nostdlib -nostdinc -m32 -static -W -Wall -mstack-protector-guard=global")
+set(CMAKE_ASM_FLAGS "-nostdlib -static -m32 -mstack-protector-guard=global")
 
-link_libraries(gblibc crt0)
+link_libraries(gblibc_32 crt0_32)
+add_link_options("LINKER:-melf_i386")
 
 set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "")
 set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "")