17dd7cddfSDavid du Colombier #include <u.h> 27dd7cddfSDavid du Colombier #include <libc.h> 37dd7cddfSDavid du Colombier #include <bio.h> 47dd7cddfSDavid du Colombier #include "../5c/5.out.h" 5*8153b942SDavid du Colombier #include "../8l/elf.h" 67dd7cddfSDavid du Colombier 77dd7cddfSDavid du Colombier #ifndef EXTERN 87dd7cddfSDavid du Colombier #define EXTERN extern 97dd7cddfSDavid du Colombier #endif 107dd7cddfSDavid du Colombier 11b87cd620SDavid du Colombier #define LIBNAMELEN 300 12b87cd620SDavid du Colombier 13b87cd620SDavid du Colombier void addlibpath(char*); 14b87cd620SDavid du Colombier int fileexists(char*); 15b87cd620SDavid du Colombier char* findlib(char*); 167dd7cddfSDavid du Colombier 177dd7cddfSDavid du Colombier typedef struct Adr Adr; 187dd7cddfSDavid du Colombier typedef struct Sym Sym; 197dd7cddfSDavid du Colombier typedef struct Autom Auto; 207dd7cddfSDavid du Colombier typedef struct Prog Prog; 217dd7cddfSDavid du Colombier typedef struct Optab Optab; 227dd7cddfSDavid du Colombier typedef struct Oprang Oprang; 237dd7cddfSDavid du Colombier typedef uchar Opcross[32][2][32]; 247dd7cddfSDavid du Colombier typedef struct Count Count; 257dd7cddfSDavid du Colombier 267dd7cddfSDavid du Colombier #define P ((Prog*)0) 277dd7cddfSDavid du Colombier #define S ((Sym*)0) 287dd7cddfSDavid du Colombier #define TNAME (curtext&&curtext->from.sym?curtext->from.sym->name:noname) 297dd7cddfSDavid du Colombier 307dd7cddfSDavid du Colombier struct Adr 317dd7cddfSDavid du Colombier { 327dd7cddfSDavid du Colombier union 337dd7cddfSDavid du Colombier { 347dd7cddfSDavid du Colombier long u0offset; 357dd7cddfSDavid du Colombier char* u0sval; 367dd7cddfSDavid du Colombier Ieee* u0ieee; 377dd7cddfSDavid du Colombier } u0; 387dd7cddfSDavid du Colombier union 397dd7cddfSDavid du Colombier { 407dd7cddfSDavid du Colombier Auto* u1autom; 417dd7cddfSDavid du Colombier Sym* u1sym; 427dd7cddfSDavid du Colombier } u1; 437dd7cddfSDavid du Colombier char type; 447dd7cddfSDavid du Colombier char reg; 457dd7cddfSDavid du Colombier char name; 467dd7cddfSDavid du Colombier char class; 477dd7cddfSDavid du Colombier }; 487dd7cddfSDavid du Colombier 497dd7cddfSDavid du Colombier #define offset u0.u0offset 507dd7cddfSDavid du Colombier #define sval u0.u0sval 517dd7cddfSDavid du Colombier #define ieee u0.u0ieee 527dd7cddfSDavid du Colombier 537dd7cddfSDavid du Colombier #define autom u1.u1autom 547dd7cddfSDavid du Colombier #define sym u1.u1sym 557dd7cddfSDavid du Colombier 567dd7cddfSDavid du Colombier struct Prog 577dd7cddfSDavid du Colombier { 587dd7cddfSDavid du Colombier Adr from; 597dd7cddfSDavid du Colombier Adr to; 607dd7cddfSDavid du Colombier union 617dd7cddfSDavid du Colombier { 627dd7cddfSDavid du Colombier long u0regused; 637dd7cddfSDavid du Colombier Prog* u0forwd; 647dd7cddfSDavid du Colombier } u0; 657dd7cddfSDavid du Colombier Prog* cond; 667dd7cddfSDavid du Colombier Prog* link; 677dd7cddfSDavid du Colombier long pc; 687dd7cddfSDavid du Colombier long line; 697dd7cddfSDavid du Colombier uchar mark; 707dd7cddfSDavid du Colombier uchar optab; 717dd7cddfSDavid du Colombier uchar as; 727dd7cddfSDavid du Colombier uchar scond; 737dd7cddfSDavid du Colombier uchar reg; 747dd7cddfSDavid du Colombier }; 757dd7cddfSDavid du Colombier #define regused u0.u0regused 767dd7cddfSDavid du Colombier #define forwd u0.u0forwd 777dd7cddfSDavid du Colombier 787dd7cddfSDavid du Colombier struct Sym 797dd7cddfSDavid du Colombier { 807dd7cddfSDavid du Colombier char *name; 817dd7cddfSDavid du Colombier short type; 827dd7cddfSDavid du Colombier short version; 837dd7cddfSDavid du Colombier short become; 847dd7cddfSDavid du Colombier short frame; 85375daca8SDavid du Colombier uchar subtype; 86375daca8SDavid du Colombier ushort file; 877dd7cddfSDavid du Colombier long value; 88375daca8SDavid du Colombier long sig; 897dd7cddfSDavid du Colombier Sym* link; 907dd7cddfSDavid du Colombier }; 91375daca8SDavid du Colombier 92375daca8SDavid du Colombier #define SIGNINTERN (1729*325*1729) 93375daca8SDavid du Colombier 947dd7cddfSDavid du Colombier struct Autom 957dd7cddfSDavid du Colombier { 967dd7cddfSDavid du Colombier Sym* asym; 977dd7cddfSDavid du Colombier Auto* link; 987dd7cddfSDavid du Colombier long aoffset; 997dd7cddfSDavid du Colombier short type; 1007dd7cddfSDavid du Colombier }; 1017dd7cddfSDavid du Colombier struct Optab 1027dd7cddfSDavid du Colombier { 1037dd7cddfSDavid du Colombier char as; 1047dd7cddfSDavid du Colombier char a1; 1057dd7cddfSDavid du Colombier char a2; 1067dd7cddfSDavid du Colombier char a3; 1077dd7cddfSDavid du Colombier char type; 1087dd7cddfSDavid du Colombier char size; 1097dd7cddfSDavid du Colombier char param; 11059cc4ca5SDavid du Colombier char flag; 1117dd7cddfSDavid du Colombier }; 1127dd7cddfSDavid du Colombier struct Oprang 1137dd7cddfSDavid du Colombier { 1147dd7cddfSDavid du Colombier Optab* start; 1157dd7cddfSDavid du Colombier Optab* stop; 1167dd7cddfSDavid du Colombier }; 1177dd7cddfSDavid du Colombier struct Count 1187dd7cddfSDavid du Colombier { 1197dd7cddfSDavid du Colombier long count; 1207dd7cddfSDavid du Colombier long outof; 1217dd7cddfSDavid du Colombier }; 1227dd7cddfSDavid du Colombier 1237dd7cddfSDavid du Colombier enum 1247dd7cddfSDavid du Colombier { 1257dd7cddfSDavid du Colombier STEXT = 1, 1267dd7cddfSDavid du Colombier SDATA, 1277dd7cddfSDavid du Colombier SBSS, 1287dd7cddfSDavid du Colombier SDATA1, 1297dd7cddfSDavid du Colombier SXREF, 1307dd7cddfSDavid du Colombier SLEAF, 1317dd7cddfSDavid du Colombier SFILE, 1327dd7cddfSDavid du Colombier SCONST, 1339a747e4fSDavid du Colombier SSTRING, 134375daca8SDavid du Colombier SUNDEF, 135375daca8SDavid du Colombier 136375daca8SDavid du Colombier SIMPORT, 137375daca8SDavid du Colombier SEXPORT, 1387dd7cddfSDavid du Colombier 13959cc4ca5SDavid du Colombier LFROM = 1<<0, 14059cc4ca5SDavid du Colombier LTO = 1<<1, 14159cc4ca5SDavid du Colombier LPOOL = 1<<2, 14259cc4ca5SDavid du Colombier V4 = 1<<3, /* arm v4 arch */ 1439b7bf7dfSDavid du Colombier VFP = 1<<4, /* arm vfpv3 floating point */ 1447dd7cddfSDavid du Colombier 1457dd7cddfSDavid du Colombier C_NONE = 0, 1467dd7cddfSDavid du Colombier C_REG, 14759cc4ca5SDavid du Colombier C_REGREG, 1487dd7cddfSDavid du Colombier C_SHIFT, 1497dd7cddfSDavid du Colombier C_FREG, 1507dd7cddfSDavid du Colombier C_PSR, 1517dd7cddfSDavid du Colombier C_FCR, 1527dd7cddfSDavid du Colombier 1537dd7cddfSDavid du Colombier C_RCON, /* 0xff rotated */ 1547dd7cddfSDavid du Colombier C_NCON, /* ~RCON */ 1557dd7cddfSDavid du Colombier C_SCON, /* 0xffff */ 1567dd7cddfSDavid du Colombier C_LCON, 1577dd7cddfSDavid du Colombier C_FCON, 1587dd7cddfSDavid du Colombier 1597dd7cddfSDavid du Colombier C_RACON, 1607dd7cddfSDavid du Colombier C_LACON, 1617dd7cddfSDavid du Colombier 1627dd7cddfSDavid du Colombier C_RECON, 1637dd7cddfSDavid du Colombier C_LECON, 1647dd7cddfSDavid du Colombier 1657dd7cddfSDavid du Colombier C_SBRA, 1667dd7cddfSDavid du Colombier C_LBRA, 1677dd7cddfSDavid du Colombier 16859cc4ca5SDavid du Colombier C_HAUTO, /* halfword insn offset (-0xff to 0xff) */ 16959cc4ca5SDavid du Colombier C_FAUTO, /* float insn offset (0 to 0x3fc, word aligned) */ 17059cc4ca5SDavid du Colombier C_HFAUTO, /* both H and F */ 17159cc4ca5SDavid du Colombier C_SAUTO, /* -0xfff to 0xfff */ 1727dd7cddfSDavid du Colombier C_LAUTO, 1737dd7cddfSDavid du Colombier 17459cc4ca5SDavid du Colombier C_HEXT, 1757dd7cddfSDavid du Colombier C_FEXT, 17659cc4ca5SDavid du Colombier C_HFEXT, 1777dd7cddfSDavid du Colombier C_SEXT, 1787dd7cddfSDavid du Colombier C_LEXT, 1797dd7cddfSDavid du Colombier 18059cc4ca5SDavid du Colombier C_HOREG, 1817dd7cddfSDavid du Colombier C_FOREG, 18259cc4ca5SDavid du Colombier C_HFOREG, 1837dd7cddfSDavid du Colombier C_SOREG, 18459cc4ca5SDavid du Colombier C_ROREG, 18559cc4ca5SDavid du Colombier C_SROREG, /* both S and R */ 1867dd7cddfSDavid du Colombier C_LOREG, 1877dd7cddfSDavid du Colombier 1889a747e4fSDavid du Colombier C_ADDR, /* relocatable address */ 1899a747e4fSDavid du Colombier 1907dd7cddfSDavid du Colombier C_GOK, 1917dd7cddfSDavid du Colombier 1927dd7cddfSDavid du Colombier /* mark flags */ 1937dd7cddfSDavid du Colombier FOLL = 1<<0, 1947dd7cddfSDavid du Colombier LABEL = 1<<1, 1957dd7cddfSDavid du Colombier LEAF = 1<<2, 1967dd7cddfSDavid du Colombier 1977dd7cddfSDavid du Colombier BIG = (1<<12)-4, 1987dd7cddfSDavid du Colombier STRINGSZ = 200, 1997dd7cddfSDavid du Colombier NHASH = 10007, 2007dd7cddfSDavid du Colombier NHUNK = 100000, 2017dd7cddfSDavid du Colombier MINSIZ = 64, 2027dd7cddfSDavid du Colombier NENT = 100, 2037dd7cddfSDavid du Colombier MAXIO = 8192, 2047dd7cddfSDavid du Colombier MAXHIST = 20, /* limit of path elements for history symbols */ 205375daca8SDavid du Colombier 206375daca8SDavid du Colombier Roffset = 22, /* no. bits for offset in relocation address */ 207375daca8SDavid du Colombier Rindex = 10, /* no. bits for index in relocation address */ 2087dd7cddfSDavid du Colombier }; 2097dd7cddfSDavid du Colombier 2107dd7cddfSDavid du Colombier EXTERN union 2117dd7cddfSDavid du Colombier { 2127dd7cddfSDavid du Colombier struct 2137dd7cddfSDavid du Colombier { 2147dd7cddfSDavid du Colombier uchar obuf[MAXIO]; /* output buffer */ 2157dd7cddfSDavid du Colombier uchar ibuf[MAXIO]; /* input buffer */ 2167dd7cddfSDavid du Colombier } u; 2177dd7cddfSDavid du Colombier char dbuf[1]; 2187dd7cddfSDavid du Colombier } buf; 2197dd7cddfSDavid du Colombier 2207dd7cddfSDavid du Colombier #define cbuf u.obuf 2217dd7cddfSDavid du Colombier #define xbuf u.ibuf 2227dd7cddfSDavid du Colombier 2237dd7cddfSDavid du Colombier EXTERN long HEADR; /* length of header */ 2247dd7cddfSDavid du Colombier EXTERN int HEADTYPE; /* type of header */ 2257dd7cddfSDavid du Colombier EXTERN long INITDAT; /* data location */ 2267dd7cddfSDavid du Colombier EXTERN long INITRND; /* data round above text location */ 2277dd7cddfSDavid du Colombier EXTERN long INITTEXT; /* text location */ 228*8153b942SDavid du Colombier EXTERN long INITTEXTP; /* text location (physical) */ 2297dd7cddfSDavid du Colombier EXTERN char* INITENTRY; /* entry point */ 2307dd7cddfSDavid du Colombier EXTERN long autosize; 2317dd7cddfSDavid du Colombier EXTERN Biobuf bso; 2327dd7cddfSDavid du Colombier EXTERN long bsssize; 2337dd7cddfSDavid du Colombier EXTERN int cbc; 2347dd7cddfSDavid du Colombier EXTERN uchar* cbp; 2357dd7cddfSDavid du Colombier EXTERN int cout; 2367dd7cddfSDavid du Colombier EXTERN Auto* curauto; 2377dd7cddfSDavid du Colombier EXTERN Auto* curhist; 2387dd7cddfSDavid du Colombier EXTERN Prog* curp; 2397dd7cddfSDavid du Colombier EXTERN Prog* curtext; 2407dd7cddfSDavid du Colombier EXTERN Prog* datap; 2417dd7cddfSDavid du Colombier EXTERN long datsize; 2427dd7cddfSDavid du Colombier EXTERN char debug[128]; 2437dd7cddfSDavid du Colombier EXTERN Prog* etextp; 2447dd7cddfSDavid du Colombier EXTERN Prog* firstp; 2457dd7cddfSDavid du Colombier EXTERN char fnuxi4[4]; 2467dd7cddfSDavid du Colombier EXTERN char fnuxi8[8]; 2477dd7cddfSDavid du Colombier EXTERN char* noname; 2487dd7cddfSDavid du Colombier EXTERN Sym* hash[NHASH]; 2497dd7cddfSDavid du Colombier EXTERN Sym* histfrog[MAXHIST]; 2507dd7cddfSDavid du Colombier EXTERN int histfrogp; 2517dd7cddfSDavid du Colombier EXTERN int histgen; 2527dd7cddfSDavid du Colombier EXTERN char* library[50]; 25380ee5cbfSDavid du Colombier EXTERN char* libraryobj[50]; 2547dd7cddfSDavid du Colombier EXTERN int libraryp; 25559cc4ca5SDavid du Colombier EXTERN int xrefresolv; 2567dd7cddfSDavid du Colombier EXTERN char* hunk; 2577dd7cddfSDavid du Colombier EXTERN char inuxi1[1]; 2587dd7cddfSDavid du Colombier EXTERN char inuxi2[2]; 2597dd7cddfSDavid du Colombier EXTERN char inuxi4[4]; 2607dd7cddfSDavid du Colombier EXTERN Prog* lastp; 2617dd7cddfSDavid du Colombier EXTERN long lcsize; 2627dd7cddfSDavid du Colombier EXTERN char literal[32]; 2637dd7cddfSDavid du Colombier EXTERN int nerrors; 2647dd7cddfSDavid du Colombier EXTERN long nhunk; 2657dd7cddfSDavid du Colombier EXTERN long instoffset; 2667dd7cddfSDavid du Colombier EXTERN Opcross opcross[8]; 2677dd7cddfSDavid du Colombier EXTERN Oprang oprange[ALAST]; 2687dd7cddfSDavid du Colombier EXTERN char* outfile; 2697dd7cddfSDavid du Colombier EXTERN long pc; 2707dd7cddfSDavid du Colombier EXTERN uchar repop[ALAST]; 2717dd7cddfSDavid du Colombier EXTERN long symsize; 2727dd7cddfSDavid du Colombier EXTERN Prog* textp; 2737dd7cddfSDavid du Colombier EXTERN long textsize; 2747dd7cddfSDavid du Colombier EXTERN long thunk; 2757dd7cddfSDavid du Colombier EXTERN int version; 27659cc4ca5SDavid du Colombier EXTERN char xcmp[C_GOK+1][C_GOK+1]; 2777dd7cddfSDavid du Colombier EXTERN Prog zprg; 2787dd7cddfSDavid du Colombier EXTERN int dtype; 27959cc4ca5SDavid du Colombier EXTERN int armv4; 2809b7bf7dfSDavid du Colombier EXTERN int vfp; 2817dd7cddfSDavid du Colombier 282375daca8SDavid du Colombier EXTERN int doexp, dlm; 283375daca8SDavid du Colombier EXTERN int imports, nimports; 284375daca8SDavid du Colombier EXTERN int exports, nexports; 285375daca8SDavid du Colombier EXTERN char* EXPTAB; 2869a747e4fSDavid du Colombier EXTERN Prog undefp; 2879a747e4fSDavid du Colombier 2889a747e4fSDavid du Colombier #define UP (&undefp) 2899a747e4fSDavid du Colombier 2907dd7cddfSDavid du Colombier extern char* anames[]; 2917dd7cddfSDavid du Colombier extern Optab optab[]; 2927dd7cddfSDavid du Colombier 2937dd7cddfSDavid du Colombier void addpool(Prog*, Adr*); 2947dd7cddfSDavid du Colombier EXTERN Prog* blitrl; 2957dd7cddfSDavid du Colombier EXTERN Prog* elitrl; 2967dd7cddfSDavid du Colombier 2977dd7cddfSDavid du Colombier void initdiv(void); 2987dd7cddfSDavid du Colombier EXTERN Prog* prog_div; 2997dd7cddfSDavid du Colombier EXTERN Prog* prog_divu; 3007dd7cddfSDavid du Colombier EXTERN Prog* prog_mod; 3017dd7cddfSDavid du Colombier EXTERN Prog* prog_modu; 3027dd7cddfSDavid du Colombier 3037dd7cddfSDavid du Colombier #pragma varargck type "A" int 304406758d9SDavid du Colombier #pragma varargck type "A" uint 3057dd7cddfSDavid du Colombier #pragma varargck type "C" int 3067dd7cddfSDavid du Colombier #pragma varargck type "D" Adr* 3077dd7cddfSDavid du Colombier #pragma varargck type "N" Adr* 30859cc4ca5SDavid du Colombier #pragma varargck type "P" Prog* 3097dd7cddfSDavid du Colombier #pragma varargck type "S" char* 3107dd7cddfSDavid du Colombier 311406758d9SDavid du Colombier #pragma varargck argpos diag 1 312406758d9SDavid du Colombier 3139a747e4fSDavid du Colombier int Aconv(Fmt*); 3149a747e4fSDavid du Colombier int Cconv(Fmt*); 3159a747e4fSDavid du Colombier int Dconv(Fmt*); 3169a747e4fSDavid du Colombier int Nconv(Fmt*); 3179a747e4fSDavid du Colombier int Pconv(Fmt*); 3189a747e4fSDavid du Colombier int Sconv(Fmt*); 3197dd7cddfSDavid du Colombier int aclass(Adr*); 3207dd7cddfSDavid du Colombier void addhist(long, int); 321b87cd620SDavid du Colombier void addlibpath(char*); 3227dd7cddfSDavid du Colombier void append(Prog*, Prog*); 3237dd7cddfSDavid du Colombier void asmb(void); 324375daca8SDavid du Colombier void asmdyn(void); 3257dd7cddfSDavid du Colombier void asmlc(void); 3267dd7cddfSDavid du Colombier void asmout(Prog*, Optab*); 3277dd7cddfSDavid du Colombier void asmsym(void); 3287dd7cddfSDavid du Colombier long atolwhex(char*); 3297dd7cddfSDavid du Colombier Prog* brloop(Prog*); 3307dd7cddfSDavid du Colombier void buildop(void); 3317dd7cddfSDavid du Colombier void buildrep(int, int); 3327dd7cddfSDavid du Colombier void cflush(void); 333375daca8SDavid du Colombier void ckoff(Sym*, long); 3347dd7cddfSDavid du Colombier int chipfloat(Ieee*); 3357dd7cddfSDavid du Colombier int cmp(int, int); 3367dd7cddfSDavid du Colombier int compound(Prog*); 3377dd7cddfSDavid du Colombier double cputime(void); 3389a747e4fSDavid du Colombier void datblk(long, long, int); 3397dd7cddfSDavid du Colombier void diag(char*, ...); 340375daca8SDavid du Colombier void divsig(void); 3417dd7cddfSDavid du Colombier void dodata(void); 3427dd7cddfSDavid du Colombier void doprof1(void); 3437dd7cddfSDavid du Colombier void doprof2(void); 344375daca8SDavid du Colombier void dynreloc(Sym*, long, int); 3457dd7cddfSDavid du Colombier long entryvalue(void); 3467dd7cddfSDavid du Colombier void errorexit(void); 3477dd7cddfSDavid du Colombier void exchange(Prog*); 348375daca8SDavid du Colombier void export(void); 349b87cd620SDavid du Colombier int fileexists(char*); 3507dd7cddfSDavid du Colombier int find1(long, int); 351b87cd620SDavid du Colombier char* findlib(char*); 3527dd7cddfSDavid du Colombier void follow(void); 3537dd7cddfSDavid du Colombier void gethunk(void); 3547dd7cddfSDavid du Colombier void histtoauto(void); 3557dd7cddfSDavid du Colombier double ieeedtod(Ieee*); 3567dd7cddfSDavid du Colombier long ieeedtof(Ieee*); 357375daca8SDavid du Colombier void import(void); 3587dd7cddfSDavid du Colombier int isnop(Prog*); 3597dd7cddfSDavid du Colombier void ldobj(int, long, char*); 36059cc4ca5SDavid du Colombier void loadlib(void); 3617dd7cddfSDavid du Colombier void listinit(void); 3627dd7cddfSDavid du Colombier Sym* lookup(char*, int); 36359cc4ca5SDavid du Colombier void cput(int); 364*8153b942SDavid du Colombier void llput(vlong); 365*8153b942SDavid du Colombier void llputl(vlong); 3667dd7cddfSDavid du Colombier void lput(long); 3677dd7cddfSDavid du Colombier void lputl(long); 3687dd7cddfSDavid du Colombier void mkfwd(void); 3697dd7cddfSDavid du Colombier void* mysbrk(ulong); 3707dd7cddfSDavid du Colombier void names(void); 3717dd7cddfSDavid du Colombier void nocache(Prog*); 3727dd7cddfSDavid du Colombier void nuxiinit(void); 3737dd7cddfSDavid du Colombier void objfile(char*); 3747dd7cddfSDavid du Colombier int ocmp(const void*, const void*); 3757dd7cddfSDavid du Colombier long opirr(int); 3767dd7cddfSDavid du Colombier Optab* oplook(Prog*); 3777dd7cddfSDavid du Colombier long oprrr(int, int); 3789b7bf7dfSDavid du Colombier long opvfprrr(int, int); 3797dd7cddfSDavid du Colombier long olr(long, int, int, int); 38059cc4ca5SDavid du Colombier long olhr(long, int, int, int); 3817dd7cddfSDavid du Colombier long olrr(int, int, int, int); 38259cc4ca5SDavid du Colombier long olhrr(int, int, int, int); 3837dd7cddfSDavid du Colombier long osr(int, int, long, int, int); 38459cc4ca5SDavid du Colombier long oshr(int, long, int, int); 38559cc4ca5SDavid du Colombier long ofsr(int, int, long, int, int, Prog*); 3867dd7cddfSDavid du Colombier long osrr(int, int, int, int); 3877dd7cddfSDavid du Colombier long oshrr(int, int, int, int); 38859cc4ca5SDavid du Colombier long omvl(Prog*, Adr*, int); 3897dd7cddfSDavid du Colombier void patch(void); 3907dd7cddfSDavid du Colombier void prasm(Prog*); 3917dd7cddfSDavid du Colombier void prepend(Prog*, Prog*); 3927dd7cddfSDavid du Colombier Prog* prg(void); 3937dd7cddfSDavid du Colombier int pseudo(Prog*); 3947dd7cddfSDavid du Colombier void putsymb(char*, int, long, int); 395375daca8SDavid du Colombier void readundefs(char*, int); 3967dd7cddfSDavid du Colombier long regoff(Adr*); 3977dd7cddfSDavid du Colombier int relinv(int); 3987dd7cddfSDavid du Colombier long rnd(long, long); 3997dd7cddfSDavid du Colombier void span(void); 4007dd7cddfSDavid du Colombier void strnput(char*, int); 4017dd7cddfSDavid du Colombier void undef(void); 4029a747e4fSDavid du Colombier void undefsym(Sym*); 403375daca8SDavid du Colombier void wput(long); 404*8153b942SDavid du Colombier void wputl(long); 4057dd7cddfSDavid du Colombier void xdefine(char*, int, long); 4067dd7cddfSDavid du Colombier void xfol(Prog*); 407375daca8SDavid du Colombier void zerosig(char*); 4087dd7cddfSDavid du Colombier void noops(void); 4097dd7cddfSDavid du Colombier long immrot(ulong); 4107dd7cddfSDavid du Colombier long immaddr(long); 4117dd7cddfSDavid du Colombier long opbra(int, int); 412