Thread View: gnu.gcc.bug
1 messages
1 total messages
Started by David Edelsohn
Tue, 25 Aug 1992 16:07
gcc-2.2.2 fatal signal 11 bug report
Author: David Edelsohn
Date: Tue, 25 Aug 1992 16:07
Date: Tue, 25 Aug 1992 16:07
1072 lines
28186 bytes
28186 bytes
The appended source code causes gcc-2.2.2 to crash with an internal
compiler error -- fatal signal 11 from cc1. Gcc configured for both a Risc
System/6000 running AIX 3.1.7 and a Sun Sparcstation running SunOS 3.1.2
demonstrate this bug. The appended code is a trimmed version, with include
files prepended, appropriate for an RS/6000 but a Sparcstation will produce
the same results with additional warnings.
David
% gcc -v bad.c
Reading specs from /contrib/lib/gcc-lib/rs6000/2.2/specs
gcc version 2.2
/contrib/lib/gcc-lib/rs6000/2.2/cpp -lang-c -v -undef -D__GNUC__=2 -D_IBMR2 -D_AIX -D___IBMR2__ -D___AIX__ -D___IBMR2 -D___AIX -D__CHAR_UNSIGNED__ bad.c /tmp/cckcICkR.i
GNU CPP version 2.2
/contrib/lib/gcc-lib/rs6000/2.2/cc1 /tmp/cckcICkR.i -quiet -dumpbase bad.c -version -o /tmp/cckcICkR.s
GNU C version 2.2.2 compiled by GNU C version 2.2.
gcc: Internal compiler error: program cc1 got fatal signal 11
-----bad.c-----
typedef char * va_list;
typedef int ptrdiff_t;
typedef unsigned short wchar_t;
typedef long fpos_t;
typedef long time_t;
typedef int clock_t;
typedef unsigned long size_t;
typedef unsigned char uchar_t;
typedef unsigned short ushort_t;
typedef unsigned int uint_t;
typedef unsigned long ulong_t;
typedef struct { int r[1]; } * physadr_t;
typedef long level_t;
typedef long daddr_t;
typedef char * caddr_t;
typedef ulong_t ino_t;
typedef short cnt_t;
typedef ulong_t dev_t;
typedef long chan_t;
typedef long off_t;
typedef long paddr_t;
typedef long key_t;
typedef long timer_t;
typedef short nlink_t;
typedef ulong_t mode_t;
typedef ulong_t uid_t;
typedef ulong_t gid_t;
typedef void * mid_t;
typedef int pid_t;
typedef char slab_t[12];
typedef long mtyp_t;
typedef struct label_t {
struct label_t *prev;
ulong_t iar;
ulong_t stack;
ulong_t toc;
ulong_t cr;
ulong_t intpri;
ulong_t reg[19];
} label_t;
typedef long vmid_t;
typedef ulong_t vmhandle_t;
typedef struct vmaddr_t {
vmhandle_t srval;
caddr_t offset;
} vmaddr_t;
typedef struct adspace_t{
ulong_t alloc;
vmhandle_t srval[16];
} adspace_t;
typedef struct sigset_t {
unsigned long losigs;
unsigned long hisigs;
} sigset_t;
typedef uchar_t uchar;
typedef ushort_t ushort;
typedef uint_t uint;
typedef ulong_t ulong;
typedef physadr_t physadr;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef struct _quad { long val[2]; } quad;
typedef long swblk_t;
struct sigset {
unsigned long losigs;
unsigned long hisigs;
};
struct fsid {
long val[2];
};
typedef struct fsid fsid_t;
struct fid {
uint_t fid_len;
char fid_data[( 32 - sizeof(fsid_t) - sizeof(uint_t)) ];
};
typedef struct fid fid_t;
struct fileid {
uint_t fid_len;
ino_t fid_ino;
uint_t fid_gen;
char fid_x[( 32 - sizeof(fsid_t) - sizeof(uint_t)) - (sizeof(ino_t) + 2) - sizeof(uint_t)];
};
struct fhandle {
char x[ 32 ];
};
struct filehandle {
fsid_t fh_fsid;
struct fileid fh_fid;
};
typedef struct fhandle fhandle_t;
struct unique_id {
unsigned long word1;
unsigned long word2;
unsigned long word3;
unsigned long word4;
};
typedef struct unique_id unique_id_t;
typedef struct coldesc {
short cd_stroff;
short cd_repoff;
short cd_cval;
short cd_cuniq;
} coldesc_t;
typedef struct collation_table {
short lc_version;
short lc_length;
char *lc_locale_name;
int len_collate;
short *lc_collate;
int len_coluniq;
short *lc_coluniq;
int len_coldesc;
coldesc_t *lc_coldesc;
int len_strings;
wchar_t *lc_strings;
int high_cvalue;
} col_t;
typedef struct char_classification_table {
short lc_version;
short lc_length;
short lc_code_type;
short mb_cur_max;
short mb_cur_min;
short lc_dsp_width;
char *lc_locale_name;
int len_caseconv;
wchar_t *lc_caseconv;
int len_ctype;
unsigned short *lc_ctype;
} ctype_t;
typedef struct lc_monetary_table {
short lc_version;
short lc_length;
char *lc_locale_name;
char *int_curr_symbol;
char *currency_symbol;
char *mon_decimal_point;
char *mon_thousands_sep;
char *mon_grouping;
char *positive_sign;
char *negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
} mon_t;
typedef struct numeric_table {
short lc_version;
short lc_length;
char *lc_locale_name;
char *decimal_point;
char *thousands_sep;
char *grouping;
} num_t;
typedef struct lc_messages_table {
short lc_version;
short lc_length;
char *lc_locale_name;
char *messages;
char *yes_string;
char *no_string;
} msg_t;
typedef struct lc_time_table {
short lc_version;
short lc_length;
char *lc_locale_name;
char *t_fmt;
char *d_fmt;
char *nlldate;
char *d_t_fmt;
char *abday;
char *day;
char *abmon;
char *mon;
char *misc;
char *tstrs;
char *tunits;
char *year;
char *am_pm;
} tim_t;
typedef struct wchar_mapping_table {
short lc_version;
short lc_length;
char *lc_identifier;
} map_t;
typedef struct localeinfo_table {
char lc_mag0, lc_mag1;
short lc_version;
short lc_code_type;
short lc_length;
col_t *lc_coltbl;
ctype_t *lc_chrtbl;
mon_t *lc_montbl;
num_t *lc_numtbl;
tim_t *lc_timtbl;
msg_t *lc_msgtbl;
map_t *lc_maptbl;
} loc_t;
extern loc_t *_locp;
typedef unsigned short NLchar;
extern char
*NLstrcpy(),
*NLstrncpy(),
*NLstrcat(),
*NLstrncat(),
*NLstrchr(),
*NLstrrchr(),
*NLstrpbrk(),
*NLstrtok();
extern NLchar
*NCstrcpy(),
*NCstrncpy(),
*NCstrcat(),
*NCstrncat(),
*NCstrchr(),
*NCstrrchr(),
*NCstrpbrk(),
*NCstrtok();
extern NLchar *_NCgetbuf();
extern void free(void *ptr);
extern char _NLflattab[];
extern unsigned _NLflattsize;
extern char _NLesctab[][2];
extern unsigned _NLesctsize;
extern unsigned _NLunesctsize;
extern struct NLescdata {
unsigned char *key;
NLchar value;
} _NLunesctab[];
extern int isascii(int c);
extern int toascii(int c);
extern int errno;
extern int errno;
extern char *setlocale(int category, const char *locale);
extern struct lconv *localeconv(void);
typedef struct lconv {
char *decimal_point;
char *thousands_sep;
char *grouping;
char *int_curr_symbol;
char *currency_symbol;
char *mon_decimal_point;
char *mon_thousands_sep;
char *mon_grouping;
char *positive_sign;
char *negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
} lconv;
extern unsigned _DBLINF[2];
extern double acos(double x);
extern double asin(double x);
extern double atan(double x);
extern double atan2(double x,double y);
extern double ceil(double x);
extern double cos(double x);
extern double cosh(double x);
extern double exp(double x);
extern double fabs(double x);
extern double floor(double x);
extern double fmod(double x, double y);
extern double frexp(double value, int *exp);
extern double ldexp(double x, int exp);
extern double log(double x);
extern double log10(double x);
extern double modf(double value, double *iptr);
extern double pow(double x, double y);
extern double sin(double x);
extern double sinh(double x);
extern double sqrt(double x);
extern double tan(double x);
extern double tanh(double x);
extern int signgam;
extern unsigned int SFPMAX;
extern double erf(double x);
extern double erfc(double x);
extern int isnan(double x);
extern double hypot(double x,double y);
extern double j0(double x);
extern double j1(double x);
extern double jn(int n, double x);
extern double gamma(double x);
extern double lgamma(double x);
extern double y0(double x);
extern double y1(double x);
extern double yn(int n, double x);
typedef struct div_t {
int quot;
int rem; } div_t;
typedef struct ldiv_t {
long int quot;
long int rem; } ldiv_t;
extern double atof(const char *nptr);
extern int atoi(const char *nptr);
extern long int atol(const char *nptr);
extern double strtod(const char *nptr, char * *endptr);
extern long int strtol(const char *nptr, char * *endptr, int base);
extern unsigned long int strtoul(const char *nptr, char * *endptr, int base);
extern int rand(void);
extern void srand(unsigned int seed);
extern void *calloc(size_t nmemb, size_t size);
extern void free(void *ptr);
extern void *malloc(size_t size);
extern void *realloc(void *ptr, size_t size);
extern void abort(void);
extern int atexit(void (*func)(void));
extern void exit(int status);
extern char *getenv(const char *name);
extern int system(const char *string);
extern void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int(*compar)());
extern void qsort(void *base, size_t nmemb, size_t size, int(*compar)());
extern int abs(int j);
extern struct div_t div(int numer, int denom);
extern long int labs(long int j);
extern struct ldiv_t ldiv(long int numer, long int denom);
extern int mblen(const char *s, size_t n);
extern int mbtowc(wchar_t *pwc, const char *s, size_t n);
extern int wctomb(char *s, wchar_t wchar);
extern size_t mbstowcs(wchar_t *pwcs, const char *s,size_t n);
extern size_t wcstombs(char *s, const wchar_t *pwcs,size_t n);
float atoff();
char *ecvt();
char *fcvt();
char *gcvt();
float strtof();
void imul_dbl();
void umul_dbl();
struct dbl_hypot {
double x, y;
};
extern double acosh(double x);
extern double asinh(double x);
extern double atanh(double x);
extern double cabs(struct dbl_hypot p_dbl);
extern double cbrt(double x);
extern double copysign (double x, double y);
extern double drem(double x, double y);
extern double exp__E(double x, double y);
extern double expm1(double x);
extern double log1p(double x);
extern double log__L(double x);
extern double nearest(double x);
extern double rint(double x);
extern double scalb(double x, int n);
extern double trunc(double x);
extern int itrunc(double x);
extern int unordered(double x, double y);
extern unsigned uitrunc(double x);
extern int dtoi(double x);
extern double logb();
extern int ilogb();
extern double nextafter();
extern int class();
extern int finite();
struct exception {
int type;
char *name;
double arg1;
double arg2;
double retval;
};
typedef int jmp_buf[64 ];
extern void longjmp(jmp_buf env, int val);
extern int setjmp(jmp_buf env);
typedef int sigjmp_buf[64 ];
extern int sigsetjmp(sigjmp_buf env, int savemask);
extern void siglongjmp(sigjmp_buf env, int val);
extern void (*signal(int sig, void (*func)(int)))(int);
extern int raise(int sig);
typedef volatile int sig_atomic_t;
struct sigaction {
void (*sa_handler)(int);
sigset_t sa_mask;
int sa_flags;
};
extern int kill(pid_t pid, int sig);
extern int sigaction(int sig, struct sigaction *act, struct sigaction *oact);
extern int sigprocmask(int how, sigset_t *set, sigset_t *oset);
extern int sigsuspend(sigset_t *set);
extern int sigemptyset(sigset_t *set);
extern int sigfillset(sigset_t *set);
extern int sigaddset(sigset_t *set, int signo);
extern int sigdelset(sigset_t *set, int signo);
extern int sigismember(sigset_t *set, int signo);
extern int sigpending(sigset_t *set);
struct mstsave {
struct mstsave *prev;
label_t *kjmpbuf;
char *stackfix;
char intpri;
char backt;
char rsvd[2];
pid_t curid;
int excp_type;
ulong_t iar;
ulong_t msr;
ulong_t cr;
ulong_t lr;
ulong_t ctr;
ulong_t xer;
ulong_t mq;
ulong_t tid;
ulong_t fpscr;
char fpeu;
char pad[3];
ulong_t except[5];
void *bus;
ulong_t o_iar;
ulong_t o_toc;
ulong_t o_arg1;
ulong_t excbranch;
ulong_t cachealign[9];
adspace_t as;
ulong_t gpr[32 ];
double fpr[32 ];
};
struct jmpbuf {
struct mstsave jmp_context;
};
extern int sigstack();
struct sigstack {
char *ss_sp;
int ss_onstack;
};
struct sigcontext {
int sc_onstack;
sigset_t sc_mask;
int u_error;
struct jmpbuf sc_jmpbuf;
};
struct sigvec {
void (*sv_handler)(int);
int sv_mask;
int sv_flags;
};
void va_end (va_list);
typedef struct {
unsigned char *_ptr;
int _cnt;
unsigned char *_base;
unsigned char *_bufendp;
short _flag;
short _file;
int _unused[3];
} FILE;
extern FILE _iob[ 20 ];
extern size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
extern size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
extern int _filbuf(FILE *iop);
extern int _flsbuf(unsigned char c, FILE *iop);
extern int ferror(FILE *stream);
extern int feof(FILE *stream);
extern void clearerr(FILE * stream);
extern int putchar(int c);
extern int getchar(void);
extern int putc(int c, FILE *stream);
extern int getc(FILE *stream);
extern int remove(const char *filename);
extern int rename(const char *old, const char *new);
extern FILE *tmpfile(void);
extern char *tmpnam(char *s);
extern int fclose(FILE *stream);
extern int fflush(FILE *stream);
extern FILE *fopen(const char *filename, const char *mode);
extern FILE *freopen(const char *filename, const char *mode, FILE *stream);
extern void setbuf(FILE *stream, char *buf);
extern int setvbuf(FILE *stream, char *buf, int mode, size_t size);
extern int fprintf(FILE *stream, const char *format, ...);
extern int fscanf(FILE *stream, const char *format, ...);
extern int printf(const char *format, ...);
extern int scanf(const char *format, ...);
extern int sprintf(char *s, const char *format, ...);
extern int sscanf(const char *s, const char *format, ...);
extern int vfprintf(FILE *stream, const char *format, va_list arg);
extern int vprintf(const char *format, va_list arg);
extern int vsprintf(char *s, const char *format, va_list arg);
extern int fgetc(FILE *stream);
extern char *fgets(char *s, int n, FILE *stream);
extern int fputc(int c, FILE *stream);
extern int fputs(const char *s, FILE *stream);
extern char *gets(char *s);
extern int puts(const char *s);
extern int ungetc(int c, FILE *stream);
extern int fgetpos(FILE *stream, fpos_t *pos);
extern int fseek(FILE *stream, long int offset, int whence);
extern int fsetpos(FILE *stream, const fpos_t *pos);
extern long ftell(FILE *stream);
extern void rewind(FILE *stream);
extern void perror(const char *s);
extern int fileno(FILE *stream);
extern FILE *fdopen(int fildes, char *type);
extern int getw(FILE *stream);
extern int putw(int w, FILE *stream);
extern char *tempnam(char*,char*);
extern FILE *popen(char *cmd, char *mode);
extern int pclose(FILE *ptr);
extern char *ctermid(char *);
extern char *cuserid(char *);
extern void *memchr(const void *s, int c, size_t n);
extern void *memcpy(void *s1, const void *s2, size_t n);
extern void *memset(void *s, int c, size_t n);
extern size_t strcspn(const char *s1, const char *s2);
extern size_t strlen(const char *s);
extern size_t strspn(const char *s1, const char *s2);
extern void *memmove(void *s1, const void *s2, size_t n);
extern char *strcpy(char *s1, const char *s2);
extern char *strncpy(char *s1, const char *s2, size_t n);
extern char *strcat(char *s1, const char *s2);
extern char *strncat(char *s1, const char *s2, size_t n);
extern int memcmp(const void *s1, const void *s2,size_t n);
extern int strcmp(const char *s1, const char *s2);
extern int strcoll(const char *s1, const char *s2);
extern int strncmp(const char *s1,const char *s2,size_t n);
extern size_t strxfrm(char *s1, const char *s2, size_t n);
extern int strncollen(const char *, const int );
extern char *strchr(const char *s, int c);
extern char *strpbrk(const char *s1, const char *s2);
extern char *strrchr(const char *s, int c);
extern char *strstr(const char *s1, const char *s2);
extern char *strtok(char *s1, const char *s2);
extern char *strerror(int errnum);
extern void *memccpy(void *target, const void *source, int c, size_t n);
extern char *index(const char *s, int c);
extern char *rindex(const char *s, int c);
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
extern clock_t clock(void);
extern double difftime(time_t time1, time_t time0);
extern time_t mktime(struct tm *timeptr);
extern time_t time(time_t *timer);
extern char *asctime(const struct tm *timeptr);
extern char *ctime(const time_t *timer);
extern struct tm *gmtime(const time_t *timer);
extern struct tm *localtime(const time_t *timer);
extern size_t strftime(char *s, size_t maxsize, const char *format, const struct tm *timeptr);
extern char *tzname[];
extern void tzset(void);
extern long timezone;
extern int daylight;
extern unsigned char *NLctime(long *t);
extern unsigned char *NLasctime(struct tm *t);
extern char *NLstrtime(char *s, size_t maxsize, const char *format, const struct tm *timeptr);
typedef unsigned char UByte;
typedef unsigned short UShort;
typedef unsigned long ULong;
typedef long AInt;
typedef unsigned long UAInt;
typedef int Bool;
typedef UAInt Hash;
typedef size_t Length;
typedef ULong Offset;
typedef ULong Millisec;
typedef void *Pointer;
typedef const void *ConstPointer;
typedef char *String;
typedef char *IOMode;
typedef float SFloat;
typedef double DFloat;
typedef long double LongDouble;
typedef double MostAlignedType;
extern int osRun (String);
extern Millisec osCpuTime (void);
extern String osDate (void);
extern String osGetenv (String envar);
extern String osExtSep;
extern String osDirSep;
extern String osPathSep;
extern String osCurDirName;
extern String osDefaultExecutePath;
extern String osDefaultLibraryPath;
extern String osDefaultIncludePath;
extern String osExecutePath (void);
extern String osLibraryPath (void);
extern String osIncludePath (void);
extern void osFnameParse (String* partv, String buffer,
String fname, String relativeTo);
extern String osFnameUnparse (String dir, String name, String type,
String buffer);
extern Length osFnameLength (String dir, String name, String type);
extern IOMode osIoRdMode;
extern IOMode osIoWrMode;
extern IOMode osIoApMode;
extern IOMode osIoRbMode;
extern IOMode osIoWbMode;
extern IOMode osIoAbMode;
extern IOMode osIoRubMode;
extern IOMode osIoWubMode;
extern IOMode osIoAubMode;
extern int osFileRemove (String fn);
extern Hash osFileHash (String fn);
extern Bool osIsInteractive(FILE *);
typedef void (*SignalHandler) (int signal);
extern SignalHandler osSetBreakHandler(SignalHandler);
extern SignalHandler osSetFaultHandler(SignalHandler);
extern SignalHandler osSetLimitHandler(SignalHandler);
extern Pointer osAllocBytes (unsigned align, unsigned long nbytes);
struct osMemMap {
int use;
Pointer lo, hi;
};
extern struct osMemMap *osMemMap(int mask);
enum osCcTag {
OSCC_START,
OSCC_LibPath = OSCC_START,
OSCC_Library,
OSCC_IncPath,
OSCC_Define,
OSCC_Undefine,
OSCC_Optimize,
OSCC_DebugInfo,
OSCC_ProfileInfo,
OSCC_OutputFile,
OSCC_LIMIT
};
struct osCcOption {
enum osCcTag tag;
String arg;
struct osCcOption *next;
};
extern int osCCompileCommand (String buf, int fnc, String *fnv,
struct osCcOption *,
String cmd, String xopts);
extern int osLinkCommand (String buf , int fnc, String *fnv,
struct osCcOption *,
String cmd, String xopts);
struct osObjectRenumber {
char * functionName;
int oldStart, newStart;
int lnoc;
struct {int old, new;} *lnov;
};
extern void osObjectRenumber (String fname, struct osObjectRenumber *);
extern void testSelf (String testName);
extern Bool dbFlag;
extern int findent;
extern int fnewline (FILE *f);
typedef int (*XPutFun) (const char *s, int n);
extern int xprintf (XPutFun, const char *fmt, ...);
extern int vxprintf (XPutFun, const char *fmt, va_list argp);
struct fluidCell {
String scopeName;
int scopeLevel;
Pointer pglobal,
pstack;
long size;
};
typedef struct {
int fluidLevel;
jmp_buf buf;
} JmpBuf;
extern struct fluidCell *fluidStack;
extern int fluidLevel,
fluidLimit,
fluidIncrement;
extern int scopeLevel;
extern struct fluidCell *fluidGrow (void);
extern void fluidUnwind (int toCell, Bool isLongJmp);
extern MostAlignedType* stoAlloc (unsigned code, Length size);
extern void stoFree (Pointer p);
extern void stoGc (void);
extern Length stoSize (Pointer p);
extern MostAlignedType* stoResize (Pointer p, Length size);
extern unsigned stoCode (Pointer p);
extern MostAlignedType* stoRecode (Pointer p, unsigned code);
extern Bool stoIsPointer (Pointer p);
extern void stoAudit (void);
extern void stoShow (void);
extern ULong stoBytesOwn;
extern ULong stoBytesAlloc;
extern ULong stoBytesFree;
extern ULong stoBytesGc;
extern ULong stoPiecesGc[32 ];
typedef MostAlignedType* (*StoErrorFun) (int errnum);
extern StoErrorFun stoSetHandler (StoErrorFun);
extern StoErrorFun stoSetFreeAgain (StoErrorFun);
extern void exitSuccess ();
extern void exitFailure ();
typedef void (*ExitFun) (int status);
extern ExitFun exitSetHandler (ExitFun);
extern Bool exitTrap;
extern void bug (String fmt, ...);
extern ULong _binPrime[];
extern int cielLg (ULong);
typedef struct btree *BTree;
typedef struct btreePart *BTreePart;
typedef Length BTreeKey;
typedef Pointer BTreeElt;
typedef BTreeElt (*BTreeEltFun) (BTreeElt);
typedef BTree (*BTreeAllocFun)(Length nbytes);
typedef void (*BTreeFreeFun) (BTree);
struct btreePart {
BTree branch;
BTreeKey key;
BTreeElt entry;
};
struct btree {
Bool isLeaf;
unsigned short t;
unsigned short nKeys;
struct btreePart part[ 10 ];
};
extern BTree btreeNew (Length t);
extern void btreeFree (BTree);
extern void btreeInsert (BTree*, BTreeKey, BTreeElt);
extern void btreeDelete (BTree*, BTreeKey, BTreeElt *);
extern BTree btreeNewX (Length t, BTreeAllocFun);
extern void btreeFreeX (BTree, BTreeFreeFun);
extern void btreeInsertX (BTree*, BTreeKey, BTreeElt, BTreeAllocFun);
extern void btreeDeleteX (BTree*, BTreeKey, BTreeElt *,BTreeFreeFun);
extern BTree btreeNMap (BTreeEltFun, BTree);
extern BTree btreeSearchEQ (BTree, BTreeKey, int *pIx);
extern BTree btreeSearchGE (BTree, BTreeKey, int *pIx);
extern BTree btreeSearchMin (BTree, int *pIx);
extern BTree btreeSearchMax (BTree, int *pIx);
extern int btreeCheck (BTree);
extern int btreePrint (FILE *, BTree);
static Length fixedSize[] = {
4, 8, 16, 24, 32, 40, 48, 64, 80, 96, 128
};
static UByte fixedSizeFor [ 128 +1];
static UByte fixedSizeIndexFor[ 128 +1];
enum PgKind {
PgFree,
PgBusyFirst,
PgBusyFollow,
PgPgMap,
PgBTree,
PgDLL,
PgForeign
};
typedef char Page[(1L<< 12 ) ];
typedef UByte PgInfo;
typedef UByte QmInfo;
typedef enum PgKind PgKind;
typedef struct PgMem PgMem;
typedef struct Section Section;
typedef struct FxMem FxMem;
typedef struct MxMem MxMem;
static MostAlignedType *stoDefaultError (int errnum);
static StoErrorFun stoError = stoDefaultError;
static StoErrorFun stoFreeAgain = stoDefaultError;
static int stoIsInit = 0;
static char *heapStart,
*heapEnd;
static PgInfo *pgMap;
static Length pgMapSize;
static Length pgMapUses;
static PgMem *freePages;
static FxMem *fixedPieces[ (sizeof(fixedSize)/sizeof(fixedSize[0])) ];
static BTree mixedPieces;
static MxMem *mixedFrontier;
ULong stoBytesOwn;
ULong stoBytesAlloc;
ULong stoBytesFree;
ULong stoBytesGc;
ULong stoPiecesGc[32 ];
struct Section {
short pgCount;
short qmSize;
UByte qmSizeIndex;
UByte isFixed;
Length qmCount;
Pointer data;
QmInfo info[ 10 ];
};
static Length
sectQmCount(Length pageCount, Length qmSize)
{
return (pageCount * (1L<< 12 ) - (sizeof(Section) + 0 * sizeof( QmInfo) - 10 * sizeof( QmInfo)) )/(qmSize + sizeof(QmInfo));
}
static Section *
sectPrepare(Page *p, Length npages, Length sz, int isFixed)
{
Section *x = (Section *) p;
Length i, nq;
x->pgCount = npages;
x->qmSize = sz;
x->qmSizeIndex = fixedSizeIndexFor[sz <= 128 ? sz : 0];
x->isFixed = isFixed;
x->qmCount = nq = sectQmCount(npages, sz);
x->data = (Pointer)((char *) p + npages * (1L<< 12 ) -nq * sz);
x->info[0] = ( 0x40 ) ;
if (isFixed)
for (i = 1; i < nq; i++)
x->info[i] = ( 0x40 ) ;
else
for (i = 1; i < nq; i++)
x->info[i] = ( 0x00 ) ;
return x;
}
static Section *
_sectFor(Pointer p)
{
Length pi;
if (!isInHeap(p)) goto error;
pi = pgNo(p);
if (pgMap[pi] == PgBusyFirst)
return (Section *)((Page *) heapStart + pi);
if (pgMap[pi] != PgBusyFollow)
goto error;
while (pgMap[pi] == PgBusyFollow)
pi--;
if (pgMap[pi] == PgBusyFirst)
return (Section *)((Page *) heapStart + pi);
error: (*stoError)(2 );
{printf("Not supposed to reach line %d in file: %s\n",359, "store.c"); return 0;} ;
}
===============================================================================
David Edelsohn T.J. Watson Research Center
c$dje@watson.ibm.com P.O. Box 218
+1 914 945 3011 (Tieline 862) Yorktown Heights, NY 10598
"If G-D had wanted us to vote, he would have given us candidates" -- Jay Leno
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads