LLVM/Clang Linker Scripts - Bare Bones Tutorial

Programming, for all ages and all languages.
Post Reply
elgun
Posts: 1
Joined: Sat Dec 07, 2019 2:19 am

LLVM/Clang Linker Scripts - Bare Bones Tutorial

Post by elgun »

Hi. It's my third time in kernel development. Previously I developed toy kernels with C (GCC) and Rust.
This time I want to give a try to LLVM/Clang, as it is much easier to cross-compile.
I followed Bare Bones tutorial. For cross-compiling Assembly and C source files I added

Code: Select all

-target i686-none-elf
flags to clang. It compiled successfully.

But I stuck at linking step. First I run this command:

Code: Select all

clang -T linker.ld -o myos.bin -ffreestanding -O2 -nostdlib boot.o kernel.o -lgcc
And It gave me this error

Code: Select all

clang: warning: argument unused during compilation: '-T linker.ld' [-Wunused-command-line-argument]
boot.o : fatal error LNK1107: invalid or corrupt file: cannot read at 0x2A0
After I tried -target i686-none-elf and -fuse-ld=lld-link flags. But it doesn't work.
Any idea about how can we link final kernel binary?
User avatar
beyondsociety
Member
Member
Posts: 39
Joined: Tue Oct 17, 2006 10:35 pm
Location: Eagle, ID (USA)
Contact:

Re: LLVM/Clang Linker Scripts - Bare Bones Tutorial

Post by beyondsociety »

With clang, you will need to add

Code: Select all

-Wl
to the linker options to fix that error. So for example,

Code: Select all

-Wl,-T,linker.ld
Hope this helps.
"I think it may be time for some guru meditation"
"Barbarians don't do advanced wizardry"
Post Reply