
On 5/14/23 09:28, Tom Rini wrote:
Hi Tom!
How extensively have you tested this change?
I tested it in building for the arm/sunxi target. U-Boot does not build at all (on Clang+LLD) in its current state:
ld.lld: error: section type mismatch for .gnu.version_r
<internal>:(.gnu.version_r): SHT_GNU_verneed output section .gnu: SHT_GNU_versym
However, I don't think I've reasoned correctly that --no-pie is the correct flag to pass, since I do see in arch/arm/config.mk:
# needed for relocation LDFLAGS_u-boot += -pie
...and by passing --no-pie, I am just turning that right back off, getting a non-relocatable binary. So I should (and do) withdraw this patch, and will work to understand the situation better before retrying.
It does seem that the present rule in the ARM target is to make a binary that assumes a .text base but includes some .rel.dyn relocations to make it optionally relocatable, so whatever flag we pass to LLD should preserve that behavior without bringing in unwanted sections (versym sections, .dynsym, .dynstr, ...)
We don't install ld.lld in our container environment right now (but should..) and from some local testing I forget if we need to pass further make logic in to have ld.lld be used instead.
To support both LTO and non-LTO cases, I pass: LTO_FINAL_LDFLAGS=-fuse-ld=lld LD=ld.lld
Cheers, Sam