Chris and I compared what gets sent by the parent on i686 (where it breaks) vs on x86_64 (where it doesn't break): There are no differences. The next step will be to find out what the child process does with the data. I suspect that the child processes' input deserializer is broken. For reference, there are multiple invocations of the child process, so the debugging process is as follows: (1) ~/src/guix-staging/guix/pre-inst-env guix environment --pure rust@1.19.0 --ad-hoc gdb less nano (2) source /tmp/guix-build-rust-1.19.0.drv-0/environment (3) cd /tmp/guix-build-rust-1.19.0.drv-0/rustc-1.19.0-src (4) export MRUSTC_DUMP_PROCMACRO=/tmp/x86_64 (4) ~/.guix-profile/bin/gdb --args /gnu/store/pv5280j9fqzchccc37jj4n7yjsv2x4w6-mrustc-0.8.0/bin/mrustc src/tools/cargo/src/crates-io/lib.rs --crate-name crates_io --crate-type rlib --crate-tag 0_9_0 -g --cfg debug_assertions -O -o output/cargo-build/libcrates_io-0_9_0.hir -L output/cargo-build --extern curl=output/cargo-build/libcurl-0_4_6.hir --extern error_chain=output/cargo-build/liberror_chain-0_10_0.hir --extern serde=output/cargo-build/libserde-1_0_6.hir --extern serde_derive=output/cargo-build/libserde_derive-1_0_6.hir --extern serde_json=output/cargo-build/libserde_json-1_0_2.hir --extern url=output/cargo-build/liburl-1_4_0.hir -L output -L /gnu/store/pv5280j9fqzchccc37jj4n7yjsv2x4w6-mrustc-0.8.0/lib/mrust (5) Set a breakpoint on "getenv" (6) Run (7) Continue program 4 times at the breakpoint (8) Inspect /tmp/x86_64 The readable part without the special characters is: structCrate{pubname:String,pub description:Option,pub max_version:String,} The child process is: output/cargo-build/libserde_derive-1_0_6.hir-plugin derive#Deserialize The backtrace after x86_64's startup is: #0 0x00007ffff7e178f0 in getenv () from /gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib/libc.so.6 #1 0x000000000044a7df in _ZN3std3sys3imp2os6getenv (arg0=...) at output/libstd.hir.o.c:69557 #2 0x000000000044c1fc in _ZN3std3env7_var_os (arg0=...) at output/libstd.hir.o.c:56318 #3 0x000000000048789e in _ZN3std3env6var_os$aL$Rs_str$aR (arg0=...) at output/libproc_macro.hir.o.c:5682 #4 0x000000000048967b in _ZN10proc_macro4main (arg0=...) at output/libproc_macro.hir.o.c:5110 #5 0x00000000004040f3 in _ZN19serde_derive$$1_0_612proc_macro$H4main () at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:35218 #6 0x00000000004af2ec in __rust_maybe_catch_panic ( arg0=arg0@entry=0x439c10 <_ZN3std9panicking3$H37do_call$aLfn_0_$T0$C$T0$aR>, arg1=arg1@entry=0x7fffffffc130 "\340@@", arg2=arg2@entry=0x7fffffffc120, arg3=arg3@entry=0x7fffffffc128) at output/libpanic_abort.hir.o.c:105 #7 0x000000000044d1e6 in _ZN3std9panicking3try$aL$T0$Cfn_0_$T0$aR ( arg0=arg0@entry=0x4040e0 <_ZN19serde_derive$$1_0_612proc_macro$H4main>) at output/libstd.hir.o.c:63637 #8 0x00000000004510e5 in _ZN3std2rt10lang_start ( arg0=arg0@entry=0x4040e0 <_ZN19serde_derive$$1_0_612proc_macro$H4main>, arg1=2, arg2=0x7fffffffc328) at output/libstd.hir.o.c:64414 #9 0x0000000000402c14 in main (argc=, argv=) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:86019 The crash is reproducible on i686 by just doing: /tmp/guix-build-rust-1.19.0.drv-5/rustc-1.19.0-src/output/cargo-build/libserde_derive-1_0_6.hir-plugin 'derive#Deserialize' <~/i686 ... without any guix environment or other preparation. Backtrace on i686 on the crash: #1 0xf7defa60 in raise () from /gnu/store/qk8irm5yp2khq4dj7zcpcaa1g87pfyvw-glibc-2.28/lib/libc.so.6 #2 0xf7df0bd7 in abort () from /gnu/store/qk8irm5yp2khq4dj7zcpcaa1g87pfyvw-glibc-2.28/lib/libc.so.6 #3 0xf7e2ff56 in __libc_message () from /gnu/store/qk8irm5yp2khq4dj7zcpcaa1g87pfyvw-glibc-2.28/lib/libc.so.6 #4 0xf7e36bbd in malloc_printerr () from /gnu/store/qk8irm5yp2khq4dj7zcpcaa1g87pfyvw-glibc-2.28/lib/libc.so.6 #5 0xf7e3713b in munmap_chunk () from /gnu/store/qk8irm5yp2khq4dj7zcpcaa1g87pfyvw-glibc-2.28/lib/libc.so.6 #6 0x0804e63e in _ZRK$aL_ZN5alloc7raw_vec6RawVec$aLu8$aR_as__ZN4core3ops4Drop$aR4drop (arg0=0x815c300) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:61640 #7 _ZRI$aL_ZN5alloc7raw_vec6RawVec$aLu8$aR$aR11$Hdrop_glue (rv=0x815c300) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:175 #8 _ZRI$aL_ZN11collections3vec3Vec$aLu8$aR$aR11$Hdrop_glue (rv=0x815c300) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:185 #9 _ZRI$aL_ZN11collections6string6String$aR11$Hdrop_glue (rv=0x815c300) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:192 #10 _ZRI$aL_ZN12syn$$0_11_115ident5Ident$aR11$Hdrop_glue (rv=0x815c300) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:199 #11 _ZRI$aL_ZN4core6option12Option$HSome$aL_ZN12syn$$0_11_115ident5Ident$aR$aR11$Hdrop_glue (rv=0x815c300) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:2304 #12 _ZRI$aL_ZN4core6option6Option$aL_ZN12syn$$0_11_115ident5Ident$aR$aR11$Hdrop_glue (rv=0x815c300) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:2313 #13 _ZRI$aL_ZN30serde_derive_internals$$0_15_03ast5Field$aR11$Hdrop_glue (rv=0x815c300) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:2350 #14 _ZRK$aL_ZN11collections3vec3Vec$aL_ZN30serde_derive_internals$$0_15_03ast5Field$aR_as__ZN4core3ops4Drop$aR4drop (arg0=0xffffc47c, arg0@entry=0xffffc558) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:64862 #15 _ZRI$aL_ZN11collections3vec3Vec$aL_ZN30serde_derive_internals$$0_15_03ast5Field$aR$aR11$Hdrop_glue (rv=rv@entry=0xffffc47c) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:1843 #16 0x0804e758 in _ZRI$aL_ZN30serde_derive_internals$$0_15_03ast12Body$HStruct$aR11$Hdrop_glue (rv=0xffffc478) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:1852 #17 _ZRI$aL_ZN30serde_derive_internals$$0_15_03ast4Body$aR11$Hdrop_glue (rv=0xffffc478) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:1868 #18 _ZRI$aL_ZN30serde_derive_internals$$0_15_03ast9Container$aR11$Hdrop_glue (rv=rv@entry=0xffffc3a0) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:1882 #19 0x08070393 in _ZN19serde_derive$$1_0_62de25expand_derive_deserialize (arg0=0xffffc57c) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:34299 #20 0x080708a1 in _ZN19serde_derive$$1_0_618derive_deserialize (arg0=...) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:35190 #21 0x080eeb83 in _ZN10proc_macro4main (arg0=...) at output/libproc_macro.hir.o.c:5239 #22 0x0804b114 in _ZN19serde_derive$$1_0_612proc_macro$H4main () at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:35286 #23 0x080eb1fb in __rust_maybe_catch_panic (arg0=0x80bcb20 <_ZN3std9panicking3$H37do_call$aLfn_0_$T0$C$T0$aR>, arg1=0xffffc7b4 "", arg2=0xffffc7ac, arg3=0xffffc7b0) at output/libpanic_abort.hir.o.c:142 #24 0x080d052a in _ZN3std9panicking3try$aL$T0$Cfn_0_$T0$aR (arg0=0x804b100 <_ZN19serde_derive$$1_0_612proc_macro$H4main>) at output/libstd.hir.o.c:63801 #25 0x080d44f3 in _ZN3std2rt10lang_start (arg0=0x804b100 <_ZN19serde_derive$$1_0_612proc_macro$H4main>, arg1=2, arg2=0xffffc904) at output/libstd.hir.o.c:64578 #26 0x08049bc0 in main (argc=2, argv=0xffffc904) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:86165 #6 0x0804e63e in _ZRK$aL_ZN5alloc7raw_vec6RawVec$aLu8$aR_as__ZN4core3ops4Drop$aR4drop (arg0=0x815c300) at output/cargo-build/libserde_derive-1_0_6.hir-plugin.c:61640 warning: Source file is more recent than executable. 61640 var1 = true; // Local(1) = Constant(true) (gdb) l 61640 61635 tUNIT var2; // () 61636 struct s__ZN5alloc7raw_vec6RawVec$aL_ZN30serde_derive_internals$$0_15_03ast7Variant$aR *var3; // &::"alloc"::raw_vec::RawVec<::"serde_derive_internals-0_15_0"::ast::Variant/*S*/,>/*S*/ 61637 uint8_t *var4; // *mut u8 61638 struct s__ZN30serde_derive_internals$$0_15_03ast7Variant *var5; // *mut ::"serde_derive_internals-0_15_0"::ast::Variant/*S*/ 61639 var0 = 0x70ull; // Local(0) = Constant(112 usize) 61640 !! var1 = true; // Local(1) = Constant(true) 61641 var1 = arg0->_1 != 0x0ull; // Local(1) = BinOp(Field(1, Deref(Argument(0))) NE 0 usize) 61642 if(var1) goto bb1; else goto bb2; 61643 // ^ If( Local(1) : 1, 2) 61644 bb1: