On Thu Jun 23, 2016 at 03:00:49 +0200, Michael Schnupp wrote:
On Wed, Jun 22, 2016 at 12:18:56AM +0200, Adam Lackorzynski wrote:
I tried to build fiasco on alpine linux. This will fail with the following line:
auto/jdb_ktrace.cc:1:0: error: code model kernel does not support PIC mode
Just this file or more/all files?
Not sure. The build stopped after the first error and I was not able to reconfigure for ignoring that file.
Their gcc enables PIC per default for security reasons. Since fiasco seems to need PIC disabled I have to tell the build system either to add -fno-PIC explictly, or to -D__KERNEL__ in any way. (I already tried DEFINES += -D__KERNEL__ or CFLAGS := -fno-PIC in Makeconf without success.)
What is the correct way to add such an option to the fiasco build system? Would it hurt to add -D__KERNEL__ per default on future releases? (After all it *is* a kernel.)
I'd add this to src/Makeconf: SHARED_FLAGS += -fno-pic
Does this fix it?
Not completely. Now compiling seem to work fine, but linking will run into problems:
==> Linking fiasco.image boot_img.o: In function `bootstrap_bootstrap': (.bootstrap.text+0x98): relocation truncated to fit: R_X86_64_32 against symbol `_start' defined in .text section in crt0.o kip_init-ia32.o: In function `Kip_init::init()': kip_init-ia32.cc:(.initcall.text+0x33): relocation truncated to fit: R_X86_64_32 against symbol `my_kernel_info_page' defined in .kernel_info_page section in kip_init-ia32.o kip_init-ia32.cc:(.initcall.text+0xd8): relocation truncated to fit: R_X86_64_32 against symbol `_kernel_image_start' defined in .kip section in fiasco.image kip_init-ia32.cc:(.initcall.text+0xe8): relocation truncated to fit: R_X86_64_32 against symbol `_end' defined in .bss section in fiasco.image kip_init-ia32.cc:(.initcall.text+0x27d): relocation truncated to fit: R_X86_64_32 against symbol `_kernel_image_start' defined in .kip section in fiasco.image kip_init-ia32.cc:(.initcall.text+0x30b): relocation truncated to fit: R_X86_64_32 against symbol `_end' defined in .bss section in fiasco.image kip_init-ia32.cc:(.initcall.text+0x33d): relocation truncated to fit: R_X86_64_32 against symbol `_end' defined in .bss section in fiasco.image kip_init-ia32.cc:(.initcall.text+0x37e): relocation truncated to fit: R_X86_64_32 against symbol `_kernel_image_start' defined in .kip section in fiasco.image libabi.a(kip.o): In function `Kip::add_mem_region(Mem_desc const&)': kip.cc:(.text+0x61): relocation truncated to fit: R_X86_64_32 against `.rodata.str1.8' thread-ia32.o: In function `Thread::handle_int3(Trap_state*)': thread-ia32.cc:(.text+0x55): relocation truncated to fit: R_X86_64_32 against `.rodata.str1.1' thread-ia32.cc:(.text+0x14e): additional relocation overflows omitted from the output .../kernel/fiasco/src/boot/amd64/Makerules.BOOT.amd64:29: recipe for target 'fiasco.image' failed
The above output is from building with 'make SHARED_FLAGS=-D__KERNEL__'. There is a bit more noise with -fno-pic or -fno-PIC, but it is the same kind of problem.
Any idea what exactly is going on here?
I gave this a try with Alpine 3.4 and just the -fno-pic addition made it compile for me. However, the error message while compiling was different. Thus: Which version do you use?
Adam