https://sourceware.org/bugzilla/show_bug.cgi?id=33300
Bug ID: 33300 Summary: strip --strip-unneeded "breaks" libc.a (causing segfault in Rust programs linked libc statically) Product: binutils Version: 2.45 Status: UNCONFIRMED Severity: normal Priority: P2 Component: binutils Assignee: unassigned at sourceware dot org Reporter: xry111 at xry111 dot site Target Milestone: --- With the latest Glibc and Binutils release, we found stripping libc.a with --strip-unneeded will cause any Rust programs compiled with -C target-feature=+crc-static (i.e. linking against the static libc) to segfault on startup. To reproduce: $ cat hw.rs pub fn main() { println!("Hello, world."); } $ unshare -mr env PS1="(unshared ns)# " LC_ALL=C bash --norc (unshared ns)# cp /usr/lib/libc.a /tmp (unshared ns)# strip --strip-unneeded /tmp/libc.a (unshared ns)# mount --bind /tmp/libc.a /usr/lib/libc.a (unshared ns)# rustc hw.rs -C target-feature=+crt-static (unshared ns)# ./hw Segmentation fault (core dumped) ./hw (unshared ns)# gdb hw (gdb) r Starting program: /home/xry111/hw Program received signal SIGSEGV, Segmentation fault. 0x0000000000000000 in ?? () (gdb) bt #0 0x0000000000000000 in ?? () #1 0x00007ffff7f507a3 in _IO_doallocbuf () #2 0x00007ffff7f4d756 in _IO_new_file_underflow () #3 0x00007ffff7f4b313 in getdelim () #4 0x00007ffff7f169da in pthread_getattr_np () #5 0x00007ffff7ef28f6 in std::rt::lang_start_internal () #6 0x00007ffff7ed8911 in std::rt::lang_start () #7 0x00007ffff7ed8a45 in main () This can also be reproduced on Fedora Rawhide (where "/usr/lib" in the above instructions needs to be change to "/usr/lib64"). We are currently working the issue around by using --strip-debug instead of --strip-unneeded, but shouldn't --strip- unneeded just keep anything that the linker may "need" to create a correct executable? -- You are receiving this mail because: You are on the CC list for the bug.