| 7 Mar 2023 |
Winter (she/her) | (by "true entirely" i mean that doesn't explain what i'm seeing here) | 12:44:50 |
Winter (she/her) | 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 |
Winter (she/her) | 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 |
Winter (she/her) | just seems very very strange that this is only happening on aarch64 🙃 | 12:54:05 |
Winter (she/her) | 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 |
@trofi:matrix.org | Do you have an 'lddtree' output on problematic file? Does it show ldso output anywhere except the interpreter? | 17:45:31 |
@trofi:matrix.org | I generally have less faith in patchelf than readelf or objdump when it comes to parsing elves. | 17:49:47 |
@trofi:matrix.org | Oh, it's really added via DT_NEEDED /o\ | 17:55:54 |
@trofi:matrix.org | 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 |
Winter (she/her) | Thank you! If you'd like, I can get an lddtree output sometime today. | 18:39:12 |
Winter (she/her) | * Thank you for looking into it! If you'd like, I can get an lddtree output sometime today. | 18:45:48 |
Winter (she/her) | though I suppose you don't need it since you can just get it with qemu-user | 18:45:59 |
@trofi:matrix.org | Yeah, x86_64-linux lddtree works as is on aarch64-linux binary from hydra and shows the same unexpected dependency. | 19:35:49 |
Winter (she/her) | Got it, wasn't sure if lddtree used ldd or not. | 20:51:28 |
Winter (she/her) | Definitely odd that this only happens on aarch64-linux... are ELF headers really that different between the architectures? | 20:52:13 |
@trofi:matrix.org | 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 |
@trofi:matrix.org | 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 |
Winter (she/her) | In reply to @trofi:matrix.org 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. Where 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 |
Winter (she/her) | Thanks for looking into it by the way | 02:22:23 |
Winter (she/her) | In reply to @trofi:matrix.org 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. * Where did you find this info? | 02:53:19 |
vcunat | In reply to @winterqt:nixos.dev Where did you find this info? That's the libc.so text-file. | 07:23:25 |
@trofi:matrix.org | In reply to @winterqt:nixos.dev Where did you find this info? Ran
$ nix develop -f. hello --argstr system aarch64-linux
$ unpackPhase; cd hello*; patchPase; configurePhase; buildPhase
Then explore unstripped/unpatchelf-ed hello and realized it has the dependency. Then explored gcc -o hello ... command, added -v to it and extracted ld call. That still produced a reference. Then added -shared flag to allow removing almost all .o files and noticed that at some point ld.so NEEDED dependency disappears. That means it was an explicit linkage input and some symbol is retaining it. Then ran nm -D on ld.so and on hello to see if there are suspects that are exported from ld.so and are imported to hello. __stack_chk_guard looked obvious. Then checked all the inputs if they are linker scripts. libc.so ended up one.
| 07:30:07 |
@trofi:matrix.org | In reply to @winterqt:nixos.dev Where did you find this info? * Ran
$ nix develop -f. hello --argstr system aarch64-linux
$ unpackPhase; cd hello*; patchPase; configurePhase; buildPhase
Then explored unstripped/unpatchelf-ed hello and realized it has the dependency. Then explored gcc -o hello ... command, added -v to it and extracted ld call. That still produced a reference. Then added -shared flag to allow removing almost all .o files and noticed that at some point ld.so NEEDED dependency disappears. That means it was an explicit linkage input and some symbol is retaining it. Then ran nm -D on ld.so and on hello to see if there are suspects that are exported from ld.so and are imported to hello. __stack_chk_guard looked obvious. Then checked all the inputs if they are linker scripts. libc.so ended up one.
| 07:36:32 |
vcunat | In reply to @winterqt:nixos.dev Where did you find this info? * That's the libc.so text-file. | 08:09:19 |
| 14 Mar 2023 |
| ckie (they/them; limited keyboard usage, voice preferred) changed their display name from ckie (they/them) to ckie (they/them; heavily limited keyboard usage, dictation or voice only). | 01:09:43 |
| 18 Mar 2023 |
| Mindavi changed their display name from Rick (Mindavi) to Mindavi. | 10:48:18 |
| 20 Mar 2023 |
hexa | ❯ nix build -f . curl.tests
error:
… while calling a functor (an attribute set with a '__functor' attribute)
at /home/hexa/git/nixos/staging/pkgs/tools/networking/curl/default.nix:171:20:
170| withCheck = finalAttrs.finalPackage.overrideAttrs (_: { doCheck = true; });
171| fetchpatch = tests.fetchpatch.simple.override { fetchpatch = fetchpatch.override { fetchurl = useThisCurl fetchurl; }; };
| ^
172| curlpp = useThisCurl curlpp;
… while evaluating a branch condition
at /home/hexa/git/nixos/staging/lib/customisation.nix:92:7:
91| in
92| if builtins.isAttrs result then
| ^
93| result // {
(stack trace truncated; use '--show-trace' to show the full trace)
error: attribute 'version' missing
at /home/hexa/git/nixos/staging/pkgs/build-support/fetchpatch/tests.nix:4:19:
3| let
4| isFetchpatch2 = fetchpatch.version == 2;
| ^
5| in
not sure if the fetchers are stdenv material, but looks like fetchpatch2 changes have broken curls passthru tests 🙂 cc Artturin
| 15:07:53 |
Artturin | the override clears the // { version ... } done on the callPackage result | 15:18:43 |
Artturin | fetchpatch = callPackage ../build-support/fetchpatch {
# 0.3.4 would change hashes: https://github.com/NixOS/nixpkgs/issues/25154
patchutils = buildPackages.patchutils_0_3_3;
} // {
tests = pkgs.tests.fetchpatch;
version = 1;
};
fetchpatch2 = callPackage ../build-support/fetchpatch {
patchutils = buildPackages.patchutils_0_4_2;
} // {
tests = pkgs.tests.fetchpatch2;
version = 2;
};
| 15:18:47 |
Artturin | passthru is not used here because fetchpatch retunrs a function | 15:19:10 |