On Mon, Jun 23, 2014 at 02:32:37PM -0600, Jeff Law wrote: > On 06/23/14 14:09, Tobias Burnus wrote: > >This patch broke bootstrapping for me on x86-64-gnu-linux: > > > >/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: > >i386 architecture of input file `/usr/lib/crti.o' is incompatible with > >i386:x86-64 output > > > > >If I revert the patch, it works for me. > Reverted. Will have to look deeper. Paul, did you bootstrap with this > patch on the trunk?
I can see one spot where multilib_os_dir is set to non-malloced string literal, and at that point we also leak memory. So, supposedly: new_multilib_os_dir = XNEWVEC (char, ml_end - q); memcpy (new_multilib_os_dir, q + 1, ml_end - q - 1); new_multilib_os_dir[ml_end - q - 1] = '\0'; multilib_os_dir = *new_multilib_os_dir ? new_multilib_os_dir : "."; should be instead: if (ml_end - q == 1) multilib_os_dir = xstrdup ("."); else { new_multilib_os_dir = XNEWVEC (char, ml_end - q); memcpy (new_multilib_os_dir, q + 1, ml_end - q - 1); new_multilib_os_dir[ml_end - q - 1] = '\0'; multilib_os_dir = new_multilib_os_dir; } or so (completely untested). Bet this got broken when the multiarch support has been added, before that multilib_os_dir has always been malloced. Alternatively, multilib_os_dir could be set to NULL instead of setting it to ".". Jakub