From 623e0be0e15e1b10f9ff451431a59ef9e09d087c Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Tue, 25 Apr 2017 15:35:37 +0200 Subject: [PATCH] fiasco: fix compilation with GCC 6 Issue #2372 --- repos/base-fiasco/lib/mk/kernel-fiasco.inc | 4 +- repos/base-fiasco/lib/mk/l4_pkg.inc | 3 +- repos/base-fiasco/patches/gcc6.patch | 242 +++++++++++++++++++++ repos/base-fiasco/ports/fiasco.hash | 2 +- 4 files changed, 248 insertions(+), 3 deletions(-) create mode 100644 repos/base-fiasco/patches/gcc6.patch diff --git a/repos/base-fiasco/lib/mk/kernel-fiasco.inc b/repos/base-fiasco/lib/mk/kernel-fiasco.inc index 4c8f43e237..7638a79718 100644 --- a/repos/base-fiasco/lib/mk/kernel-fiasco.inc +++ b/repos/base-fiasco/lib/mk/kernel-fiasco.inc @@ -20,7 +20,9 @@ $(FIASCO_BUILD_DIR): $(FIASCO): $(FIASCO_BUILD_DIR) $(VERBOSE_MK) set -o pipefail; \ - MAKEFLAGS= $(MAKE) SYSTEM_TARGET="$(CROSS_DEV_PREFIX)" \ + MAKEFLAGS= CFLAGS="-std=gnu89" \ + CXXFLAGS="-std=gnu++98 -fno-delete-null-pointer-checks" \ + $(MAKE) SYSTEM_TARGET="$(CROSS_DEV_PREFIX)" \ $(VERBOSE_DIR) -C $(FIASCO_BUILD_DIR) \ $(KERNEL_BUILD_OUTPUT_FILTER) diff --git a/repos/base-fiasco/lib/mk/l4_pkg.inc b/repos/base-fiasco/lib/mk/l4_pkg.inc index 1033a46edd..5f11b5459b 100644 --- a/repos/base-fiasco/lib/mk/l4_pkg.inc +++ b/repos/base-fiasco/lib/mk/l4_pkg.inc @@ -55,7 +55,8 @@ endif %.tag: $(VERBOSE_MK) set -o pipefail; \ MAKEFLAGS= CPPFLAGS="$(CC_MARCH)" \ - CFLAGS="$(CC_MARCH)" CXXFLAGS="$(CC_MARCH) -D_GNU_SOURCE" \ + CFLAGS="$(CC_MARCH) -std=gnu89" \ + CXXFLAGS="$(CC_MARCH) -D_GNU_SOURCE -std=gnu++98" \ ASFLAGS="$(CC_MARCH)" LDFLAGS="$(LD_MARCH)" \ $(MAKE) $(VERBOSE_DIR) O=$(L4_BUILD_DIR) $(L4_VERBOSE) \ -C $(L4_PKG_DIR)/$* \ diff --git a/repos/base-fiasco/patches/gcc6.patch b/repos/base-fiasco/patches/gcc6.patch new file mode 100644 index 0000000000..a14fe1f272 --- /dev/null +++ b/repos/base-fiasco/patches/gcc6.patch @@ -0,0 +1,242 @@ +gcc6.patch + +From: Christian Prochaska + + +--- + fiasco/snapshot/kernel/fiasco/src/Makeconf | 4 +- + .../snapshot/kernel/fiasco/src/kern/shared/gdt.cpp | 10 +++-- + .../kernel/fiasco/src/kern/shared/kdb_ke.cpp | 9 ++-- + fiasco/snapshot/l4/pkg/crtx/lib/src/construction.c | 44 ++++++++++---------- + .../snapshot/l4/pkg/cxx/lib/start/src/cxx_main.cc | 6 +-- + 5 files changed, 38 insertions(+), 35 deletions(-) + +diff --git fiasco/snapshot/kernel/fiasco/src/Makeconf fiasco/snapshot/kernel/fiasco/src/Makeconf +index 07401e1..daee531 100644 +--- fiasco/snapshot/kernel/fiasco/src/Makeconf ++++ fiasco/snapshot/kernel/fiasco/src/Makeconf +@@ -28,8 +28,8 @@ ECHO := echo + ECHO_E := bash --norc -c 'echo -e "$$0" "$$@"' + CP := cp + AWKP ?= gawk --posix +-CFLAGS := +-CXXFLAGS := ++CFLAGS := $(CFLAGS) ++CXXFLAGS := $(CXXFLAGS) + OPT_CFLAGS := -O2 + OPT_CXXFLAGS := -O2 + NOOPT_CFLAGS := -Os +diff --git fiasco/snapshot/kernel/fiasco/src/kern/shared/gdt.cpp fiasco/snapshot/kernel/fiasco/src/kern/shared/gdt.cpp +index 2113170..d0eafd0 100644 +--- fiasco/snapshot/kernel/fiasco/src/kern/shared/gdt.cpp ++++ fiasco/snapshot/kernel/fiasco/src/kern/shared/gdt.cpp +@@ -43,9 +43,6 @@ public: + Selector_user = 0x03, + Selector_kernel = 0x00, + }; +- +-private: +- Gdt_entry _entries[]; + }; + + +@@ -130,6 +127,7 @@ void + Gdt::set_entry_byte(int nr, Address base, Unsigned32 limit, + Unsigned8 access, Unsigned8 szbits) + { ++ Gdt_entry *_entries = reinterpret_cast(this); + _entries[nr] = Gdt_entry(base, limit, access, szbits); + } + +@@ -138,6 +136,7 @@ void + Gdt::set_entry_4k(int nr, Address base, Unsigned32 limit, + Unsigned8 access, Unsigned8 szbits) + { ++ Gdt_entry *_entries = reinterpret_cast(this); + _entries[nr] = Gdt_entry(base, limit >> 12, access, szbits | 0x08); + } + +@@ -145,6 +144,7 @@ PUBLIC inline + void + Gdt::set_raw(int nr, Unsigned32 low, Unsigned32 high) + { ++ Gdt_entry *_entries = reinterpret_cast(this); + _entries[nr].set_raw(low, high); + } + +@@ -152,6 +152,7 @@ PUBLIC inline + void + Gdt::set_raw(int nr, Unsigned64 val) + { ++ Gdt_entry *_entries = reinterpret_cast(this); + _entries[nr].set_raw(val); + } + +@@ -159,6 +160,7 @@ PUBLIC inline + void + Gdt::get_raw(int nr, Unsigned32 *low, Unsigned32 *high) + { ++ Gdt_entry *_entries = reinterpret_cast(this); + _entries[nr].get_raw(low, high); + } + +@@ -173,7 +175,7 @@ PUBLIC inline + Gdt_entry* + Gdt::entries() + { +- return _entries; ++ return reinterpret_cast(this); + } + + +diff --git fiasco/snapshot/kernel/fiasco/src/kern/shared/kdb_ke.cpp fiasco/snapshot/kernel/fiasco/src/kern/shared/kdb_ke.cpp +index 77a51aa..9978b3b 100644 +--- fiasco/snapshot/kernel/fiasco/src/kern/shared/kdb_ke.cpp ++++ fiasco/snapshot/kernel/fiasco/src/kern/shared/kdb_ke.cpp +@@ -1,15 +1,16 @@ + INTERFACE [ia32,ux,amd64]: + + #define kdb_ke(msg) \ +- asm ("int3 \n\t" \ ++ asm volatile ("int3 \n\t" \ + "jmp 1f \n\t" \ + ".ascii " #msg " \n\t" \ +- "1: \n\t"); ++ "1: \n\t" \ ++ : : : "memory"); + + #define kdb_ke_sequence(msg) \ +- asm ("int3 \n\t" \ ++ asm volatile ("int3 \n\t" \ + "jmp 1f \n\t" \ + ".ascii \"*##\" \n\t" \ + "1: \n\t" \ +- : : "a"(msg)); ++ : : "a"(msg) : "memory"); + +diff --git fiasco/snapshot/l4/pkg/crtx/lib/src/construction.c fiasco/snapshot/l4/pkg/crtx/lib/src/construction.c +index 17e8b99..9020245 100644 +--- fiasco/snapshot/l4/pkg/crtx/lib/src/construction.c ++++ fiasco/snapshot/l4/pkg/crtx/lib/src/construction.c +@@ -7,8 +7,8 @@ + + int __cxa_atexit(void (*function)(void *), void *arg, void *dso_handle); + +-#define BEG { (crt0_hook) ~1U } +-#define END { (crt0_hook) 0 } ++#define BEG (crt0_hook) ~1U ++#define END (crt0_hook) 0 + + // make sure that unused symbols are not discarded + #if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ >= 4 +@@ -19,22 +19,22 @@ int __cxa_atexit(void (*function)(void *), void *arg, void *dso_handle); + + typedef void (*const crt0_hook)(void); + +-static crt0_hook __L4DDE_CTOR_BEG__[1] SECTION(".mark_beg_l4dde_ctors") = BEG; +-static crt0_hook __L4DDE_CTOR_END__[1] SECTION(".mark_end_l4dde_ctors") = END; +-static crt0_hook __CTOR_BEG__[1] SECTION(".mark_beg_ctors") = BEG; +-static crt0_hook __CTOR_END__[1] SECTION(".mark_end_ctors") = END; +-static crt0_hook __C_CTOR_BEG__[1] SECTION(".mark_beg_c_ctors") = BEG; +-static crt0_hook __C_CTOR_END__[1] SECTION(".mark_end_c_ctors") = END; +-static crt0_hook __DTOR_BEG__[1] SECTION(".mark_beg_dtors") = BEG; +-static crt0_hook __DTOR_END__[1] SECTION(".mark_end_dtors") = END; +-static crt0_hook __C_SYS_DTOR_BEG__[1] SECTION(".mark_beg_c_sys_dtors") = BEG; +-static crt0_hook __C_SYS_DTOR_END__[1] SECTION(".mark_end_c_sys_dtors") = END; +-static crt0_hook __C_DTOR_BEG__[1] SECTION(".mark_beg_c_dtors") = BEG; +-static crt0_hook __C_DTOR_END__[1] SECTION(".mark_end_c_dtors") = END; ++static crt0_hook __L4DDE_CTOR_BEG__ SECTION(".mark_beg_l4dde_ctors") = BEG; ++static crt0_hook __L4DDE_CTOR_END__ SECTION(".mark_end_l4dde_ctors") = END; ++static crt0_hook __CTOR_BEG__ SECTION(".mark_beg_ctors") = BEG; ++static crt0_hook __CTOR_END__ SECTION(".mark_end_ctors") = END; ++static crt0_hook __C_CTOR_BEG__ SECTION(".mark_beg_c_ctors") = BEG; ++static crt0_hook __C_CTOR_END__ SECTION(".mark_end_c_ctors") = END; ++static crt0_hook __DTOR_BEG__ SECTION(".mark_beg_dtors") = BEG; ++static crt0_hook __DTOR_END__ SECTION(".mark_end_dtors") = END; ++static crt0_hook __C_SYS_DTOR_BEG__ SECTION(".mark_beg_c_sys_dtors") = BEG; ++static crt0_hook __C_SYS_DTOR_END__ SECTION(".mark_end_c_sys_dtors") = END; ++static crt0_hook __C_DTOR_BEG__ SECTION(".mark_beg_c_dtors") = BEG; ++static crt0_hook __C_DTOR_END__ SECTION(".mark_end_c_dtors") = END; + + + static void +-run_hooks_forward(crt0_hook list[], const char *name) ++run_hooks_forward(crt0_hook *list, const char *name) + { + #ifdef DEBUG + outstring("list (forward) "); +@@ -57,7 +57,7 @@ run_hooks_forward(crt0_hook list[], const char *name) + } + + static void +-run_hooks_backward(crt0_hook list[], const char *name) ++run_hooks_backward(crt0_hook *list, const char *name) + { + #ifdef DEBUG + outstring("list (backward) "); +@@ -83,11 +83,11 @@ static void + static_construction(void) + { + /* call constructors made with L4_C_CTOR */ +- run_hooks_forward(__C_CTOR_BEG__, "__C_CTOR_BEG__"); ++ run_hooks_forward(&__C_CTOR_BEG__, "__C_CTOR_BEG__"); + + /* call constructors made with __attribute__((constructor)) + * and static C++ constructors */ +- run_hooks_backward(__CTOR_END__, "__CTOR_END__"); ++ run_hooks_backward(&__CTOR_END__, "__CTOR_END__"); + } + + static void +@@ -95,17 +95,17 @@ static_destruction(void *x __attribute__((unused))) + { + /* call destructors made with __attribute__((destructor)) + * and static C++ destructors */ +- run_hooks_forward(__DTOR_BEG__, "__DTOR_BEG__"); ++ run_hooks_forward(&__DTOR_BEG__, "__DTOR_BEG__"); + + /* call destructors made with L4_C_DTOR except system destructors */ +- run_hooks_backward(__C_DTOR_END__, "__C_DTOR_END__"); ++ run_hooks_backward(&__C_DTOR_END__, "__C_DTOR_END__"); + } + + /* call system destructors */ + void + crt0_sys_destruction(void) + { +- run_hooks_forward(__C_SYS_DTOR_BEG__, "__C_SYS_DTOR_BEG__"); ++ run_hooks_forward(&__C_SYS_DTOR_BEG__, "__C_SYS_DTOR_BEG__"); + } + + extern void *__dso_handle __attribute__((weak)); +@@ -121,7 +121,7 @@ crt0_construction(void) + void + crt0_dde_construction(void) + { +- run_hooks_forward(__L4DDE_CTOR_BEG__, "__L4DDE_CTOR_BEG__"); ++ run_hooks_forward(&__L4DDE_CTOR_BEG__, "__L4DDE_CTOR_BEG__"); + } + + asm (".hidden _init"); +diff --git fiasco/snapshot/l4/pkg/cxx/lib/start/src/cxx_main.cc fiasco/snapshot/l4/pkg/cxx/lib/start/src/cxx_main.cc +index e202139..22e8ddb 100644 +--- fiasco/snapshot/l4/pkg/cxx/lib/start/src/cxx_main.cc ++++ fiasco/snapshot/l4/pkg/cxx/lib/start/src/cxx_main.cc +@@ -13,14 +13,14 @@ + + #include "cxx_atexit.h" + +-extern L4::MainThread *main; ++extern L4::MainThread *main_thread; + + extern "C" + void __main() + { + crt0_construction(); +- if(main) +- main->run(); ++ if(main_thread) ++ main_thread->run(); + __cxa_finalize(0); + crt0_sys_destruction(); + l4_sleep_forever(); diff --git a/repos/base-fiasco/ports/fiasco.hash b/repos/base-fiasco/ports/fiasco.hash index 218bec585c..cd27e8484f 100644 --- a/repos/base-fiasco/ports/fiasco.hash +++ b/repos/base-fiasco/ports/fiasco.hash @@ -1 +1 @@ -7df3c35beaecb0915782bb9d572e2ee973d572c6 +fbf9086843359c2f94b5e0a9891abfc51dc3dbe6