1e887ea33SDavid du Colombier #include <u.h> 2e887ea33SDavid du Colombier #include <libc.h> 3e887ea33SDavid du Colombier #include <bio.h> 4e887ea33SDavid du Colombier #include "../6c/6.out.h" 540d01547SDavid du Colombier #include "../ld/elf.h" 6e887ea33SDavid du Colombier 7e887ea33SDavid du Colombier #ifndef EXTERN 8e887ea33SDavid du Colombier #define EXTERN extern 9e887ea33SDavid du Colombier #endif 10e887ea33SDavid du Colombier 11e887ea33SDavid du Colombier #define P ((Prog*)0) 12e887ea33SDavid du Colombier #define S ((Sym*)0) 13e887ea33SDavid du Colombier #define TNAME (curtext?curtext->from.sym->name:noname) 14e887ea33SDavid du Colombier #define cput(c)\ 15e887ea33SDavid du Colombier { *cbp++ = c;\ 16e887ea33SDavid du Colombier if(--cbc <= 0)\ 17e887ea33SDavid du Colombier cflush(); } 18e887ea33SDavid du Colombier 19b87cd620SDavid du Colombier #define LIBNAMELEN 300 20e887ea33SDavid du Colombier typedef struct Adr Adr; 21e887ea33SDavid du Colombier typedef struct Prog Prog; 22e887ea33SDavid du Colombier typedef struct Sym Sym; 23e887ea33SDavid du Colombier typedef struct Auto Auto; 24e887ea33SDavid du Colombier typedef struct Optab Optab; 25e887ea33SDavid du Colombier typedef struct Movtab Movtab; 26e887ea33SDavid du Colombier 27e887ea33SDavid du Colombier struct Adr 28e887ea33SDavid du Colombier { 29e887ea33SDavid du Colombier union 30e887ea33SDavid du Colombier { 31e887ea33SDavid du Colombier vlong u0offset; 32e887ea33SDavid du Colombier char u0scon[8]; 33e887ea33SDavid du Colombier Prog *u0cond; /* not used, but should be D_BRANCH */ 34e887ea33SDavid du Colombier Ieee u0ieee; 35e887ea33SDavid du Colombier } u0; 36e887ea33SDavid du Colombier union 37e887ea33SDavid du Colombier { 38e887ea33SDavid du Colombier Auto* u1autom; 39e887ea33SDavid du Colombier Sym* u1sym; 40e887ea33SDavid du Colombier } u1; 41e887ea33SDavid du Colombier short type; 42e887ea33SDavid du Colombier char index; 43e887ea33SDavid du Colombier char scale; 44e887ea33SDavid du Colombier }; 45e887ea33SDavid du Colombier 46e887ea33SDavid du Colombier #define offset u0.u0offset 47e887ea33SDavid du Colombier #define scon u0.u0scon 48e887ea33SDavid du Colombier #define cond u0.u0cond 49e887ea33SDavid du Colombier #define ieee u0.u0ieee 50e887ea33SDavid du Colombier 51e887ea33SDavid du Colombier #define autom u1.u1autom 52e887ea33SDavid du Colombier #define sym u1.u1sym 53e887ea33SDavid du Colombier 54e887ea33SDavid du Colombier struct Prog 55e887ea33SDavid du Colombier { 56e887ea33SDavid du Colombier Adr from; 57e887ea33SDavid du Colombier Adr to; 58e887ea33SDavid du Colombier Prog *forwd; 59e887ea33SDavid du Colombier Prog* link; 60e887ea33SDavid du Colombier Prog* pcond; /* work on this */ 61e887ea33SDavid du Colombier vlong pc; 62e887ea33SDavid du Colombier long line; 63e887ea33SDavid du Colombier uchar mark; /* work on these */ 64e887ea33SDavid du Colombier uchar back; 65e887ea33SDavid du Colombier 66e887ea33SDavid du Colombier short as; 67e887ea33SDavid du Colombier char width; /* fake for DATA */ 68e887ea33SDavid du Colombier char mode; /* 16, 32, or 64 */ 69e887ea33SDavid du Colombier }; 70e887ea33SDavid du Colombier struct Auto 71e887ea33SDavid du Colombier { 72e887ea33SDavid du Colombier Sym* asym; 73e887ea33SDavid du Colombier Auto* link; 74e887ea33SDavid du Colombier long aoffset; 75e887ea33SDavid du Colombier short type; 76e887ea33SDavid du Colombier }; 77e887ea33SDavid du Colombier struct Sym 78e887ea33SDavid du Colombier { 79e887ea33SDavid du Colombier char *name; 80e887ea33SDavid du Colombier short type; 81e887ea33SDavid du Colombier short version; 82e887ea33SDavid du Colombier short become; 83e887ea33SDavid du Colombier short frame; 84e887ea33SDavid du Colombier uchar subtype; 85e887ea33SDavid du Colombier ushort file; 86e887ea33SDavid du Colombier vlong value; 87e887ea33SDavid du Colombier long sig; 88e887ea33SDavid du Colombier Sym* link; 89e887ea33SDavid du Colombier }; 90e887ea33SDavid du Colombier struct Optab 91e887ea33SDavid du Colombier { 92e887ea33SDavid du Colombier short as; 93e887ea33SDavid du Colombier uchar* ytab; 9440d01547SDavid du Colombier ushort prefix; 95e887ea33SDavid du Colombier uchar op[20]; 96e887ea33SDavid du Colombier }; 97e887ea33SDavid du Colombier struct Movtab 98e887ea33SDavid du Colombier { 99e887ea33SDavid du Colombier short as; 100e887ea33SDavid du Colombier uchar ft; 101e887ea33SDavid du Colombier uchar tt; 102e887ea33SDavid du Colombier uchar code; 103e887ea33SDavid du Colombier uchar op[4]; 104e887ea33SDavid du Colombier }; 105e887ea33SDavid du Colombier 106e887ea33SDavid du Colombier enum 107e887ea33SDavid du Colombier { 108e887ea33SDavid du Colombier STEXT = 1, 109e887ea33SDavid du Colombier SDATA, 110e887ea33SDavid du Colombier SBSS, 111e887ea33SDavid du Colombier SDATA1, 112e887ea33SDavid du Colombier SXREF, 113e887ea33SDavid du Colombier SFILE, 114e887ea33SDavid du Colombier SCONST, 115e887ea33SDavid du Colombier SUNDEF, 116e887ea33SDavid du Colombier 117e887ea33SDavid du Colombier SIMPORT, 118e887ea33SDavid du Colombier SEXPORT, 119e887ea33SDavid du Colombier 120e887ea33SDavid du Colombier NHASH = 10007, 121e887ea33SDavid du Colombier NHUNK = 100000, 122e887ea33SDavid du Colombier MINSIZ = 8, 123e887ea33SDavid du Colombier STRINGSZ = 200, 124e887ea33SDavid du Colombier MINLC = 1, 125*2ec6491fSDavid du Colombier MAXIO = (16*1024), 126e887ea33SDavid du Colombier MAXHIST = 20, /* limit of path elements for history symbols */ 127e887ea33SDavid du Colombier 128e887ea33SDavid du Colombier Yxxx = 0, 129e887ea33SDavid du Colombier Ynone, 130e887ea33SDavid du Colombier Yi0, 131e887ea33SDavid du Colombier Yi1, 132e887ea33SDavid du Colombier Yi8, 133e887ea33SDavid du Colombier Ys32, 134e887ea33SDavid du Colombier Yi32, 135e887ea33SDavid du Colombier Yi64, 136e887ea33SDavid du Colombier Yiauto, 137e887ea33SDavid du Colombier Yal, 138e887ea33SDavid du Colombier Ycl, 139e887ea33SDavid du Colombier Yax, 140e887ea33SDavid du Colombier Ycx, 141e887ea33SDavid du Colombier Yrb, 142e887ea33SDavid du Colombier Yrl, 143e887ea33SDavid du Colombier Yrf, 144e887ea33SDavid du Colombier Yf0, 145e887ea33SDavid du Colombier Yrx, 146e887ea33SDavid du Colombier Ymb, 147e887ea33SDavid du Colombier Yml, 148e887ea33SDavid du Colombier Ym, 149e887ea33SDavid du Colombier Ybr, 150e887ea33SDavid du Colombier Ycol, 151e887ea33SDavid du Colombier 152e887ea33SDavid du Colombier Ycs, Yss, Yds, Yes, Yfs, Ygs, 153e887ea33SDavid du Colombier Ygdtr, Yidtr, Yldtr, Ymsw, Ytask, 154e887ea33SDavid du Colombier Ycr0, Ycr1, Ycr2, Ycr3, Ycr4, Ycr5, Ycr6, Ycr7, Ycr8, 155e887ea33SDavid du Colombier Ydr0, Ydr1, Ydr2, Ydr3, Ydr4, Ydr5, Ydr6, Ydr7, 156e887ea33SDavid du Colombier Ytr0, Ytr1, Ytr2, Ytr3, Ytr4, Ytr5, Ytr6, Ytr7, Yrl32, Yrl64, 157e887ea33SDavid du Colombier Ymr, Ymm, 15840d01547SDavid du Colombier Yxr, Yxm, Yyr, Yxyr, 159e887ea33SDavid du Colombier Ymax, 160e887ea33SDavid du Colombier 161e887ea33SDavid du Colombier Zxxx = 0, 162e887ea33SDavid du Colombier 163e887ea33SDavid du Colombier Zlit, 164e887ea33SDavid du Colombier Z_rp, 165e887ea33SDavid du Colombier Zbr, 166e887ea33SDavid du Colombier Zcall, 167e887ea33SDavid du Colombier Zib_, 168e887ea33SDavid du Colombier Zib_rp, 169e887ea33SDavid du Colombier Zibo_m, 170e887ea33SDavid du Colombier Zibo_m_xm, 171e887ea33SDavid du Colombier Zil_, 172e887ea33SDavid du Colombier Zil_rp, 173e887ea33SDavid du Colombier Ziq_rp, 174e887ea33SDavid du Colombier Zilo_m, 175e887ea33SDavid du Colombier Ziqo_m, 176e887ea33SDavid du Colombier Zjmp, 177e887ea33SDavid du Colombier Zloop, 178e887ea33SDavid du Colombier Zo_iw, 179e887ea33SDavid du Colombier Zm_o, 180e887ea33SDavid du Colombier Zm_r, 181e887ea33SDavid du Colombier Zm_r_xm, 182e887ea33SDavid du Colombier Zm_r_i_xm, 183e887ea33SDavid du Colombier Zm_r_3d, 184e887ea33SDavid du Colombier Zm_r_xm_nr, 185e887ea33SDavid du Colombier Zr_m_xm_nr, 186e887ea33SDavid du Colombier Zibm_r, /* mmx1,mmx2/mem64,imm8 */ 187e887ea33SDavid du Colombier Zmb_r, 188e887ea33SDavid du Colombier Zaut_r, 189e887ea33SDavid du Colombier Zo_m, 190e887ea33SDavid du Colombier Zo_m64, 191e887ea33SDavid du Colombier Zpseudo, 192e887ea33SDavid du Colombier Zr_m, 193e887ea33SDavid du Colombier Zr_m_xm, 194e887ea33SDavid du Colombier Zr_m_i_xm, 195e887ea33SDavid du Colombier Zrp_, 196e887ea33SDavid du Colombier Z_ib, 197e887ea33SDavid du Colombier Z_il, 198e887ea33SDavid du Colombier Zm_ibo, 199e887ea33SDavid du Colombier Zm_ilo, 200e887ea33SDavid du Colombier Zib_rr, 201e887ea33SDavid du Colombier Zil_rr, 202e887ea33SDavid du Colombier Zclr, 203e887ea33SDavid du Colombier Zbyte, 204e887ea33SDavid du Colombier Zmax, 205e887ea33SDavid du Colombier 206e887ea33SDavid du Colombier Px = 0, 207e887ea33SDavid du Colombier P32 = 0x32, /* 32-bit only */ 208e887ea33SDavid du Colombier Pe = 0x66, /* operand escape */ 209e887ea33SDavid du Colombier Pm = 0x0f, /* 2byte opcode escape */ 210e887ea33SDavid du Colombier Pq = 0xff, /* both escape */ 211e887ea33SDavid du Colombier Pb = 0xfe, /* byte operands */ 212e887ea33SDavid du Colombier Pf2 = 0xf2, /* xmm escape 1 */ 213e887ea33SDavid du Colombier Pf3 = 0xf3, /* xmm escape 2 */ 21440d01547SDavid du Colombier Pm38 = 0x38, /* 0f.38 opcode */ 21540d01547SDavid du Colombier Pm3a = 0x3a, /* 0f.3a opcode */ 216e887ea33SDavid du Colombier Pw = 0x48, /* Rex.w */ 217e887ea33SDavid du Colombier Py = 0x80, /* defaults to 64-bit mode */ 218e887ea33SDavid du Colombier 21940d01547SDavid du Colombier P2 = 1<<9, /* flag: two operand (avx only) */ 22040d01547SDavid du Colombier 221e887ea33SDavid du Colombier Rxf = 1<<9, /* internal flag for Rxr on from */ 222e887ea33SDavid du Colombier Rxt = 1<<8, /* internal flag for Rxr on to */ 223e887ea33SDavid du Colombier Rxw = 1<<3, /* =1, 64-bit operand size */ 224e887ea33SDavid du Colombier Rxr = 1<<2, /* extend modrm reg */ 225e887ea33SDavid du Colombier Rxx = 1<<1, /* extend sib index */ 226e887ea33SDavid du Colombier Rxb = 1<<0, /* extend modrm r/m, sib base, or opcode reg */ 227e887ea33SDavid du Colombier 22840d01547SDavid du Colombier Vex2 = 0xc5, /* 2-byte vex prefix */ 22940d01547SDavid du Colombier Vex3 = 0xc4, /* 3-byte vex prefix */ 23040d01547SDavid du Colombier 23140d01547SDavid du Colombier /* vex flags */ 23240d01547SDavid du Colombier Vexr = 1<<7, /* byte 1, both */ 23340d01547SDavid du Colombier Vexx = 1<<6, /* byte 1, 3-byte */ 23440d01547SDavid du Colombier Vexb = 1<<5, /* byte 1, 3-byte */ 23540d01547SDavid du Colombier Vexw = 1<<7, /* byte 2, 3-byte */ 23640d01547SDavid du Colombier Vexl = 1<<2, /* 256-bit vector */ 23740d01547SDavid du Colombier 23840d01547SDavid du Colombier Vexnr = 0xF<<3, /* no reg */ 23940d01547SDavid du Colombier Vexp0 = 0, /* no SIMD prefix */ 24040d01547SDavid du Colombier Vexp66 = 1, /* prefix 66 */ 24140d01547SDavid du Colombier Vexpf3 = 2, /* prefix f3 */ 24240d01547SDavid du Colombier Vexpf2 = 3, /* prefix f2 */ 24340d01547SDavid du Colombier 24440d01547SDavid du Colombier Vex0f = 1, /* 0F opcode byte */ 24540d01547SDavid du Colombier Vex0f38 = 2, /* 0F 38 opcode bytes */ 24640d01547SDavid du Colombier Vex0f3a = 3, /* 0F 3A opcode bytes */ 24740d01547SDavid du Colombier 248e887ea33SDavid du Colombier Roffset = 22, /* no. bits for offset in relocation address */ 249e887ea33SDavid du Colombier Rindex = 10, /* no. bits for index in relocation address */ 250e887ea33SDavid du Colombier }; 251e887ea33SDavid du Colombier 252e887ea33SDavid du Colombier EXTERN union 253e887ea33SDavid du Colombier { 254e887ea33SDavid du Colombier struct 255e887ea33SDavid du Colombier { 256e887ea33SDavid du Colombier char obuf[MAXIO]; /* output buffer */ 257e887ea33SDavid du Colombier uchar ibuf[MAXIO]; /* input buffer */ 258e887ea33SDavid du Colombier } u; 259e887ea33SDavid du Colombier char dbuf[1]; 260e887ea33SDavid du Colombier } buf; 261e887ea33SDavid du Colombier 262e887ea33SDavid du Colombier #define cbuf u.obuf 263e887ea33SDavid du Colombier #define xbuf u.ibuf 264e887ea33SDavid du Colombier 265e887ea33SDavid du Colombier #pragma varargck type "A" int 266e887ea33SDavid du Colombier #pragma varargck type "A" uint 267e887ea33SDavid du Colombier #pragma varargck type "D" Adr* 268e887ea33SDavid du Colombier #pragma varargck type "P" Prog* 269e887ea33SDavid du Colombier #pragma varargck type "R" int 27040d01547SDavid du Colombier #pragma varargck type "R" uint 271e887ea33SDavid du Colombier #pragma varargck type "S" char* 272e887ea33SDavid du Colombier 273e887ea33SDavid du Colombier #pragma varargck argpos diag 1 274e887ea33SDavid du Colombier 275e887ea33SDavid du Colombier EXTERN long HEADR; 276e887ea33SDavid du Colombier EXTERN long HEADTYPE; 277e887ea33SDavid du Colombier EXTERN vlong INITDAT; 278e887ea33SDavid du Colombier EXTERN long INITRND; 279e887ea33SDavid du Colombier EXTERN vlong INITTEXT; 2808153b942SDavid du Colombier EXTERN vlong INITTEXTP; 281e887ea33SDavid du Colombier EXTERN char* INITENTRY; /* entry point */ 282e887ea33SDavid du Colombier EXTERN Biobuf bso; 283e887ea33SDavid du Colombier EXTERN long bsssize; 284e887ea33SDavid du Colombier EXTERN int cbc; 285e887ea33SDavid du Colombier EXTERN char* cbp; 286e887ea33SDavid du Colombier EXTERN char* pcstr; 287e887ea33SDavid du Colombier EXTERN int cout; 288e887ea33SDavid du Colombier EXTERN Auto* curauto; 289e887ea33SDavid du Colombier EXTERN Auto* curhist; 290e887ea33SDavid du Colombier EXTERN Prog* curp; 291e887ea33SDavid du Colombier EXTERN Prog* curtext; 292e887ea33SDavid du Colombier EXTERN Prog* datap; 293e887ea33SDavid du Colombier EXTERN Prog* edatap; 294e887ea33SDavid du Colombier EXTERN vlong datsize; 295e887ea33SDavid du Colombier EXTERN char debug[128]; 296e887ea33SDavid du Colombier EXTERN char literal[32]; 297e887ea33SDavid du Colombier EXTERN Prog* etextp; 298e887ea33SDavid du Colombier EXTERN Prog* firstp; 299e887ea33SDavid du Colombier EXTERN uchar fnuxi8[8]; 300e887ea33SDavid du Colombier EXTERN uchar fnuxi4[4]; 301e887ea33SDavid du Colombier EXTERN Sym* hash[NHASH]; 302e887ea33SDavid du Colombier EXTERN Sym* histfrog[MAXHIST]; 303e887ea33SDavid du Colombier EXTERN int histfrogp; 304e887ea33SDavid du Colombier EXTERN int histgen; 305e887ea33SDavid du Colombier EXTERN char* library[50]; 306e887ea33SDavid du Colombier EXTERN char* libraryobj[50]; 307e887ea33SDavid du Colombier EXTERN int libraryp; 308e887ea33SDavid du Colombier EXTERN int xrefresolv; 309e887ea33SDavid du Colombier EXTERN char* hunk; 310e887ea33SDavid du Colombier EXTERN uchar inuxi1[1]; 311e887ea33SDavid du Colombier EXTERN uchar inuxi2[2]; 312e887ea33SDavid du Colombier EXTERN uchar inuxi4[4]; 313e887ea33SDavid du Colombier EXTERN uchar inuxi8[8]; 314e887ea33SDavid du Colombier EXTERN char ycover[Ymax*Ymax]; 315e887ea33SDavid du Colombier EXTERN uchar* andptr; 316e887ea33SDavid du Colombier EXTERN uchar* rexptr; 317e887ea33SDavid du Colombier EXTERN uchar and[30]; 31840d01547SDavid du Colombier EXTERN int reg[D_XREG]; 31940d01547SDavid du Colombier EXTERN int regrex[D_XREG+1]; 320e887ea33SDavid du Colombier EXTERN Prog* lastp; 321e887ea33SDavid du Colombier EXTERN long lcsize; 322e887ea33SDavid du Colombier EXTERN int nerrors; 323e887ea33SDavid du Colombier EXTERN long nhunk; 324e887ea33SDavid du Colombier EXTERN long nsymbol; 325e887ea33SDavid du Colombier EXTERN char* noname; 326e887ea33SDavid du Colombier EXTERN char* outfile; 327e887ea33SDavid du Colombier EXTERN vlong pc; 328e887ea33SDavid du Colombier EXTERN long spsize; 329e887ea33SDavid du Colombier EXTERN Sym* symlist; 330e887ea33SDavid du Colombier EXTERN long symsize; 331e887ea33SDavid du Colombier EXTERN Prog* textp; 332e887ea33SDavid du Colombier EXTERN vlong textsize; 333e887ea33SDavid du Colombier EXTERN long thunk; 334e887ea33SDavid du Colombier EXTERN int version; 33540d01547SDavid du Colombier EXTERN int vexed; 336e887ea33SDavid du Colombier EXTERN Prog zprg; 337e887ea33SDavid du Colombier EXTERN int dtype; 338e887ea33SDavid du Colombier EXTERN char* paramspace; 339e887ea33SDavid du Colombier 340e887ea33SDavid du Colombier EXTERN Adr* reloca; 341e887ea33SDavid du Colombier EXTERN int doexp, dlm; 342e887ea33SDavid du Colombier EXTERN int imports, nimports; 34340d01547SDavid du Colombier EXTERN int exports, nexports, allexport; 344e887ea33SDavid du Colombier EXTERN char* EXPTAB; 345e887ea33SDavid du Colombier EXTERN Prog undefp; 346e887ea33SDavid du Colombier 347e887ea33SDavid du Colombier #define UP (&undefp) 348e887ea33SDavid du Colombier 349e887ea33SDavid du Colombier extern Optab optab[]; 350e887ea33SDavid du Colombier extern Optab* opindex[]; 351e887ea33SDavid du Colombier extern char* anames[]; 352e887ea33SDavid du Colombier 353e887ea33SDavid du Colombier int Aconv(Fmt*); 354e887ea33SDavid du Colombier int Dconv(Fmt*); 355e887ea33SDavid du Colombier int Pconv(Fmt*); 356e887ea33SDavid du Colombier int Rconv(Fmt*); 357e887ea33SDavid du Colombier int Sconv(Fmt*); 358e887ea33SDavid du Colombier void addhist(long, int); 359b87cd620SDavid du Colombier void addlibpath(char*); 360e887ea33SDavid du Colombier Prog* appendp(Prog*); 361e887ea33SDavid du Colombier void asmb(void); 362e887ea33SDavid du Colombier void asmdyn(void); 363e887ea33SDavid du Colombier void asmins(Prog*); 364e887ea33SDavid du Colombier void asmlc(void); 365e887ea33SDavid du Colombier void asmsp(void); 366e887ea33SDavid du Colombier void asmsym(void); 367e887ea33SDavid du Colombier vlong atolwhex(char*); 368e887ea33SDavid du Colombier Prog* brchain(Prog*); 369e887ea33SDavid du Colombier Prog* brloop(Prog*); 370e887ea33SDavid du Colombier void buildop(void); 371e887ea33SDavid du Colombier void cflush(void); 372e887ea33SDavid du Colombier void ckoff(Sym*, long); 373e887ea33SDavid du Colombier Prog* copyp(Prog*); 374e887ea33SDavid du Colombier double cputime(void); 375e887ea33SDavid du Colombier void datblk(long, long); 376e887ea33SDavid du Colombier void diag(char*, ...); 377e887ea33SDavid du Colombier void dodata(void); 378e887ea33SDavid du Colombier void doinit(void); 379e887ea33SDavid du Colombier void doprof1(void); 380e887ea33SDavid du Colombier void doprof2(void); 381e887ea33SDavid du Colombier void dostkoff(void); 382e887ea33SDavid du Colombier void dynreloc(Sym*, ulong, int); 383e887ea33SDavid du Colombier vlong entryvalue(void); 384e887ea33SDavid du Colombier void errorexit(void); 385e887ea33SDavid du Colombier void export(void); 386b87cd620SDavid du Colombier int fileexists(char*); 387e887ea33SDavid du Colombier int find1(long, int); 388e887ea33SDavid du Colombier int find2(long, int); 389b87cd620SDavid du Colombier char* findlib(char*); 390e887ea33SDavid du Colombier void follow(void); 391e887ea33SDavid du Colombier void gethunk(void); 392e887ea33SDavid du Colombier void histtoauto(void); 393e887ea33SDavid du Colombier double ieeedtod(Ieee*); 394e887ea33SDavid du Colombier long ieeedtof(Ieee*); 395e887ea33SDavid du Colombier void import(void); 39640d01547SDavid du Colombier int isxyreg(int); 397e887ea33SDavid du Colombier void ldobj(int, long, char*); 398e887ea33SDavid du Colombier void loadlib(void); 399e887ea33SDavid du Colombier void listinit(void); 4008153b942SDavid du Colombier void llput(vlong v); 4018153b942SDavid du Colombier void llputl(vlong v); 40240d01547SDavid du Colombier Sym* lookup(char*, int); 403e887ea33SDavid du Colombier void lput(long); 404e887ea33SDavid du Colombier void lputl(long); 405e887ea33SDavid du Colombier void main(int, char*[]); 406e887ea33SDavid du Colombier void mkfwd(void); 407e887ea33SDavid du Colombier void* mysbrk(ulong); 408e887ea33SDavid du Colombier void nuxiinit(void); 409e887ea33SDavid du Colombier void objfile(char*); 410e887ea33SDavid du Colombier int opsize(Prog*); 411e887ea33SDavid du Colombier void patch(void); 412e887ea33SDavid du Colombier Prog* prg(void); 413e887ea33SDavid du Colombier void readundefs(char*, int); 414e887ea33SDavid du Colombier int relinv(int); 415e887ea33SDavid du Colombier long reuse(Prog*, Sym*); 416e887ea33SDavid du Colombier vlong rnd(vlong, vlong); 417e887ea33SDavid du Colombier void span(void); 4188153b942SDavid du Colombier void strnput(char*, int); 419e887ea33SDavid du Colombier void undef(void); 420e887ea33SDavid du Colombier void undefsym(Sym*); 421e887ea33SDavid du Colombier vlong vaddr(Adr*); 4228153b942SDavid du Colombier void wput(long); 4238153b942SDavid du Colombier void wputl(long); 424e887ea33SDavid du Colombier void xdefine(char*, int, vlong); 425e887ea33SDavid du Colombier void xfol(Prog*); 426e887ea33SDavid du Colombier int zaddr(uchar*, Adr*, Sym*[]); 427e887ea33SDavid du Colombier void zerosig(char*); 428