Nixpkgs Stdenv | 225 Members | |
| 72 Servers |
| Sender | Message | Time |
|---|---|---|
| 7 Mar 2023 | ||
* anyone know why/where we add ldso to needed for (as far as I can tell) just aarch64? i can't get the same result on x86_64-linux, and I don't see any extra flags added via ld-wrapper that would cause this. | 01:44:46 | |
e.g. grepped NIX_DEBUG=7 logs and cannot find anything that would do this | 02:19:48 | |
patchelf --set-interpreter | 07:18:50 | |
lddtree from pax-utils might make it more obvious where ld.so comes from. | 07:19:15 | |
ld.wrapper sets it in pkgs/build-support/bintools-wrapper/ld-wrapper.sh: extraBefore+=("-dynamic-linker" "$NIX_DYNAMIC_LINKER_@suffixSalt@") | 07:20:01 | |
In reply to @trofi:matrix.orgi don't think that's true entirely (either that or patchelf is bugged on aarch64)? x86_64-linux also has the interpreter set, but patchelf --print-needed does not show it. | 12:41:29 | |
| which is why i ask, it just seems strange and nonobvious | 12:41:49 | |
| (by "true entirely" i mean that doesn't explain what i'm seeing here) | 12:44:50 | |
| i checked an aarch64-linux binary not from Nixpkgs and it doesn't have the interpreter in print-needed either, so i think that rules out being a patchelf issue | 12:45:54 | |
| i just don't know where else the interpreter would get added to needed other than in ld-wrapper, and i do not see it there | 12:46:30 | |
| just seems very very strange that this is only happening on aarch64 🙃 | 12:54:05 | |
| apologies for the maybe nonsensical rambling trofi, but hopefully those clarifications make the issue(?) clear that it's not the interpreter i'm talking about. i really don't know where to go from here, though, so any help is appreciated. thank you! | 15:37:24 | |
| Do you have an 'lddtree' output on problematic file? Does it show ldso output anywhere except the interpreter? | 17:45:31 | |
| I generally have less faith in patchelf than readelf or objdump when it comes to parsing elves. | 17:49:47 | |
| Oh, it's really added via DT_NEEDED /o\ | 17:55:54 | |
That looks very wrong. patchelf might not have shrunk NEEDED section size and spilled over to INTERP. I'll try to reproduce using qemu-user locally. | 18:02:11 | |
| Thank you! If you'd like, I can get an lddtree output sometime today. | 18:39:12 | |
| * Thank you for looking into it! If you'd like, I can get an lddtree output sometime today. | 18:45:48 | |
| though I suppose you don't need it since you can just get it with qemu-user | 18:45:59 | |
Yeah, x86_64-linux lddtree works as is on aarch64-linux binary from hydra and shows the same unexpected dependency. | 19:35:49 | |
| Got it, wasn't sure if lddtree used ldd or not. | 20:51:28 | |
| Definitely odd that this only happens on aarch64-linux... are ELF headers really that different between the architectures? | 20:52:13 | |
| Most header types are the same and mainly differ only by endianness or by field sizes (32 vs 64 bits). But some sections are architecture-specific, like relocations (.rela / .rela.dyn). | 22:15:13 | |
Looks like it's intentional after all: It's added by ...-glibc-2.35-224/lib/libc.so: GROUP ( ...-glibc-2.35-224/lib/libc.so.6 ...-glibc-2.35-224/lib/libc_ nonshared.a AS_NEEDED ( ...-glibc-2.35-224/lib/ld-linux-aarch64.so.1 ) ) and provides __stack_chk_guard@@GLIBC_2.17 symbol. | 22:26:15 | |
| 8 Mar 2023 | ||
In reply to @trofi:matrix.orgWhere did you find this info? Now I'm curious why I don't see the stack check guard in e.g. Guix's hello binary 🤔 | 02:22:13 | |
| Thanks for looking into it by the way | 02:22:23 | |
In reply to @trofi:matrix.org* Where did you find this info? | 02:53:19 | |
In reply to @winterqt:nixos.devThat's the libc.so text-file. | 07:23:25 | |
In reply to @winterqt:nixos.dev Ran
Then explore unstripped/unpatchelf-ed | 07:30:07 | |
In reply to @winterqt:nixos.dev* Ran
Then explored unstripped/unpatchelf-ed | 07:36:32 | |