191586Smarkm/* $NetBSD: externs1.h,v 1.13 2002/01/18 21:01:39 thorpej Exp $ */ 212099Sjoerg 312099Sjoerg/* 412099Sjoerg * Copyright (c) 1994, 1995 Jochen Pohl 512099Sjoerg * All Rights Reserved. 612099Sjoerg * 712099Sjoerg * Redistribution and use in source and binary forms, with or without 812099Sjoerg * modification, are permitted provided that the following conditions 912099Sjoerg * are met: 1012099Sjoerg * 1. Redistributions of source code must retain the above copyright 1112099Sjoerg * notice, this list of conditions and the following disclaimer. 1212099Sjoerg * 2. Redistributions in binary form must reproduce the above copyright 1312099Sjoerg * notice, this list of conditions and the following disclaimer in the 1412099Sjoerg * documentation and/or other materials provided with the distribution. 1512099Sjoerg * 3. All advertising materials mentioning features or use of this software 1612099Sjoerg * must display the following acknowledgement: 1712099Sjoerg * This product includes software developed by Jochen Pohl for 1812099Sjoerg * The NetBSD Project. 1912099Sjoerg * 4. The name of the author may not be used to endorse or promote products 2012099Sjoerg * derived from this software without specific prior written permission. 2112099Sjoerg * 2212099Sjoerg * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 2312099Sjoerg * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2412099Sjoerg * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2512099Sjoerg * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2612099Sjoerg * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2712099Sjoerg * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2812099Sjoerg * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2912099Sjoerg * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3012099Sjoerg * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 3112099Sjoerg * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3212099Sjoerg */ 3312099Sjoerg 3412099Sjoerg/* 3512099Sjoerg * main.c 3612099Sjoerg */ 3712099Sjoergextern int aflag; 3812099Sjoergextern int bflag; 3912099Sjoergextern int cflag; 4012099Sjoergextern int dflag; 4112099Sjoergextern int eflag; 4212099Sjoergextern int Fflag; 4312099Sjoergextern int gflag; 4412099Sjoergextern int hflag; 4512099Sjoergextern int rflag; 4612099Sjoergextern int sflag; 4712099Sjoergextern int tflag; 4812099Sjoergextern int uflag; 4912099Sjoergextern int vflag; 5012099Sjoergextern int yflag; 5191586Smarkmextern int wflag; 5212099Sjoergextern int zflag; 5312099Sjoerg 5491586Smarkmextern void norecover(void); 5512099Sjoerg 5612099Sjoerg/* 5712099Sjoerg * cgram.y 5812099Sjoerg */ 5912099Sjoergextern int blklev; 6012099Sjoergextern int mblklev; 6112099Sjoergextern int yydebug; 6212099Sjoerg 6391586Smarkmextern int yyerror(char *); 6491586Smarkmextern int yyparse(void); 6512099Sjoerg 6612099Sjoerg/* 6712099Sjoerg * scan.l 6812099Sjoerg */ 6912099Sjoergextern pos_t curr_pos; 7012099Sjoergextern pos_t csrc_pos; 7112099Sjoergextern symt_t symtyp; 7212099Sjoergextern FILE *yyin; 7391586Smarkmextern uint64_t qbmasks[], qlmasks[], qumasks[]; 7412099Sjoerg 7591586Smarkmextern void initscan(void); 7691586Smarkmextern int sign(int64_t, tspec_t, int); 7791586Smarkmextern int msb(int64_t, tspec_t, int); 7891586Smarkmextern int64_t xsign(int64_t, tspec_t, int); 7991586Smarkmextern void clrwflgs(void); 8091586Smarkmextern sym_t *getsym(sbuf_t *); 8191586Smarkmextern void cleanup(void); 8291586Smarkmextern sym_t *pushdown(sym_t *); 8391586Smarkmextern void rmsym(sym_t *); 8491586Smarkmextern void rmsyms(sym_t *); 8591586Smarkmextern void inssym(int, sym_t *); 8691586Smarkmextern void freeyyv(void *, int); 8791586Smarkmextern int yylex(void); 8812099Sjoerg 8912099Sjoerg/* 9012099Sjoerg * mem1.c 9112099Sjoerg */ 9291586Smarkmextern const char *fnalloc(const char *); 9391586Smarkmextern const char *fnnalloc(const char *, size_t); 9491586Smarkmextern int getfnid(const char *); 9512099Sjoerg 9691586Smarkmextern void initmem(void); 9712099Sjoerg 9891586Smarkmextern void *getblk(size_t); 9991586Smarkmextern void *getlblk(int, size_t); 10091586Smarkmextern void freeblk(void); 10191586Smarkmextern void freelblk(int); 10212099Sjoerg 10391586Smarkmextern void *tgetblk(size_t); 10491586Smarkmextern tnode_t *getnode(void); 10591586Smarkmextern void tfreeblk(void); 10691586Smarkmextern struct mbl *tsave(void); 10791586Smarkmextern void trestor(struct mbl *); 10812099Sjoerg 10912099Sjoerg/* 11012099Sjoerg * err.c 11112099Sjoerg */ 11212099Sjoergextern int nerr; 11312099Sjoergextern int sytxerr; 11412099Sjoergextern const char *msgs[]; 11512099Sjoerg 11691586Smarkmextern void msglist(void); 11791586Smarkmextern void error(int, ...); 11891586Smarkmextern void warning(int, ...); 11991586Smarkmextern void message(int, ...); 12091586Smarkmextern int gnuism(int, ...); 12191586Smarkmextern void lerror(const char *, ...) 12291586Smarkm __attribute__((__noreturn__,__format__(__printf__, 1, 2))); 12312099Sjoerg 12412099Sjoerg/* 12512099Sjoerg * decl.c 12612099Sjoerg */ 12712099Sjoergextern dinfo_t *dcs; 12812099Sjoergextern const char *unnamed; 12912099Sjoergextern int enumval; 13012099Sjoerg 13191586Smarkmextern void initdecl(void); 13291586Smarkmextern type_t *gettyp(tspec_t); 13391586Smarkmextern type_t *duptyp(const type_t *); 13491586Smarkmextern type_t *tduptyp(const type_t *); 13591586Smarkmextern int incompl(type_t *); 13691586Smarkmextern void setcompl(type_t *, int); 13791586Smarkmextern void addscl(scl_t); 13891586Smarkmextern void addtype(type_t *); 13991586Smarkmextern void addqual(tqual_t); 14091586Smarkmextern void pushdecl(scl_t); 14191586Smarkmextern void popdecl(void); 14291586Smarkmextern void setasm(void); 14391586Smarkmextern void clrtyp(void); 14491586Smarkmextern void deftyp(void); 14591586Smarkmextern int length(type_t *, const char *); 14691586Smarkmextern int getbound(type_t *); 14791586Smarkmextern sym_t *lnklst(sym_t *, sym_t *); 14891586Smarkmextern void chktyp(sym_t *); 14991586Smarkmextern sym_t *decl1str(sym_t *); 15091586Smarkmextern sym_t *bitfield(sym_t *, int); 15191586Smarkmextern pqinf_t *mergepq(pqinf_t *, pqinf_t *); 15291586Smarkmextern sym_t *addptr(sym_t *, pqinf_t *); 15391586Smarkmextern sym_t *addarray(sym_t *, int, int); 15491586Smarkmextern sym_t *addfunc(sym_t *, sym_t *); 15591586Smarkmextern void chkfdef(sym_t *, int); 15691586Smarkmextern sym_t *dname(sym_t *); 15791586Smarkmextern sym_t *iname(sym_t *); 15891586Smarkmextern type_t *mktag(sym_t *, tspec_t, int, int); 15991586Smarkmextern const char *scltoa(scl_t); 16091586Smarkmextern type_t *compltag(type_t *, sym_t *); 16191586Smarkmextern sym_t *ename(sym_t *, int, int); 16291586Smarkmextern void decl1ext(sym_t *, int); 16391586Smarkmextern void cpuinfo(sym_t *, sym_t *); 16491586Smarkmextern int isredec(sym_t *, int *); 16591586Smarkmextern int eqtype(type_t *, type_t *, int, int, int *); 16691586Smarkmextern void compltyp(sym_t *, sym_t *); 16791586Smarkmextern sym_t *decl1arg(sym_t *, int); 16891586Smarkmextern void cluparg(void); 16991586Smarkmextern void decl1loc(sym_t *, int); 17091586Smarkmextern sym_t *aname(void); 17191586Smarkmextern void globclup(void); 17291586Smarkmextern sym_t *decl1abs(sym_t *); 17391586Smarkmextern void chksz(sym_t *); 17491586Smarkmextern void setsflg(sym_t *); 17591586Smarkmextern void setuflg(sym_t *, int, int); 17691586Smarkmextern void chkusage(dinfo_t *); 17791586Smarkmextern void chkusg1(int, sym_t *); 17891586Smarkmextern void chkglsyms(void); 17991586Smarkmextern void prevdecl(int, sym_t *); 18012099Sjoerg 18112099Sjoerg/* 18212099Sjoerg * tree.c 18312099Sjoerg */ 18491586Smarkmextern void initmtab(void); 18591586Smarkmextern type_t *incref(type_t *, tspec_t); 18691586Smarkmextern type_t *tincref(type_t *, tspec_t); 18791586Smarkmextern tnode_t *getcnode(type_t *, val_t *); 18891586Smarkmextern tnode_t *getnnode(sym_t *, int); 18991586Smarkmextern tnode_t *getsnode(strg_t *); 19091586Smarkmextern sym_t *strmemb(tnode_t *, op_t, sym_t *); 19191586Smarkmextern tnode_t *build(op_t, tnode_t *, tnode_t *); 19291586Smarkmextern tnode_t *cconv(tnode_t *); 19391586Smarkmextern int typeok(op_t, int, tnode_t *, tnode_t *); 19491586Smarkmextern tnode_t *promote(op_t, int, tnode_t *); 19591586Smarkmextern tnode_t *convert(op_t, int, type_t *, tnode_t *); 19691586Smarkmextern void cvtcon(op_t, int, type_t *, val_t *, val_t *); 19791586Smarkmextern const char *tyname(type_t *); 19891586Smarkmextern tnode_t *bldszof(type_t *); 19991586Smarkmextern tnode_t *cast(tnode_t *, type_t *); 20091586Smarkmextern tnode_t *funcarg(tnode_t *, tnode_t *); 20191586Smarkmextern tnode_t *funccall(tnode_t *, tnode_t *); 20291586Smarkmextern val_t *constant(tnode_t *); 20391586Smarkmextern void expr(tnode_t *, int, int); 20491586Smarkmextern void chkmisc(tnode_t *, int, int, int, int, int, int); 20591586Smarkmextern int conaddr(tnode_t *, sym_t **, ptrdiff_t *); 20691586Smarkmextern strg_t *catstrg(strg_t *, strg_t *); 20712099Sjoerg 20812099Sjoerg/* 20912099Sjoerg * func.c 21012099Sjoerg */ 21112099Sjoergextern sym_t *funcsym; 21212099Sjoergextern int reached; 21312099Sjoergextern int rchflg; 21412099Sjoergextern int ftflg; 21512099Sjoergextern int nargusg; 21612099Sjoergextern pos_t aupos; 21712099Sjoergextern int nvararg; 21812099Sjoergextern pos_t vapos; 21912099Sjoergextern int prflstrg; 22012099Sjoergextern pos_t prflpos; 22112099Sjoergextern int scflstrg; 22212099Sjoergextern pos_t scflpos; 22312099Sjoergextern int ccflg; 22412099Sjoergextern int llibflg; 22512099Sjoergextern int nowarn; 22691586Smarkmextern int bitfieldtype_ok; 22712099Sjoergextern int plibflg; 22812099Sjoergextern int quadflg; 22912099Sjoerg 23091586Smarkmextern void pushctrl(int); 23191586Smarkmextern void popctrl(int); 23291586Smarkmextern void chkreach(void); 23391586Smarkmextern void funcdef(sym_t *); 23491586Smarkmextern void funcend(void); 23591586Smarkmextern void label(int, sym_t *, tnode_t *); 23691586Smarkmextern void if1(tnode_t *); 23791586Smarkmextern void if2(void); 23891586Smarkmextern void if3(int); 23991586Smarkmextern void switch1(tnode_t *); 24091586Smarkmextern void switch2(void); 24191586Smarkmextern void while1(tnode_t *); 24291586Smarkmextern void while2(void); 24391586Smarkmextern void do1(void); 24491586Smarkmextern void do2(tnode_t *); 24591586Smarkmextern void for1(tnode_t *, tnode_t *, tnode_t *); 24691586Smarkmextern void for2(void); 24791586Smarkmextern void dogoto(sym_t *); 24891586Smarkmextern void docont(void); 24991586Smarkmextern void dobreak(void); 25091586Smarkmextern void doreturn(tnode_t *); 25191586Smarkmextern void glclup(int); 25291586Smarkmextern void argsused(int); 25391586Smarkmextern void constcond(int); 25491586Smarkmextern void fallthru(int); 25591586Smarkmextern void notreach(int); 25691586Smarkmextern void lintlib(int); 25791586Smarkmextern void linted(int); 25891586Smarkmextern void varargs(int); 25991586Smarkmextern void printflike(int); 26091586Smarkmextern void scanflike(int); 26191586Smarkmextern void protolib(int); 26291586Smarkmextern void longlong(int); 26391586Smarkmextern void bitfieldtype(int); 26412099Sjoerg 26512099Sjoerg/* 26612099Sjoerg * init.c 26712099Sjoerg */ 26812099Sjoergextern int initerr; 26912099Sjoergextern sym_t *initsym; 27012099Sjoergextern int startinit; 27112099Sjoerg 27291586Smarkmextern void prepinit(void); 27391586Smarkmextern void initrbr(void); 27491586Smarkmextern void initlbr(void); 27591586Smarkmextern void mkinit(tnode_t *); 27612099Sjoerg 27712099Sjoerg/* 27812099Sjoerg * emit.c 27912099Sjoerg */ 28091586Smarkmextern void outtype(type_t *); 28191586Smarkmextern const char *ttos(type_t *); 28291586Smarkmextern void outsym(sym_t *, scl_t, def_t); 28391586Smarkmextern void outfdef(sym_t *, pos_t *, int, int, sym_t *); 28491586Smarkmextern void outcall(tnode_t *, int, int); 28591586Smarkmextern void outusg(sym_t *); 286