Re: [PATCH] arm64: relocate-rela: Add support for ld.lld
On Wed, Oct 20, 2021 at 09:31:32PM +, Alistair Delva wrote: > Cap end of relocations by the binary size. > > Linkers like to insert some auxiliary sections between .rela.dyn and > .bss_start. These sections don't make their way to the final binary, but > reloc_rela still tries to relocate them, resulting in attempted read > past the end of file. > > When linking U-Boot with ld.lld, the STATIC_RELA feature (enabled by > default on arm64) breaks the build. After this patch, U-Boot can be > linked successfully with and without CONFIG_STATIC_RELA. > > Originally-from: Elena Petrova > Signed-off-by: Alistair Delva > Cc: David Brazdil > Cc: Scott Wood > Cc: Tom Rini Applied to u-boot/master, thanks! -- Tom signature.asc Description: PGP signature
Re: [PATCH] arm64: relocate-rela: Add support for ld.lld
On Mon, Oct 25, 2021 at 10:46:32AM -0700, Alistair Delva wrote: > -Scott's ancient non-functioning email address > > Hi Tom, > > On Mon, Oct 25, 2021 at 6:30 AM Tom Rini wrote: > > > > On Wed, Oct 20, 2021 at 09:31:32PM +, Alistair Delva wrote: > > > > > Cap end of relocations by the binary size. > > > > > > Linkers like to insert some auxiliary sections between .rela.dyn and > > > .bss_start. These sections don't make their way to the final binary, but > > > reloc_rela still tries to relocate them, resulting in attempted read > > > past the end of file. > > > > > > When linking U-Boot with ld.lld, the STATIC_RELA feature (enabled by > > > default on arm64) breaks the build. After this patch, U-Boot can be > > > linked successfully with and without CONFIG_STATIC_RELA. > > > > > > Originally-from: Elena Petrova > > > Signed-off-by: Alistair Delva > > > Cc: David Brazdil > > > Cc: Scott Wood > > > Cc: Tom Rini > > > > Thanks for the patch. Do you have any other changes for LLVM/LLDB > > support on arm64 platforms? I think I've had a few stumbles whenever > > I've tried and not been able to cycle back to them. > > I think the patches I posted are enough to get U-Boot to build with > LLVM LD for QEMU targets on arm64 and x86_64, but I have some other > build problems to work through on physical device targets like > rockchip. > > Oddly, the arm64 binaries seem to be booting up (as far as we can see > in a debugger), but there's no serial output, so there's still some > work to do. > > I'll keep upstreaming what we find. Our CI system is over here: > https://ci.android.com/builds/branches/aosp_u-boot-mainline/grid? > (using Clang but still ld.bfd for now) OK, thanks! I would like to see this get to the point of building + booting, so I can hopefully get a platform or two both in CI and my local HW CI loop building with clang as well. -- Tom signature.asc Description: PGP signature
Re: [PATCH] arm64: relocate-rela: Add support for ld.lld
On Wed, Oct 20, 2021 at 09:31:32PM +, Alistair Delva wrote: > Cap end of relocations by the binary size. > > Linkers like to insert some auxiliary sections between .rela.dyn and > .bss_start. These sections don't make their way to the final binary, but > reloc_rela still tries to relocate them, resulting in attempted read > past the end of file. > > When linking U-Boot with ld.lld, the STATIC_RELA feature (enabled by > default on arm64) breaks the build. After this patch, U-Boot can be > linked successfully with and without CONFIG_STATIC_RELA. > > Originally-from: Elena Petrova > Signed-off-by: Alistair Delva > Cc: David Brazdil > Cc: Scott Wood > Cc: Tom Rini Thanks for the patch. Do you have any other changes for LLVM/LLDB support on arm64 platforms? I think I've had a few stumbles whenever I've tried and not been able to cycle back to them. -- Tom signature.asc Description: PGP signature
[PATCH] arm64: relocate-rela: Add support for ld.lld
Cap end of relocations by the binary size. Linkers like to insert some auxiliary sections between .rela.dyn and .bss_start. These sections don't make their way to the final binary, but reloc_rela still tries to relocate them, resulting in attempted read past the end of file. When linking U-Boot with ld.lld, the STATIC_RELA feature (enabled by default on arm64) breaks the build. After this patch, U-Boot can be linked successfully with and without CONFIG_STATIC_RELA. Originally-from: Elena Petrova Signed-off-by: Alistair Delva Cc: David Brazdil Cc: Scott Wood Cc: Tom Rini --- tools/relocate-rela.c | 20 +--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/tools/relocate-rela.c b/tools/relocate-rela.c index 6a524014b7..f0bc548617 100644 --- a/tools/relocate-rela.c +++ b/tools/relocate-rela.c @@ -63,7 +63,7 @@ int main(int argc, char **argv) { FILE *f; int i, num; - uint64_t rela_start, rela_end, text_base; + uint64_t rela_start, rela_end, text_base, file_size; if (argc != 5) { fprintf(stderr, "Statically apply ELF rela relocations\n"); @@ -87,8 +87,7 @@ int main(int argc, char **argv) return 3; } - if (rela_start > rela_end || rela_start < text_base || - (rela_end - rela_start) % sizeof(Elf64_Rela)) { + if (rela_start > rela_end || rela_start < text_base) { fprintf(stderr, "%s: bad rela bounds\n", argv[0]); return 3; } @@ -96,6 +95,21 @@ int main(int argc, char **argv) rela_start -= text_base; rela_end -= text_base; + fseek(f, 0, SEEK_END); + file_size = ftell(f); + rewind(f); + + if (rela_end > file_size) { + // Most likely compiler inserted some section that didn't get + // objcopy-ed into the final binary + rela_end = file_size; + } + + if ((rela_end - rela_start) % sizeof(Elf64_Rela)) { + fprintf(stderr, "%s: rela size isn't a multiple of Elf64_Rela\n", argv[0]); + return 3; + } + num = (rela_end - rela_start) / sizeof(Elf64_Rela); for (i = 0; i < num; i++) { -- 2.30.2