[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Rust 1.19 fails to build on i686 on ‘staging’

From: Danny Milosavljevic
Subject: Re: Rust 1.19 fails to build on i686 on ‘staging’
Date: Mon, 18 Feb 2019 15:38:24 +0100

Hi Chris,

On Sat, 16 Feb 2019 02:53:30 -0800
Chris Marusich <address@hidden> wrote:

> > (i.e. the things you did before, just inside a i686-linux guix
> > environment.  That only provides minimal--almost no--isolation from
> > the host, so it should allow us to test whether the personality is the
> > only possible culprit)  
> Did you mean to say that by using a pure guix environment, we can
> achieve a high degree of isolation?

* "guix environment" provides very low isolation (almost none)
* "guix environment --pure" provides better isolation by at least removing
things from $PATH which aren't supposed to be there.
* "guix environment -C" provides very good isolation by creating a new
initially-empty container.

What I meant is that "guix environment -s i686-linux" is very different
from guix-daemon (especially it does not set the personality) and might
allow us to proceed without error, or with a different error.

But apparently the actual problem is that now it always succeeds.

Today I think we should reproduce the guix-daemon environment as closely as
possible in order to make it fail again--and then use the setup right before
it started failing again.

In this case if we wanted to have a similar environment to the guix-daemon,
I think "guix environment -C" would be the most similar - and should fail.
I'm not sure whether guix environment -C sets the personality.  If not,
then your program should be good for setting the personality.

Your program could be simpler if it just used execv(argv[1], argv + 1)
(or execv(argv[1], &argv[1]))
instead of copying the argument vector; if one wants to skip elements at
the front of an array, using the fact that arrays elements are sequential
in C, without gaps, ordered by increasing index, can be very useful.

> I tried what you suggested.  The mrustc invocation still succeeded.

So it always succeeds outside guix-daemon container (does that include
"guix environment -C" ?), but doesn't succeed inside a guix-daemon
container, is that correct?

> Just for fun, I also made a simple wrapper program that lets me run
> another program using the LINUX32 personality (see attached).  I think I
> programmed it correctly, but C is not (yet!) my forte, so if I made an
> error, please let me know.

>From within the same pure environment, I
> used this wrapper program to invoke mrustc in the same way, and it
> _still_ succeeded.  That surprised me, since I expected it to fail.

That's strange.  Then maybe the personality is not the reason.

> Can you think of any other way I can try to reproduce the issue?

I'd try 

guix environment -s i686-linux -C address@hidden
And then try to build it in there (or only run the same steps you
ran before--should be enough).

Thanks for looking into it.  Apparently it seems to be possible to get
working--it's just a matter of tuning the environment (maybe even
only by removing things).

(If it is the personality, I suspect that it changes the system call
interface and maybe mrustc assumes the x86_64 syscall interface at
all times)

Attachment: pgpXQbiYi28Hh.pgp
Description: OpenPGP digital signature

reply via email to

[Prev in Thread] Current Thread [Next in Thread]