Hi Dan cc list

Dan Nelson wrote:
> In the last episode (Jul 17), Julian H. Stacey said:
> > Hi all,
> > ENVIRONMENT:
> >     Standard
> >     gcc version 4.2.1 20070719  [FreeBSD]
> >     that comes with
> >     FreeBSD 7.4-RELEASE
> >     on my 686 host with
> >     CFLAGS += -march=i586
> >     in
> >     /etc/make.conf
> >     used with
> >     cd /usr/src/bin/who ; make clean ; make cleandir ; make clean ; make
> >     reports
> >     Warning: Object directory not changed from original /usr/src/usr.bin/who
> >     cc -O2 -fno-strict-aliasing -march=i586   -c /usr/src/usr.bin/who/who.c
> >     cc -O2 -fno-strict-aliasing -march=i586    -o who who.o 
> >     looking with
> >     file who
> >     reports
> >     who: ELF 32-bit LSB executable, Intel 80386, version 1
> >             (FreeBSD), for FreeBSD 7.4, dynamically linked (uses shared
> >             libs), FreeBSD-style, not stripped
> > 
> > Problem:
> >     Use it from a 586 7.4-RELEASE host (AMD+NFS) 
> >     file /host/sony/usr/src/usr.bin/who/who
> >     /host/sony/usr/src/usr.bin/who/who: ELF 32-bit LSB executable,
> >             Intel 80386, version 1 (FreeBSD), for FreeBSD 7.4, dynamically
> >             linked (uses shared libs), FreeBSD-style, not stripped
> >     /host/sony/usr/src/usr.bin/who/who
> >     fails with
> >     Illegal instruction
> 
> Were the crt*.o files on your fast machine also compiled with -march=i586 ? 

No. I hadn't thought of that, Thanks. Trying below.


> If you run gdb on the core file, can you determine what function the bad
> instruction is in?

host=686:
        cc -O2 -fno-strict-aliasing -march=i586 -g   -c who.c
        cc -O2 -fno-strict-aliasing -march=i586 -g    -o who who.o 
        mv who /host/lapn/tmp/who
586:
        /tmp/who
                Illegal instruction
        gdb /tmp/who
        run
                Starting program: /tmp/who 
                Program received signal SIGILL, Illegal instruction.
                0x08048a5a in _start1 ()
        (gdb) backtrace
                #0  0x08048a5a in _start1 ()
                #1  0x08048a18 in _start ()
                #2  0x2804f960 in dlclose () from /libexec/ld-elf.so.1
                #3  0x00000001 in ?? ()
686:
        change make.conf to     CFLAGS += -march=i586 -g
        Search for crt in Makefile:
                contrib/gccMakefile.in  make clean not supported
                gnu/lib/csu/Makefile 
                lib/csu/i386-elf/Makefile
        cd /usr/src ; make clean
        cd lib/csu/i386-elf ; make install
                install -o root -g wheel  -m 444 crti.o crtn.o gcrt1.o \
                         crt1.o Scrt1.o /usr/lib
        cd /usr/lib ; ls -l crti.o crtn.o gcrt1.o crt1.o Scrt1.o
                -r--r--r--  1 root  wheel  5032 Jul 20 11:42 Scrt1.o
                -r--r--r--  1 root  wheel  4900 Jul 20 11:42 crt1.o
                -r--r--r--  1 root  wheel  1680 Jul 20 11:42 crti.o
                -r--r--r--  1 root  wheel  1636 Jul 20 11:42 crtn.o
                -r--r--r--  1 root  wheel  5117 Jul 20 11:42 gcrt1.o
        cd /usr/src/usr.bin/who ; make
        mv who /host/lapn/tmp/who2
586
        /tmp/who2       # Runs OK
686     
        make.conf CFLAGS += -march=i686 -g
        cd /usr/src/lib/csu/i386-elf
        make clean ; make ; make install
        make.conf CFLAGS += -march=i586 -g
        cd /usr/src/usr.bin/who  ; make clean ; make ; 
        mv who /host/lapn/tmp/who3
586
        /tmp/who3
         gdb /tmp/who3
        (gdb) run
        Starting program: /tmp/who3 

        Program received signal SIGILL, Illegal instruction.
        0x08048a5a in _start1 (cleanup=0x2804f960 <dlclose+432>, argc=1, 
            argv=0xbfbfe37c) at /usr/src/lib/csu/i386-elf/crt1_c.c:75
        75                                      __progname = s + 1;
        (gdb) bt
                #0  0x08048a5a in _start1 (cleanup=0x2804f960 <dlclose+432>, 
argc=1, 
                    argv=0xbfbfe37c) at /usr/src/lib/csu/i386-elf/crt1_c.c:75
                #1  0x08048a18 in _start () at 
/usr/src/lib/csu/i386-elf/crt1_s.S:42
                #2  0x2804f960 in dlclose () from /libexec/ld-elf.so.1
                #3  0x00000001 in ?? ()
686
        make.conf CFLAGS += -march=i686 -g
        cd /usr/src/gnu/lib/csu ; make clean ; make ; make install
        cd /usr/src/usr.bin/who ; make clean ; make
        mv who /host/lapn/tmp/who4
586
        /tmp/who4
        Illegal instruction
        gdb /tmp/who4
        run
        Starting program: /tmp/who4 
        Program received signal SIGILL, Illegal instruction.
        0x08048a5a in _start1 (cleanup=0x2804f960 <dlclose+432>, argc=1, 
            argv=0xbfbfe37c) at /usr/src/lib/csu/i386-elf/crt1_c.c:75
        75                                      __progname = s + 1;
686
        cc -O2 -fno-strict-aliasing -march=i686 -g -v -o who who.o
                Using built-in specs.
                Target: i386-undermydesk-freebsd
                Configured with: FreeBSD/i386 system compiler
                Thread model: posix
                gcc version 4.2.1 20070719  [FreeBSD]
                  /usr/bin/ld --eh-frame-hdr -V -dynamic-linker \
                  /libexec/ld-elf.so.1 -o who /usr/lib/crt1.o /usr/lib/crti.o \
                  /usr/lib/crtbegin.o -L/usr/lib -L/usr/lib who.o -lgcc \
                  --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed \
                  -lgcc_s --no-as-needed /usr/lib/crtend.o /usr/lib/crtn.o
                GNU ld version 2.15 [FreeBSD] 2004-05-23
                  Supported emulations:
                   elf_i386_fbsd

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 ?

        Have seperate FreeBSD subdirs for 3,4,5,6 /usr/lib/crt1.o ?

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

PS I recall there's a FreeBSD tool chain group ?
I can't see a list name in http://lists.freebsd.org/mailman/listinfo
There is freebsd-i386@

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.
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[email protected]"

Reply via email to