# HG changeset patch # User anatofuz # Date 1562838712 -32400 # Node ID b3a3224e18237612b41ac2f98f1dce28a91c9807 # Parent e5f099108a6ebe5441ce6edb33720042b2f859f8 fix link arguments... diff -r e5f099108a6e -r b3a3224e1823 src/CMakeLists.txt --- a/src/CMakeLists.txt Thu Jul 11 16:12:16 2019 +0900 +++ b/src/CMakeLists.txt Thu Jul 11 18:51:52 2019 +0900 @@ -1,6 +1,7 @@ cmake_minimum_required(VERSION 3.8) project(xv6cbc C ASM) add_subdirectory(tools) +add_subdirectory(usr) set(USE_CUDA,0) @@ -10,13 +11,11 @@ # -DCMAKE_BUILD_TYPE=Debug set(CMAKE_C_FLAGS_DEBUG "-O0") add_definitions(${PMAKE_ARGS}) -set(CMAKE_C_COMPILER "${CBC_COM}") #add_custom_command(OUTPUT tools # COMMAND "cd ${CMAKE_CURRENT_SOURCE_DIR}/tools && make run" #) # #WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tools -add_subdirectory(usr) if (${USE_CUDA}) @@ -32,8 +31,12 @@ endif() include_directories(".") +configure_file("${CMAKE_SOURCE_DIR}/kernel-cmake.ld" "${CMAKE_CURRENT_BINARY_DIR}/kernel-cmake.ld" COPYONLY) macro( GearsCommand ) + set(CMAKE_C_COMPILER "${CBC_COM}") + set(CMAKE_LINKER "${X_CMAKE_LINKER}") + set(CMAKE_C_LINK_EXECUTABLE "${X_CMAKE_C_LINK_EXECUTABLE}") set( _OPTIONS_ARGS ) set( _ONE_VALUE_ARGS TARGET ) set( _MULTI_VALUE_ARGS SOURCES ) @@ -64,6 +67,7 @@ endif() endforeach(i) + #target_link_libraries(syslib) add_custom_command ( OUTPUT c/${_Gears_TARGET}-context.c DEPENDS ${_Gears_CBC_SOURCES} @@ -78,8 +82,8 @@ TARGET kernel SOURCES - lib/string.c arm.c asm.S bio.c buddy.c console.cbc exec.c file.cbc fs.c log.c main.c memide.c pipe.cbc proc.cbc spinlock.cbc + string.c arm.c asm.S bio.c buddy.c console.cbc exec.c file.cbc fs.c log.c main.c memide.c pipe.cbc proc.cbc spinlock.cbc start.c swtch.S syscall.cbc sysfile.cbc sysproc.c trap_asm.S trap.c vm.c device/picirq.c device/timer.c device/uart.c - lib/string.c entry.S + entry.S ) diff -r e5f099108a6e -r b3a3224e1823 src/gearsTools/pmake.pl --- a/src/gearsTools/pmake.pl Thu Jul 11 16:12:16 2019 +0900 +++ b/src/gearsTools/pmake.pl Thu Jul 11 18:51:52 2019 +0900 @@ -23,15 +23,15 @@ chomp($libgcc = `$cc --print-libgcc-file-name`); $cflags .= " $libgcc"; $cmake .= 3; - $ldflags = " -L. -T kernel-cmake.ld $libgcc -b binary initcode fs.img"; + $ldflags = " -L. -T kernel-cmake.ld"; } $cflags =~ s/\n//g; create_link_script(); #cmake -DCMAKE_LINKER=/path/to/linker -DCMAKE_CXX_LINK_EXECUTABLE=" -o " -print_exec_system($cmake, "-DCBC_COM=$cc", "-DPMAKE_ARGS=\"$cflags\"","-DCMAKE_ASM_COMPILER=$cc","-DCMAKE_LINKER=$ld","-DCMAKE_C_LINK_EXECUTABLE=\"$ld $ldflags -o kernel.elf\"","-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE",'.'); +print_exec_system($cmake, "-DCBC_COM=$cc", "-DPMAKE_ARGS=\"$cflags\"","-DCMAKE_ASM_COMPILER=$cc","-DX_CMAKE_LINKER=$ld","-DX_CMAKE_C_LINK_EXECUTABLE=\"$ld $ldflags -o kernel.elf $libgcc -b binary initcode fs.img\"","-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE",'.'); system("make"); -system("sh","link.sh"); +#system("sh","link.sh"); sub create_link_script { my @link_script; diff -r e5f099108a6e -r b3a3224e1823 src/lib/string.c --- a/src/lib/string.c Thu Jul 11 16:12:16 2019 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,144 +0,0 @@ -#include "types.h" -#include "arm.h" - - -void* memset(void *dst, int v, int n) -{ - uint8 *p; - uint8 c; - uint32 val; - uint32 *p4; - - p = dst; - c = v & 0xff; - val = (c << 24) | (c << 16) | (c << 8) | c; - - // set bytes before whole uint32 - for (; (n > 0) && ((uint)p % 4); n--, p++){ - *p = c; - } - - // set memory 4 bytes a time - p4 = (uint*)p; - - for (; n >= 4; n -= 4, p4++) { - *p4 = val; - } - - // set leftover one byte a time - p = (uint8*)p4; - - for (; n > 0; n--, p++) { - *p = c; - } - - return dst; -} - - -int memcmp(const void *v1, const void *v2, uint n) -{ - const uchar *s1, *s2; - - s1 = v1; - s2 = v2; - - while(n-- > 0){ - if(*s1 != *s2) { - return *s1 - *s2; - } - - s1++, s2++; - } - - return 0; -} - -void* memmove(void *dst, const void *src, uint n) -{ - const char *s; - char *d; - - s = src; - d = dst; - - if(s < d && s + n > d){ - s += n; - d += n; - - while(n-- > 0) { - *--d = *--s; - } - - } else { - while(n-- > 0) { - *d++ = *s++; - } - } - - return dst; -} - -// memcpy exists to placate GCC. Use memmove. -void* memcpy(void *dst, const void *src, uint n) -{ - return memmove(dst, src, n); -} - -int strncmp(const char *p, const char *q, uint n) -{ - while(n > 0 && *p && *p == *q) { - n--, p++, q++; - } - - if(n == 0) { - return 0; - } - - return (uchar)*p - (uchar)*q; -} - -char* strncpy(char *s, const char *t, int n) -{ - char *os; - - os = s; - - while(n-- > 0 && (*s++ = *t++) != 0) - ; - - while(n-- > 0) { - *s++ = 0; - } - - return os; -} - -// Like strncpy but guaranteed to NUL-terminate. -char* safestrcpy(char *s, const char *t, int n) -{ - char *os; - - os = s; - - if(n <= 0) { - return os; - } - - while(--n > 0 && (*s++ = *t++) != 0) - ; - - *s = 0; - return os; -} - -int strlen(const char *s) -{ - int n; - - for(n = 0; s[n]; n++) - ; - - return n; -} - diff -r e5f099108a6e -r b3a3224e1823 src/string.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/string.c Thu Jul 11 18:51:52 2019 +0900 @@ -0,0 +1,144 @@ +#include "types.h" +#include "arm.h" + + +void* memset(void *dst, int v, int n) +{ + uint8 *p; + uint8 c; + uint32 val; + uint32 *p4; + + p = dst; + c = v & 0xff; + val = (c << 24) | (c << 16) | (c << 8) | c; + + // set bytes before whole uint32 + for (; (n > 0) && ((uint)p % 4); n--, p++){ + *p = c; + } + + // set memory 4 bytes a time + p4 = (uint*)p; + + for (; n >= 4; n -= 4, p4++) { + *p4 = val; + } + + // set leftover one byte a time + p = (uint8*)p4; + + for (; n > 0; n--, p++) { + *p = c; + } + + return dst; +} + + +int memcmp(const void *v1, const void *v2, uint n) +{ + const uchar *s1, *s2; + + s1 = v1; + s2 = v2; + + while(n-- > 0){ + if(*s1 != *s2) { + return *s1 - *s2; + } + + s1++, s2++; + } + + return 0; +} + +void* memmove(void *dst, const void *src, uint n) +{ + const char *s; + char *d; + + s = src; + d = dst; + + if(s < d && s + n > d){ + s += n; + d += n; + + while(n-- > 0) { + *--d = *--s; + } + + } else { + while(n-- > 0) { + *d++ = *s++; + } + } + + return dst; +} + +// memcpy exists to placate GCC. Use memmove. +void* memcpy(void *dst, const void *src, uint n) +{ + return memmove(dst, src, n); +} + +int strncmp(const char *p, const char *q, uint n) +{ + while(n > 0 && *p && *p == *q) { + n--, p++, q++; + } + + if(n == 0) { + return 0; + } + + return (uchar)*p - (uchar)*q; +} + +char* strncpy(char *s, const char *t, int n) +{ + char *os; + + os = s; + + while(n-- > 0 && (*s++ = *t++) != 0) + ; + + while(n-- > 0) { + *s++ = 0; + } + + return os; +} + +// Like strncpy but guaranteed to NUL-terminate. +char* safestrcpy(char *s, const char *t, int n) +{ + char *os; + + os = s; + + if(n <= 0) { + return os; + } + + while(--n > 0 && (*s++ = *t++) != 0) + ; + + *s = 0; + return os; +} + +int strlen(const char *s) +{ + int n; + + for(n = 0; s[n]; n++) + ; + + return n; +} + diff -r e5f099108a6e -r b3a3224e1823 src/usr/CMakeLists.txt --- a/src/usr/CMakeLists.txt Thu Jul 11 16:12:16 2019 +0900 +++ b/src/usr/CMakeLists.txt Thu Jul 11 18:51:52 2019 +0900 @@ -50,6 +50,7 @@ endmacro() add_library(ulib STATIC ulib.c usys.S printf.c umalloc.c) +#add_library(syslib string.c) set(USRCOMMANDS cat echo grep init kill ln ls mkdir rm sh stressfs usertests wc zombie hello)