Skip to content
This repository has been archived by the owner on Apr 6, 2020. It is now read-only.

linker-flavor required #111

Closed
ghost opened this issue Apr 24, 2017 · 5 comments · Fixed by #112
Closed

linker-flavor required #111

ghost opened this issue Apr 24, 2017 · 5 comments · Fixed by #112

Comments

@ghost
Copy link

ghost commented Apr 24, 2017

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:

error: no multiboot header found
error: you need to load the kernel first

Can anyone help me? :)

@steveklabnik
Copy link
Member

We recently got a pr for intermezzOS/book#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 :(

@steveej
Copy link
Contributor

steveej commented May 19, 2017

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)

"linker-flavor": "gcc"

     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)

"linker-flavor": "ld"

     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'

"linker": "ld", "linker-flavor": "ld"

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

"linker": "ld", "linker-flavor": "gcc"

     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 ;-)

@steveklabnik
Copy link
Member

@phil-opp have you run into this stuff?

@steveej
Copy link
Contributor

steveej commented May 22, 2017

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

@hawkw
Copy link
Contributor

hawkw commented May 22, 2017

@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...

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants