Hi John & all,

> On Wednesday, July 20, 2011 8:34:57 am Julian H. Stacey wrote:
> > Hi,
> > Reference:
> > > From:             John Baldwin <j...@freebsd.org> 
> > > Date:             Wed, 20 Jul 2011 07:48:05 -0400 
> > > Message-id:       <201107200748.05786....@freebsd.org> 
> > 
> > John Baldwin wrote:
> > > On Wednesday, July 20, 2011 7:33:26 am Julian H. Stacey wrote:
> > > > What should FreeBSD do ? 
> > > >         Add a comment to man gcc ... that -march=i586 is not
> > > >         enough, & feed the comment back to gcc project & see how
> > > >         they want to handle it ?
> > > 
> > > No, this is not a GCC bug.  If you want to use a single build machine 
> > > that 
> > > will compile programs for other machines on a network to use, it must use 
> > > the 
> > > lowest common denominator for its CPUTYPE in /etc/make.conf.
> > > 
> > > The out-of-the-box crt files from a FreeBSD install will work fine on a 
> > > 486
> > > and above, so can only get yourself into this quandry by building a new 
> > > world 
> > > with a CPUTYPE (or similar CFLAGS) setting in /etc/make.conf that 
> > > violates 
> > > this rule.
> > > 
> > > You can fix your machine by fixing the CPUTYPE in your build machine and 
> > > building and installing a new world (do use NO_CLEAN=yes for your build, 
> > > do a 
> > > full build).  You will also want to rebuild any other binaries on this 
> > > machine 
> > > that you share with other machines.
> > > 
> > > -- 
> > > John Baldwin
> > 
> > 
> > Hi John, 
> > Yes I realise all that now thanks.
> > The point now is man gcc is misleading/ incomplete:
> >     "-march=cpu-type
> >            Generate instructions for the machine type cpu-type."
> > Those instructions will not make a program that runs on a lesser CPU type
> > without alternate crt for lesse CPU.
> > 
> > CFLAGS in make.conf is fine for single developer/ host debugging,
> > but is not appropriate for multi user multi make builds os src/ ports/ other
> > 
> > Its seems just that gcc -march fails to select alternate crt.
> > 
> > One gross ugly solution needing root would be to create chroots,
> > but Too ugly.
> > 
> > I suggest gcc via -march should also be used as a selection for sub
> > dirs for crt ? & we should co-operate with gcc project on that,
> > *BSD & *linux must all face same phenomena so lets not develop
> > a non standard solution.
> 
> I think this is a harder problem than you expect.

Yes, Needs to be thought through, that's why I posted 13:33:26 +0200 :

> > Question: with more complex programs than who, might there 
> > be sensitivity to other libs too ?


Per Andriy's :

> Talk to GCC people now?

I'm not clear what's best, but yes, when its clear, then talk to gcc people.


> It is not just the crt files
> that matter, but every library.  You would need CPU-specific versions of every
> static library on the build system,

Would be preferable.
Though as we default to link dynamic, not as essential as crt.o .
We could also have some ifdef to avoid by default generating for
all of [3-6]86 that would save space & time,
If the directory was not filled, a user of gcc --march=i586 would
then fail to link from /usr/lib/i586/ & could receive a good error,
instead of a 686 crt.o with no error.


> and possibly you would want to do this for
> all shared libraries too.

I guess we could skip those, Presuming a target system should have a
matched set for the right CPU & release etc.


I'm not sure about the recent plethora of lib stuff
        /lib 
                Seems to be all .so so I guess not affected.
        /libexec 
                ld-elf.so.1 ld-elf32.so.1       # no man ld-elf
        /usr/lib 
                This is where I'd suggest sub dirs of [3-6]86
                with default machine native either
                         in top dir 
                        or perhaps a native/ sub dir,
                        or sym linked
                whatever gcc & out & other projects find best ?
        /usr/lib32 
                ... Sigh ! same as above ? ..
        /usr/libdata /ldscripts & /lint
                ?
        /usr/libexec
                Presumably can ignore this as real programs.

        & ignore inderminent localy variant dirs shown by
                cd /usr/local ; find . -type d -name \*lib\* -print

Cheers,
Julian
-- 
Julian Stacey, BSD Unix Linux C Sys Eng Consultants Munich http://berklix.com
 Reply below, not above;  Indent with "> ";  Cumulative like a play script.
 Format: Plain text. Not HTML, multipart/alternative, base64, quoted-printable.
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"

Reply via email to