Ultrix RISC internal compiler bug
Michael Meissner
meissner at osf.org
Tue Feb 27 12:09:39 AEST 1990
I tried to compile the latest nethack (patch level 7) that I got from
uunet, and ran into the following internal errors when compiling
apply.c, vault.c, and zap.c. I tried various levels of optimization,
and debugging to no avail. I compiled the modules with GCC 1.37 (with
-O, no -g), and it seems to work, but I thought you guys might be
interested.
cc -O1 -g -I../include -c apply.c
ugen: internal : line 538 : eval.p, line 635
illegal size in load/store
make: *** [apply.o] Error 1
...
cc -O1 -g -I../include -c vault.c
ugen: internal : line 328 : eval.p, line 635
illegal size in load/store
make: *** [vault.o] Error 1
...
cc -O1 -g -I../include -c zap.c
ugen: internal : line 1433 : eval.p, line 635
illegal size in load/store
make: *** [zap.o] Error 1
==================== config.h ====================
/* SCCS Id: @(#)config.h 3.0 89/06/23
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
#ifndef CONFIG_H /* make sure the compiler does not see the typedefs twice */
#define CONFIG_H
/*
* Section 1: OS selection.
* Select the version of the OS you are using.
* For "UNIX" select either SYSV or BSD in unixconf.h.
* A "VMS" option is not needed since the VMS C-compiler
* provides it (comment out the default OS option here).
*/
#define UNIX /* delete if no fork(), exec() available */
#ifdef __MSDOS__ /* Turbo C auto-defines __MSDOS__, MSC defines MSDOS */
#define MSDOS /* define for MS-DOS (in case compiler doesn't) */
#else
/* #define MSDOS /* define for MS-DOS and most other micros */
/* DO NOT define for AMIGA - MSDOS will be
* automatically defined at the right place. */
# ifdef AZTEC_C /* Manx 3.6 auto-defines this */
# ifdef MCH_AMIGA /* Manx 3.6 auto-defines this for AMIGA */
# ifndef AMIGA
#define AMIGA /* define for Commodore-Amiga */
# endif /* (Lattice auto-defines AMIGA) */
# endif
# endif
/* #define TOS /* define for Atari 1040ST */
/* #define STUPID /* avoid some complicated expressions if
your C compiler chokes on them */
/* #define STUPID_CPP /* use many small functions instead of macros to
avoid overloading limited preprocessors */
/* #define TERMINFO /* uses terminfo rather than termcap */
/* should be defined for most, but not all, SYSV */
/* in particular, it should NOT be defined for the
* UNIXPC unless you remove the use of the shared
* library in the makefile */
/* #define MINIMAL_TERM /* if a terminal handles highlighting or tabs poorly,
try this define, used in pager.c and termcap.c */
/* #define MACOS /* define for Apple Macintosh */
#endif
#ifdef AMIGA
#define NEED_VARARGS
# ifdef AZTEC_C
# define KR1ED /* Aztec 3.6 needs extra help for defined() */
# endif
#endif
#ifdef MACOS
/* #define KR1ED /* for compilers which can't handle defined() */
/* Lightspeed & Aztec can't handle defined() yet */
/* #define LSC /* for the Lightspeed 3.01p4 C compiler on the Mac */
/* #define AZTEC /* for the Manx Aztec C 3.6c compiler */
#define THINKC4 /* for the Think C 4 compiler */
/* #define MAKEDEFS_C /* uncomment this ONLY while compiling makedefs */
/* #define CUSTOM_IO /* uncomment only while compiling Nethack */
# ifndef MAKEDEFS_C
# ifndef NEED_VARARGS
#define NEED_VARARGS /* if you're using precompiled headers */
# endif
# endif
#define SMALLDATA /* for Mac compilers with 32K global data limit */
#endif
#ifdef KR1ED /* For compilers which cannot handle defined() */
#define defined(x) (-x-1 != -1)
/* Because:
* #define FOO => FOO={} => defined( ) => (-1 != - - 1) => 1
* #define FOO 1 or on command-line -DFOO
* => defined(1) => (-1 != - 1 - 1) => 1
* if FOO isn't defined, FOO=0. But some compilers default to 0 instead of 1
* for -DFOO, oh well.
* => defined(0) => (-1 != - 0 - 1) => 0
*
* But:
* defined("") => (-1 != - "" - 1)
* [which is an unavoidable catastrophe.]
*/
#endif
/*
* Section 2: Some global parameters and filenames.
* Commenting out WIZARD, LOGFILE, or NEWS removes that feature
* from the game; otherwise set the appropriate wizard name.
* LOGFILE and NEWS refer to files in the playground.
*/
#ifndef WIZARD /* allow for compile-time or Makefile changes */
# ifndef KR1ED
#define WIZARD "meissner" /* the person allowed to use the -D option */
# else
#define WIZARD
#define WIZARD_NAME "meissner"
# endif
#endif
#define LOGFILE "logfile" /* larger file for debugging purposes */
#define NEWS "news" /* the file containing the latest hack news */
/*
* If COMPRESS is defined, it should contain the full path name of your
* 'compress' program. Defining ZEROCOMP causes NetHack to do simpler
* zero-run compression internally. Both COMPRESS and ZEROCOMP create
* smaller bones/level/save files, but require additional code and time.
*/
#ifndef MACOS
#define COMPRESS "/usr/ucb/compress" /* path name for 'compress' */
# ifndef COMPRESS
#define ZEROCOMP /* Use only if COMPRESS is not used -- Olaf Seibert */
# endif
#endif
#ifndef MACOS
#define CHDIR /* delete if no chdir() available */
#endif
#ifdef CHDIR
/*
* If you define HACKDIR, then this will be the default playground;
* otherwise it will be the current directory.
*/
#define HACKDIR "/usr/games/lib/nethackdir" /* nethack directory */
/*
* Some system administrators are stupid enough to make Hack suid root
* or suid daemon, where daemon has other powers besides that of reading or
* writing Hack files. In such cases one should be careful with chdir's
* since the user might create files in a directory of his choice.
* Of course SECURE is meaningful only if HACKDIR is defined.
*/
/* #define SECURE /* do setuid(getuid()) after chdir() */
/*
* If it is desirable to limit the number of people that can play Hack
* simultaneously, define HACKDIR, SECURE and MAX_NR_OF_PLAYERS.
* #define MAX_NR_OF_PLAYERS 6
*/
#endif /* CHDIR /**/
/*
* Section 3: Definitions that may vary with system type.
* For example, both schar and uchar should be short ints on
* the AT&T 3B2/3B5/etc. family.
*/
/*
* Uncomment the following line if your compiler doesn't understand the
* 'void' type (and thus would give all sorts of compile errors without
* this definition).
*/
/* #define void int /* define if no "void" data type. */
#include "tradstdc.h"
/*
* type schar: small signed integers (8 bits suffice) (eg. TOS)
*
* typedef char schar;
*
* will do when you have signed characters; otherwise use
*
* typedef short int schar;
*/
#ifdef AZTEC
#define schar char
#else
typedef signed char schar;
#endif
/*
* type uchar: small unsigned integers (8 bits suffice - but 7 bits do not)
*
* typedef unsigned char uchar;
*
* will be satisfactory if you have an "unsigned char" type;
* otherwise use
*
* typedef unsigned short int uchar;
*/
typedef unsigned char uchar;
/*
* Various structures have the option of using bitfields to save space.
* If your C compiler handles bitfields well (e.g., it can initialize structs
* containing bitfields), you can define BITFIELDS. Otherwise, the game will
* allocate a separate character for each bitfield. (The bitfields used never
* have more than 7 bits, and most are only 1 bit.)
*/
#define BITFIELDS /* Good bitfield handling */
/*
* Section 4: THE FUN STUFF!!!
*
* Conditional compilation of special options are controlled here.
* If you define the following flags, you will add not only to the
* complexity of the game but also to the size of the load module.
*/
/* game features */
#define POLYSELF /* Polymorph self code by Ken Arromdee */
#define THEOLOGY /* Smarter gods - The Unknown Hacker */
#define SOUNDS /* Add more life to the dungeon */
#define KICK /* Allow kicking things besides doors -Izchak Miller */
/* dungeon features */
#define THRONES /* Thrones and Courts by M. Stephenson */
#define FOUNTAINS /* Fountain code by SRT (+ GAN + EB) */
#define SINKS /* Kitchen sinks - Janet Walz */
#define ALTARS /* Sacrifice sites - Jean-Christophe Collet */
/* dungeon levels */
#define WALLIFIED_MAZE /* Fancy mazes - Jean-Christophe Collet */
#define REINCARNATION /* Rogue-like levels */
#define STRONGHOLD /* Challenging special levels - Jean-Christophe Collet*/
/* monsters & objects */
#define ORACLE /* Include another source of information */
#define MEDUSA /* Mirrors and the Medusa by Richard P. Hughey */
#define KOPS /* Keystone Kops by Scott R. Turner */
#define ARMY /* Soldiers, barracks by Steve Creps */
#define WORM /* Long worms */
#define GOLEMS /* Golems, by KAA */
#define INFERNO /* Demons & Demonlords */
#ifdef INFERNO
#define SEDUCE /* Succubi/incubi additions, by KAA, suggested by IM */
#endif
#define TOLKIEN /* More varieties of objects and monsters */
#define PROBING /* Wand of probing code by Gil Neiger */
#define WALKIES /* Leash code by M. Stephenson */
#define SHIRT /* Hawaiian shirt code by Steve Linhart */
#define MUSIC /* Musical instruments - Jean-Christophe Collet */
#define TUTTI_FRUTTI /* Fruits as in Rogue, but which work... -KAA */
#define SPELLS /* Spell casting by M. Stephenson */
#define NAMED_ITEMS /* Special named items handling */
/* difficulty */
#define ELBERETH /* Allow for disabling the E word - Mike 3point */
#define EXPLORE_MODE /* Allow non-scoring play with additional powers */
#define HARD /* Enhanced wizard code by M. Stephenson */
/* I/O */
#define REDO /* support for redoing last command - DGK */
#define COM_COMPL /* Command line completion by John S. Bien */
#ifndef AMIGA
#define CLIPPING /* allow smaller screens -- ERS */
#endif
#ifdef REDO
#define DOAGAIN '\001' /* The "redo" key used in tty.c and cmd.c */
#endif
#define EXP_ON_BOTL /* Show experience on bottom line */
#define SCORE_ON_BOTL /* added by Gary Erickson (erickson at ucivax) */
#include "global.h" /* Define everything else according to choices above */
#endif /* CONFIG_H /**/
==================== unixconf.h ====================
/* SCCS Id: @(#)unixconf.h 3.0 88/07/21
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
#ifdef UNIX
#ifndef UNIXCONF_H
#define UNIXCONF_H
/*
* Some include files are in a different place under SYSV
* BSD SYSV
* <sys/time.h> <time.h>
* <sgtty.h> <termio.h>
*
* Some routines are called differently
* index strchr
* rindex strrchr
*
*/
/* define one of the following */
/* #define BSD /* define for 4.n BSD */
/* also for relatives like SunOS and DG/UX */
#define ULTRIX /* define for Ultrix v3.0 or higher (but not lower) */
/* Use BSD for < v3.0 */
/* "ULTRIX" not to be confused with "ultrix" */
/* #define SYSV /* define for System V */
/* #define HPUX /* Hewlett-Packard's Unix, version 6.5 or higher */
/* use SYSV for < v6.5 */
/* define any of the following that are appropriate */
#define NETWORK /* if running on a networked system */
/* e.g. Suns sharing a playground through NFS */
/* #define GENIX /* Yet Another Unix Clone */
/* #define HISX /* Bull Unix for XPS Machines */
/* #define UNIXPC /* use in addition to SYSV for AT&T 7300/3B1 */
/* also note that the stock cpp qualifies as a
STUPID_CPP for config.h */
/* #define PYRAMID_BUG /* avoid a bug on the Pyramid */
/* #define APOLLO /* same for the Apollo */
/* #define BSD_43_BUG /* for real 4.3BSD cc's without schain botch fix */
/* #define MICROPORT_BUG /* problems with large arrays in structs */
/* #define MICROPORT_286_BUG /* Changes needed in termcap.c to get it to
run with Microport Sys V/AT version 2.4.
By Jay Maynard */
/* #define RANDOM /* if neither random/srandom nor lrand48/srand48
is available from your system */
/* #define TEXTCOLOR /* Use System V r3.2 terminfo color support */
/*
* The next two defines are intended mainly for the Andrew File System,
* which does not allow hard links. If NO_FILE_LINKS is defined, lock files
* will be created in LOCKDIR using open() instead of in the playground using
* link().
* Ralf Brown, 7/26/89 (from v2.3 hack of 10/10/88)
*/
/* #define NO_FILE_LINKS /* if no hard links */
/* #define LOCKDIR "/usr/games/lib/nethackdir" /* where to put locks */
/*
* Define DEF_PAGER as your default pager, e.g. "/bin/cat" or "/usr/ucb/more"
* If defined, it can be overridden by the environment variable PAGER.
* Hack will use its internal pager if DEF_PAGER is not defined.
* (This might be preferable for security reasons.)
* #define DEF_PAGER ".../mydir/mypager"
*/
/*
* If you define MAIL, then the player will be notified of new mail
* when it arrives. If you also define DEF_MAILREADER then this will
* be the default mail reader, and can be overridden by the environment
* variable MAILREADER; otherwise an internal pager will be used.
* A stat system call is done on the mailbox every MAILCKFREQ moves.
*/
#define MAIL /* Deliver mail during the game */
/* The Andrew Message System does mail a little differently from normal
* UNIX. Mail is deposited in the user's own directory in ~/Mailbox
* (another directory). MAILBOX is the element that will be added on to
* the user's home directory path to generate the Mailbox path - just in
* case other Andrew sites do it differently from CMU.
*
* dan lovinger
* dl2n+ at andrew.cmu.edu (dec 19 1989)
*/
/* #define AMS /* use Andrew message system for mail */
/* NO_MAILREADER is for kerberos authentcating filesystems where it is
* essentially impossible to securely exec child proccesses, like mail
* readers, when the game is running under a special token.
*
* dan
*/
/* #define NO_MAILREADER /* have mail daemon just tell player of mail */
#ifdef MAIL
# if defined(BSD) || defined(ULTRIX)
# ifdef AMS
#define AMS_MAILBOX "/Mailbox"
# else
#define DEF_MAILREADER "/usr/ucb/Mail"
# endif
#else
# if defined(SYSV) || defined(DGUX) || defined(HPUX)
# ifdef M_XENIX
#define DEF_MAILREADER "/usr/bin/mail"
# else
#define DEF_MAILREADER "/usr/bin/mailx"
# endif
# else
#define DEF_MAILREADER "/bin/mail"
# endif
#endif
#define MAILCKFREQ 50
#endif /* MAIL */
#ifdef COMPRESS
/* Some implementations of compress need a 'quiet' option.
* If you've got one of these versions, put -q here.
* You can also include any other strange options your compress needs.
* If you have a normal compress, just leave it commented out.
*/
/* #define COMPRESS_OPTIONS "-q" /* */
#endif
#define FCMASK 0660 /* file creation mask */
/*
* The remainder of the file should not need to be changed.
*/
/*
* BSD/ULTRIX systems are normally the only ones that can suspend processes.
* Suspending NetHack processes cleanly should be easy to add to other systems
* that have SIGTSTP. Currently the only such system known to work is HPUX;
* other systems will probably require tweaks to unixtty.c and ioctl.c.
*/
#if defined(BSD) || defined(ULTRIX) || defined (HPUX)
#define SUSPEND /* let ^Z suspend the game */
#endif
#if defined(BSD) || defined(ULTRIX)
#include <sys/time.h>
#else
#include <time.h>
#endif
#define HLOCK "perm" /* an empty file used for locking purposes */
#define LLOCK "safelock" /* link to previous */
#ifndef REDO
#define Getchar getchar
#else
#define tgetch getchar
#endif
#define SHELL /* do not delete the '!' command */
#include "system.h"
#if defined(BSD) || defined(ULTRIX)
# ifndef DGUX
#define memcpy(d, s, n) bcopy(s, d, n)
#define memcmp(s1, s2, n) bcmp(s2, s1, n)
# endif
#else /* therefore SYSV */
#define index strchr
#define rindex strrchr
#endif
/* Use the high quality random number routines. */
#if defined(BSD) || defined(ULTRIX) || defined(RANDOM)
#define Rand() random()
#define Srand(seed) srandom(seed)
#else
#define Rand() lrand48()
#define Srand(seed) srand48(seed)
#endif
#ifdef hc /* older versions of the MetaWare High-C compiler define this */
# ifdef __HC__
# undef __HC__
# endif
# define __HC__ hc
# undef hc
#endif
#endif /* UNIXCONF_H /* */
#endif /* UNIX /* */
--
Michael Meissner email: meissner at osf.org phone: 617-621-8861
Open Software Foundation, 11 Cambridge Center, Cambridge, MA
Catproof is an oxymoron, Childproof is nearly so
More information about the Comp.unix.ultrix
mailing list