This fails:
$ ./elf/ld-linux.so.2 /bin/true Segmentation fault
This is a fully expected result.
GLIBC consists of ~ 200 separate files, all of which must match exactly (must be from the same assembly), because they use non-versioned binary interfaces between them.
When you run ./elf/ld-linux.so.2 /bin/true you use your own ld-linux assembly, but the system version of libc.so.6 , which was not obtained from your assembly.
You can confirm that this is really what happens when using:
LD_DEBUG=files,libs ./elf/ld-linux.so.2 /bin/true
(this will prove that /lib/libc.so.6 used).
You can fix this using, for example,
./elf/ld-linux.so.2 --library-path . /bin/true
which will then use ./libc.so.6
source share