diff --git a/.travis.yml b/.travis.yml index 41499d31b..d00ebb6a1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,9 @@ env: global: - PATH=$PATH:~/.cargo/bin language: c -compiler: gcc +compiler: + - clang + - gcc before_install: - echo "deb https://dl.bintray.com/rwth-os/hermitcore vivid main" | sudo tee -a /etc/apt/sources.list - travis_retry sudo apt-get -qq update @@ -27,7 +29,9 @@ notifications: slack: hermitcore:UtcfeEXkbpx3WyIDK2Wm2beS deploy: - on: master + on: + branch: master + condition: "$CC = gcc" provider: bintray file: .bintray_descriptor.json user: diff --git a/arch/x86/loader/CMakeLists.txt b/arch/x86/loader/CMakeLists.txt index b9ea11d7e..99bc4081a 100644 --- a/arch/x86/loader/CMakeLists.txt +++ b/arch/x86/loader/CMakeLists.txt @@ -17,14 +17,33 @@ target_include_directories(arch_x86_loader target_compile_options(arch_x86_loader PRIVATE -O2 -Wall -m64 -std=gnu99 -ffreestanding -mno-red-zone - -fstrength-reduce -fomit-frame-pointer -finline-functions) + -fomit-frame-pointer -fno-builtin -nostdlib -nostdinc -mno-sse -mno-avx -mno-mmx -mno-3dnow) -target_link_libraries(arch_x86_loader - arch_x86_loader_asm - "-T ${CMAKE_CURRENT_LIST_DIR}/link.ld" - "-z max-page-size=4096" - -Wl,--build-id=none # required because CMake links with gcc, not ld - -nostdlib -static) +include(CheckCCompilerFlag) +check_c_compiler_flag(-fstrength-reduce HAS_STRENGTH_REDUCE) +if (HAS_STRENGTH_REDUCE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstrength-reduce") +endif() + +check_c_compiler_flag(-finline-functions HAS_INLINE_FUNCTIONS) +if (HAS_INLINE_FUNCTIONS) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -finline-functions") +endif() + +set(CMAKE_LINKER_NAME ld CACHE STRING "Name of the binutils linker") +mark_as_advanced(CMAKE_LINKER_NAME) + +find_program(CMAKE_LINKER ${CMAKE_LINKER_NAME}) +mark_as_advanced(CMAKE_LINKER) + +if(NOT CMAKE_LINKER) + message(FATAL_ERROR "Could not find the GNU LD linker: ${CMAKE_LINKER_NAME}") +endif() + +set(CMAKE_C_LINK_EXECUTABLE "${CMAKE_LINKER} -o ") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -T ${CMAKE_CURRENT_LIST_DIR}/link.ld -z max-page-size=4096 --build-id=none -nostdlib -static") + +target_link_libraries(arch_x86_loader arch_x86_loader_asm) # tools/proxy looks for `ldhermit.elf` set_target_properties(arch_x86_loader PROPERTIES diff --git a/arch/x86/loader/include/ctype.h b/arch/x86/loader/include/ctype.h index c5aa3915b..597c6d286 100644 --- a/arch/x86/loader/include/ctype.h +++ b/arch/x86/loader/include/ctype.h @@ -25,7 +25,7 @@ */ #ifndef __CTYPE_H_ -#define __CYTPE_H_ +#define __CTYPE_H_ /** Returns true if the value of 'c' is an ASCII-charater */ static inline int isascii(int c) diff --git a/arch/x86/loader/page.c b/arch/x86/loader/page.c index 0cab29437..80c4cdedd 100644 --- a/arch/x86/loader/page.c +++ b/arch/x86/loader/page.c @@ -56,12 +56,6 @@ static size_t * const self[PAGE_LEVELS] = { (size_t *) 0xFFC00000, (size_t *) 0xFFFFF000 }; - -/** An other self-reference for page_map_copy() */ -static size_t * const other[PAGE_LEVELS] = { - (size_t *) 0xFF800000, - (size_t *) 0xFFFFE000 -}; #elif defined(CONFIG_X86_64) /** A self-reference enables direct access to all page tables */ static size_t* const self[PAGE_LEVELS] = { @@ -70,14 +64,6 @@ static size_t* const self[PAGE_LEVELS] = { (size_t *) 0xFFFFFFFFFFE00000, (size_t *) 0xFFFFFFFFFFFFF000 }; - -/** An other self-reference for page_map_copy() */ -static size_t * const other[PAGE_LEVELS] = { - (size_t *) 0xFFFFFF0000000000, - (size_t *) 0xFFFFFFFF80000000, - (size_t *) 0xFFFFFFFFFFC00000, - (size_t *) 0xFFFFFFFFFFFFE000 -}; #endif /** @brief Flush a specific page entry in TLB diff --git a/arch/x86/loader/uart.c b/arch/x86/loader/uart.c index 5d0599843..2437fd2ff 100644 --- a/arch/x86/loader/uart.c +++ b/arch/x86/loader/uart.c @@ -96,7 +96,7 @@ size_t uartport = 0; static inline unsigned char read_from_uart(uint32_t off) { - uint8_t c; + uint8_t c = 0; if (uartport) c = inportb(uartport + off); diff --git a/tools/uhyve.c b/tools/uhyve.c index da84a3276..64298e1bf 100644 --- a/tools/uhyve.c +++ b/tools/uhyve.c @@ -591,7 +591,7 @@ static void show_registers(int id, struct kvm_regs* regs, struct kvm_sregs* sreg fprintf(stderr, "\n"); } -static int print_registers(void) +static void print_registers(void) { struct kvm_regs regs; struct kvm_sregs sregs;