Closed ghost closed 7 years ago
We recently got a pr for https://github.com/intermezzOS/book/pull/166, maybe give what it changed there a try? I had been meaning to do this but have not yet had the time, and am likely not for a few weeks :(
I have tested a couple of combinations, none leading to success so far.
My environment:
$ rustc --version
rustc 1.19.0-nightly (75b056812 2017-05-15)
$ ld --version
GNU ld (GNU Binutils) 2.28
$ gcc --version
gcc (GCC) 5.4.0
$ clang --version
clang version 3.9.1 (tags/RELEASE_391/final)
Running `rustc --crate-name intermezzos src/main.rs --crate-type bin --emit=dep-info,link -C opt-level=3 -C panic=abort -C metadata=e6e9de07dfdfab24 -C extra-filename=-e6e9de07dfdfab24 --out-dir /home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps --target x86_64-unknown-intermezzos-gnu -L dependency=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps -L dependency=/home/steveej/src/intermezzOS/kernel/target/release/deps --extern interrupts=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libinterrupts-c6c7ed04139a38d8.rlib --extern pic=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libpic-f51a110abc9e6c47.rlib --extern x86=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libx86-ce431f3e38a680c9.rlib --extern console=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libconsole-fc559238ff9a559b.rlib --extern spin=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libspin-00fabb98c7f7241e.rlib --extern rlibc=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/librlibc-3b5dd58fe6112865.rlib --extern lazy_static=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/liblazy_static-a1d42ece48b6e66f.rlib --extern keyboard=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libkeyboard-e649fc67bae3e832.rlib --extern intermezzos=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libintermezzos-764caafc5c20e8d7.rlib --sysroot /home/steveej/.xargo -L native=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/build/intermezzos-77c8134ab23350d9/out`
error: linking with `cc` failed: exit code: 1
|
= note: "cc" "-L" "/home/steveej/.xargo/lib/rustlib/x86_64-unknown-intermezzos-gnu/lib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/intermezzos-e6e9de07dfdfab24.0.o" "-o" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/intermezzos-e6e9de07dfdfab24" "-Wl,--gc-sections" "-nodefaultlibs" "-L" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps" "-L" "/home/steveej/src/intermezzOS/kernel/target/release/deps" "-L" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/build/intermezzos-77c8134ab23350d9/out" "-L" "/home/steveej/.xargo/lib/rustlib/x86_64-unknown-intermezzos-gnu/lib" "-Wl,-Bstatic" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/librlibc-3b5dd58fe6112865.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libkeyboard-e649fc67bae3e832.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/liblazy_static-a1d42ece48b6e66f.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libintermezzos-764caafc5c20e8d7.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libinterrupts-c6c7ed04139a38d8.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libspin-00fabb98c7f7241e.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libpic-f51a110abc9e6c47.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libx86-ce431f3e38a680c9.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libphf-bd5f2ae3a9a7fc25.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libphf_shared-0eee2d15ac68a4a9.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libraw_cpuid-610484b9caf0ef6f.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libbitflags-bf6302842d1560e0.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libconsole-fc559238ff9a559b.rlib" "/home/steveej/.xargo/lib/rustlib/x86_64-unknown-intermezzos-gnu/lib/libcore-87cbd04ab1bd4da8.rlib" "-Wl,-Bdynamic"
= note: /nix/store/izxnyg94352qxa4a4783dzgnpy5cwazj-glibc-2.25/lib/crt1.o: In function `_start':
/tmp/nix-build-glibc-2.25.drv-0/glibc-2.25/csu/../sysdeps/x86_64/start.S:107: undefined reference to `__libc_csu_fini'
/tmp/nix-build-glibc-2.25.drv-0/glibc-2.25/csu/../sysdeps/x86_64/start.S:108: undefined reference to `__libc_csu_init'
/tmp/nix-build-glibc-2.25.drv-0/glibc-2.25/csu/../sysdeps/x86_64/start.S:110: undefined reference to `main'
/tmp/nix-build-glibc-2.25.drv-0/glibc-2.25/csu/../sysdeps/x86_64/start.S:120: undefined reference to `__libc_start_main'
clang-3.9: error: linker command failed with exit code 1 (use -v to see invocation)
Running `rustc --crate-name intermezzos src/main.rs --crate-type bin --emit=dep-info,link -C opt-level=3 -C panic=abort -C metadata=e6e9de07dfdfab24 -C extra-filename=-e6e9de07dfdfab24 --out-dir /home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps --target x86_64-unknown-intermezzos-gnu -L dependency=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps -L dependency=/home/steveej/src/intermezzOS/kernel/target/release/deps --extern lazy_static=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/liblazy_static-a1d42ece48b6e66f.rlib --extern rlibc=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/librlibc-3b5dd58fe6112865.rlib --extern spin=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libspin-00fabb98c7f7241e.rlib --extern pic=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libpic-f51a110abc9e6c47.rlib --extern console=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libconsole-fc559238ff9a559b.rlib --extern interrupts=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libinterrupts-c6c7ed04139a38d8.rlib --extern keyboard=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libkeyboard-e649fc67bae3e832.rlib --extern x86=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libx86-ce431f3e38a680c9.rlib --extern intermezzos=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libintermezzos-764caafc5c20e8d7.rlib --sysroot /home/steveej/.xargo -L native=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/build/intermezzos-77c8134ab23350d9/out`
error: linking with `cc` failed: exit code: 1
|
= note: "cc" "-L" "/home/steveej/.xargo/lib/rustlib/x86_64-unknown-intermezzos-gnu/lib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/intermezzos-e6e9de07dfdfab24.0.o" "-o" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/intermezzos-e6e9de07dfdfab24" "--gc-sections" "-L" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps" "-L" "/home/steveej/src/intermezzOS/kernel/target/release/deps" "-L" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/build/intermezzos-77c8134ab23350d9/out" "-L" "/home/steveej/.xargo/lib/rustlib/x86_64-unknown-intermezzos-gnu/lib" "-Bstatic" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/librlibc-3b5dd58fe6112865.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libkeyboard-e649fc67bae3e832.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/liblazy_static-a1d42ece48b6e66f.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libintermezzos-764caafc5c20e8d7.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libinterrupts-c6c7ed04139a38d8.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libspin-00fabb98c7f7241e.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libpic-f51a110abc9e6c47.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libx86-ce431f3e38a680c9.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libphf-bd5f2ae3a9a7fc25.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libphf_shared-0eee2d15ac68a4a9.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libraw_cpuid-610484b9caf0ef6f.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libbitflags-bf6302842d1560e0.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libconsole-fc559238ff9a559b.rlib" "/home/steveej/.xargo/lib/rustlib/x86_64-unknown-intermezzos-gnu/lib/libcore-87cbd04ab1bd4da8.rlib" "-Bdynamic"
= note: clang-3.9: error: unsupported option '--gc-sections'
Compilation works:
Running `rustc --crate-name intermezzos src/main.rs --crate-type bin --emit=dep-info,link -C opt-level=3 -C panic=abort -C metadata=e6e9de07dfdfab24 -C extra-filename=-e6e9de07dfdfab24 --out-dir /home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps --target x86_64-unknown-intermezzos-gnu -L dependency=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps -L dependency=/home/steveej/src/intermezzOS/kernel/target/release/deps --extern lazy_static=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/liblazy_static-a1d42ece48b6e66f.rlib --extern x86=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libx86-ce431f3e38a680c9.rlib --extern console=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libconsole-fc559238ff9a559b.rlib --extern pic=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libpic-f51a110abc9e6c47.rlib --extern keyboard=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libkeyboard-e649fc67bae3e832.rlib --extern rlibc=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/librlibc-3b5dd58fe6112865.rlib --extern spin=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libspin-00fabb98c7f7241e.rlib --extern interrupts=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libinterrupts-c6c7ed04139a38d8.rlib --extern intermezzos=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libintermezzos-764caafc5c20e8d7.rlib --sysroot /home/steveej/.xargo -L native=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/build/intermezzos-77c8134ab23350d9/out`
Finished release [optimized] target(s) in 0.66 secs
The VM starts and displays the following error:
error: no multiboot header found
error: you need to load the kernel first
readelf --all target/isofiles/boot/intermezzos
Running `rustc --crate-name intermezzos src/main.rs --crate-type bin --emit=dep-info,link -C opt-level=3 -C panic=abort -C metadata=e6e9de07dfdfab24 -C extra-filename=-e6e9de07dfdfab24 --out-dir /home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps --target x86_64-unknown-intermezzos-gnu -L dependency=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps -L dependency=/home/steveej/src/intermezzOS/kernel/target/release/deps --extern console=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libconsole-fc559238ff9a559b.rlib --extern spin=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libspin-00fabb98c7f7241e.rlib --extern keyboard=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libkeyboard-e649fc67bae3e832.rlib --extern lazy_static=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/liblazy_static-a1d42ece48b6e66f.rlib --extern interrupts=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libinterrupts-c6c7ed04139a38d8.rlib --extern rlibc=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/librlibc-3b5dd58fe6112865.rlib --extern x86=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libx86-ce431f3e38a680c9.rlib --extern pic=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libpic-f51a110abc9e6c47.rlib --extern intermezzos=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libintermezzos-764caafc5c20e8d7.rlib --sysroot /home/steveej/.xargo -L native=/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/build/intermezzos-77c8134ab23350d9/out`
error: linking with `ld` failed: exit code: 1
|
= note: "ld" "-L" "/home/steveej/.xargo/lib/rustlib/x86_64-unknown-intermezzos-gnu/lib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/intermezzos-e6e9de07dfdfab24.0.o" "-o" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/intermezzos-e6e9de07dfdfab24" "-Wl,--gc-sections" "-nodefaultlibs" "-L" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps" "-L" "/home/steveej/src/intermezzOS/kernel/target/release/deps" "-L" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/build/intermezzos-77c8134ab23350d9/out" "-L" "/home/steveej/.xargo/lib/rustlib/x86_64-unknown-intermezzos-gnu/lib" "-Wl,-Bstatic" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/librlibc-3b5dd58fe6112865.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libkeyboard-e649fc67bae3e832.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/liblazy_static-a1d42ece48b6e66f.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libintermezzos-764caafc5c20e8d7.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libinterrupts-c6c7ed04139a38d8.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libspin-00fabb98c7f7241e.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libpic-f51a110abc9e6c47.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libx86-ce431f3e38a680c9.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libphf-bd5f2ae3a9a7fc25.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libphf_shared-0eee2d15ac68a4a9.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libraw_cpuid-610484b9caf0ef6f.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libbitflags-bf6302842d1560e0.rlib" "/home/steveej/src/intermezzOS/kernel/target/x86_64-unknown-intermezzos-gnu/release/deps/libconsole-fc559238ff9a559b.rlib" "/home/steveej/.xargo/lib/rustlib/x86_64-unknown-intermezzos-gnu/lib/libcore-87cbd04ab1bd4da8.rlib" "-Wl,-Bdynamic"
= note: /nix/store/8yb0smqwyf3da339b5kjhw8vwlslrdp0-binutils-2.28/bin/ld: unrecognized option '-Wl,--gc-sections'
/nix/store/8yb0smqwyf3da339b5kjhw8vwlslrdp0-binutils-2.28/bin/ld: use the --help option for usage information
I don't know what else to try now ;-)
@phil-opp have you run into this stuff?
For me the issue is not fixed after #112. It seems that the sections, namely .boot and .text don't make it into the binary:
$ objdump -h target/isofiles/boot/intermezzos
target/isofiles/boot/intermezzos: file format elf64-x86-64
Sections:
Idx Name Size VMA LMA File off Algn
0 .eh_frame_hdr 0000000c 0000000000400120 0000000000400120 00000120 2**2
CONTENTS, ALLOC, LOAD, READONLY, DATA
1 .eh_frame 00000000 0000000000400130 0000000000400130 00000130 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
@steveeJ Whoops! My kernel is linked correctly after using the new target.json syntax, so I foolishly assumed that intermezzOS would be as well. I'm passing slightly different flags, though...
I noticed that intermezzOS doesn't compile anymore due to this commit that makes xargo require the "linker-flavor" argument in the x86_64-unknown-intermezzos-gnu.json file.
Once added the line
"linker-flavor": "ld",
it started compiling, but I was still getting errors, that led me to add another line"linker": "ld",
.Now it compiles just fine, but when I try to
make run
grub returns this error:Can anyone help me? :)