Skip site navigation (1)Skip section navigation (2)
Date:      12 Apr 2003 09:06:57 -0000
From:      Dave <friend@vortex4.net>
To:        FreeBSD-gnats-submit@freebsd.org
Cc:        alpha@freebsd.org
Subject:   -march=pca56 blows up nethack34-nox11
Message-ID:  <20030412090657.40307.qmail@frane.vortex4.net>

next in thread | raw e-mail | index | archive | help

>Submitter-Id:	current-users
>Originator:	Dave <friend@vortex4.net>
>Organization:	vortex4.net
>Confidential:	no 
>Synopsis:	-march=pca56 blows up nethack34-nox11
>Severity:	non-critical
>Priority:	low
>Category:	ports
>Class:		sw-bug
>Release:	FreeBSD 5.0-RELEASE-p6 alpha
>Environment:   
System: FreeBSD frane.vortex4.net 5.0-RELEASE-p6 FreeBSD 5.0-RELEASE-p6 #2: Tue Mar 25 04:13:12 PST 2003 root@frane.vortex4.net:/usr/src/sys/alpha/compile/FRANE alpha

PC164SX Alpha system
cvsup'ed to current
built & installed world with the following options set in /etc/make.conf:

CPUTYPE?=pca56
CFLAGS= -O -pipe
CXXFLAGS+= -fmemoize-lookups -fsave-memoized
MAKE_SHELL?=sh
COPTFLAGS= -O -pipe
WANT_FORCE_OPTIMIZATION_DOWNGRADE=1

Most notably.  Send me mail if you need the rest of my make.conf
the FRANE kernel pretty much GENERIC minus the hardware that isn't in this box.

>Description:

Built the nethack34-nox11 port.  Builds cleanly, appears to run fine until
after the class/race/alignment selection process (or letting the game
choose), at which point the program exits with "illegal instruction".

Posted this problem to alpha@freebsd.org 3/27/2003.  Ran gdb at the promping
of Andrew Gallatin with the following results:

Shall I pick a character's race, role, gender and alignment for you? [ynq] y(no 
debugging symbols found)...                                                     
Program received signal SIGILL, Illegal instruction.                            
0x1201046d4 in intersect ()                                                     
(gdb) bt                                                                        
#0  0x1201046d4 in intersect ()                                                 
#1  0x1201048c4 in split_rects ()                                               
#2  0x120120550 in create_room ()                                               
#3  0x12009c8b8 in makerooms ()                                                 
#4  0x12009deac in makelevel ()                                                 
#5  0x12009f0d0 in mklev ()                                                     
#6  0x120003f34 in newgame ()                                                   
#7  0x12017288c in main ()                                                      
#8  0x120002704 in _start ()                                                    
#9  0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 
#10 0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 
#11 0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 
#12 0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 
#13 0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 
#14 0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 
#15 0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 
#16 0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 #17 0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 
#18 0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 
#19 0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 
#20 0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 
#21 0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 
#22 0x1601c9944 in _rtld_start () from /usr/libexec/ld-elf.so.1                 
---Type <return> to continue, or q <return> to quit---                          
                                                                                
...it goes on like that

(gdb) disassemble 0x1201046d0                                                   
Dump of assembler code for function intersect:                                  
0x120104660 <intersect>:        ldbu    t1,0(a1)                                
0x120104664 <intersect+4>:      sextb   t1,t1                                   
0x120104668 <intersect+8>:      ldbu    t0,2(a0)                                
0x12010466c <intersect+12>:     sextb   t0,t0                                   
0x120104670 <intersect+16>:     cmple   t1,t0,t1                                
0x120104674 <intersect+20>:     beq     t1,0x1201046c0 <intersect+96>           
0x120104678 <intersect+24>:     ldbu    t1,1(a1)                                
0x12010467c <intersect+28>:     sextb   t1,t1                                   
0x120104680 <intersect+32>:     ldbu    t0,3(a0)                                
0x120104684 <intersect+36>:     sextb   t0,t0                                   
0x120104688 <intersect+40>:     cmple   t1,t0,t1                                
0x12010468c <intersect+44>:     beq     t1,0x1201046c0 <intersect+96>           
0x120104690 <intersect+48>:     ldbu    t1,2(a1)                                
0x120104694 <intersect+52>:     sextb   t1,t1                                   
0x120104698 <intersect+56>:     ldbu    t0,0(a0)                                
0x12010469c <intersect+60>:     sextb   t0,t0                                   
0x1201046a0 <intersect+64>:     cmplt   t1,t0,t1                                
0x1201046a4 <intersect+68>:     bne     t1,0x1201046c0 <intersect+96>           
0x1201046a8 <intersect+72>:     ldbu    t1,3(a1)                                
0x1201046ac <intersect+76>:     sextb   t1,t1                                   0x1201046b0 <intersect+80>:     ldbu    t0,1(a0)                                
0x1201046b4 <intersect+84>:     sextb   t0,t0                                   
0x1201046b8 <intersect+88>:     cmplt   t1,t0,t1                                
0x1201046bc <intersect+92>:     beq     t1,0x1201046c8 <intersect+104>          
0x1201046c0 <intersect+96>:     clr     v0                                      
0x1201046c4 <intersect+100>:    ret                                             
0x1201046c8 <intersect+104>:    ldbu    t1,0(a0)                                
0x1201046cc <intersect+108>:    ldbu    t0,0(a1)                                
0x1201046d0 <intersect+112>:    maxsb8  t1,t0,t1                                
0x1201046d4 <intersect+116>:    stb     t1,0(a2)                                
0x1201046d8 <intersect+120>:    ldbu    t2,1(a0)                                
0x1201046dc <intersect+124>:    ldbu    t0,1(a1)                                
0x1201046e0 <intersect+128>:    maxsb8  t2,t0,t4                                
0x1201046e4 <intersect+132>:    stb     t4,1(a2)                                
0x1201046e8 <intersect+136>:    ldbu    t2,2(a1)                                
0x1201046ec <intersect+140>:    ldbu    t0,2(a0)                                
0x1201046f0 <intersect+144>:    minsb8  t2,t0,t2                                
0x1201046f4 <intersect+148>:    stb     t2,2(a2)                                
0x1201046f8 <intersect+152>:    ldbu    t3,3(a1)                                
0x1201046fc <intersect+156>:    ldbu    t0,3(a0)                                
0x120104700 <intersect+160>:    minsb8  t3,t0,t3                                
0x120104704 <intersect+164>:    stb     t3,3(a2)                                0x120104708 <intersect+168>:    sextb   t1,t1                                   
0x12010470c <intersect+172>:    sextb   t2,t2                                   
0x120104710 <intersect+176>:    cmple   t1,t2,t1                                
0x120104714 <intersect+180>:    beq     t1,0x12010472c <intersect+204>          
0x120104718 <intersect+184>:    sextb   t4,t0                                   
0x12010471c <intersect+188>:    sextb   t3,t1                                   
0x120104720 <intersect+192>:    cmple   t0,t1,t0                                
0x120104724 <intersect+196>:    lda     v0,1                                    
0x120104728 <intersect+200>:    bne     t0,0x120104730 <intersect+208>          
0x12010472c <intersect+204>:    clr     v0                                      
0x120104730 <intersect+208>:    ret                                             
0x120104734 <intersect+212>:    unop                                            
0x120104738 <intersect+216>:    nop                                             
0x12010473c <intersect+220>:    unop                                            
End of assembler dump.                                                          

At Andrew's prompting, I compiled and ran the following program on my system:

> #include <sys/cdefs.h>                                                        
> #include <sys/types.h>                                                        
> #include <stdio.h>                                                            
> #include <machine/bwx.h>                                                      
> #include <machine/alpha_cpu.h>                                                
>                                                                               
> main()                                                                        
> {                                                                             
>         u_int8_t byte;                                                        
>         u_int16_t word;                                                       
>         u_int32_t lng;                                                        
>         u_int64_t hack = 0x123456789abcdef;                                   
>         u_int64_t va = ((u_int64_t)&hack)+4UL;                                
>                                                                               >         printf("implver = 0x%lx\n", alpha_implver());                         
>         printf("amask = 0x%lx\n", alpha_amask(-1L));                          
>         printf ("0x%lx\n", hack);                                             
>         byte = ldbu(va);                                                      
>         printf ("0x%x\n", byte);                                              
>         stb(va, 0xff);                                                        
>         printf ("0x%lx\n", hack);                                             
> }                                                                             
>                                                                               
                                                                                with the following results:

$ cc  -O -pipe -mcpu=pca56 test.c                                               
$ ./a.out                                                                       
implver = 0x1                                                                   
amask = 0xfffffffffffffffe                                                      
0x123456789abcdef                                                               
0x67                                                                            
0x12345ff89abcdef                                                               

Andrew's guess was that nethack was trapping on a BWX instruction, but
indicated that from the program output my box could handle those
instructions.  Here is my dmesg output, if that's at all helpful:

Copyright (c) 1992-2003 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD 5.0-RELEASE-p6 #2: Tue Mar 25 04:13:12 PST 2003
    root@frane.vortex4.net:/usr/src/sys/alpha/compile/FRANE
Preloaded elf kernel "/boot/kernel/kernel" at 0xfffffc000062c000.
EB164
Digital AlphaPC 164SX 533 MHz, 531MHz
8192 byte page size, 1 processor.
CPU: PCA56 (21164PC) major=9 minor=2 extensions=0x1<BWX>
OSF PAL rev: 0x1000600020116
real memory  = 534921216 (510 MB)
avail memory = 514654208 (490 MB)
Initializing GEOMetry subsystem
cia0: <2117x Core Logic chipset>  
cia0: Pyxis, pass 1
cia0: extended capabilities: 1<BWEN>    
pcib0: <2117x PCI host bus adapter> on cia0
pci0: <PCI bus> on pcib0
sym0: <875> port 0x10000-0x100ff mem 0x82040000-0x82040fff,0x82042000-0x820420ff
 irq 9 at device 5.0 on pci0
sym0: Tekram NVRAM, ID 7, Fast-20, SE, parity checking
sym0: interrupting at CIA irq 9  
isab0: <PCI-ISA bridge> at device 8.0 on pci0
isa0: <ISA bus> on isab0
pci0: <mass storage, ATA> at device 8.1 (no driver attached)
pci0: <mass storage, ATA> at device 8.2 (no driver attached)
pci0: <serial bus, USB> at device 8.3 (no driver attached)       
xl0: <3Com 3c905B-TX Fast Etherlink XL> port 0x10100-0x1017f mem 0x82042100-0x82
04217f irq 8 at device 9.0 on pci0   
xl0: interrupting at CIA irq 8   
xl0: Ethernet address: 00:50:da:80:2c:11
miibus0: <MII bus> on xl0   
xlphy0: <3Com internal media interface> on miibus0
xlphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
atkbdc0: <Keyboard controller (i8042)> at port 0x64,0x60 on isa0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
atkbd0: interrupting at ISA irq 1
fdc0: <Enhanced floppy controller (i82077, NE72065 or clone)> at port 0x3f7,0x3f
0-0x3f5 irq 6 drq 2 on isa0
fdc0: interrupting at ISA irq 6
mcclock0: <MC146818A real time clock> at port 0x70-0x71 on isa0
sio0 at port 0x3f8-0x3ff irq 4 on isa0
sio0: type 16550A, console
sio0: interrupting at ISA irq 4  
sio1 at port 0x2f8-0x2ff irq 3 on isa0       
sio1: type 16550A
sio1: interrupting at ISA irq 3
Timecounter "i8254"  frequency 1193182 Hz
Timecounter "alpha"  frequency 533159245 Hz
Timecounters tick every 0.976 msec
Waiting 10 seconds for SCSI devices to settle
da0 at sym0 bus 0 target 0 lun 0 
da0: <QUANTUM ATLAS IV 9 WLS 0808> Fixed Direct Access SCSI-3 device
da0: 40.000MB/s transfers (20.000MHz, offset 16, 16bit), Tagged Queueing Enabled
da0: 8683MB (17783249 512 byte sectors: 255H 63S/T 1106C)
Mounting root from ufs:/dev/da0a

It is with a heavy heart that I mark this low/non-critical.  It's nethack, 
after all :>

>How-To-Repeat:

Problem is consistent on each execution of nethack built with the -march=pca56
flag

>Fix:

pkg_delete nethack-nox11-3.4.0_1
edit make.conf, comment out CPUTYPE?=pca56
cd /usr/ports/games/nethack34-nox11 ; make all install clean
without -mcpu=pca56, the game runs without problems



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030412090657.40307.qmail>