#include "l.h"
#include "../ld/lib.h"
#include "../ld/elf.h"
+#include "../ld/dwarf.h"
static Prog *PP;
if(!debug['s']) {
elfstr[ElfStrSymtab] = addstring(shstrtab, ".symtab");
elfstr[ElfStrStrtab] = addstring(shstrtab, ".strtab");
+ dwarfaddshstrings(shstrtab);
}
elfstr[ElfStrShstrtab] = addstring(shstrtab, ".shstrtab");
cflush();
cwrite(elfstrdat, elfstrsize);
- // if(debug['v'])
- // Bprint(&bso, "%5.2f dwarf\n", cputime());
- // dwarfemitdebugsections();
+ if(debug['v'])
+ Bprint(&bso, "%5.2f dwarf\n", cputime());
+ dwarfemitdebugsections();
}
cflush();
-
}
cursym = nil;
sh->size = elfstrsize;
sh->addralign = 1;
- // dwarfaddelfheaders();
+ dwarfaddelfheaders();
}
/* Main header */
Bprint(&bso, "symsize = %ud\n", symsize);
Bflush(&bso);
}
-
-void
-setpersrc(Sym *s)
-{
- USED(s);
-}
void strnput(char*, int);
int32 symaddr(Sym*);
void undef(void);
+void vputb(uint64);
+void vputl(uint64);
+void wputb(uint16);
void wput(int32);
void wputl(ushort w);
void xdefine(char*, int, int32);
#define VPUT(a) abort()
#endif
+
+/* Used by ../ld/dwarf.c */
+enum
+{
+ DWARFREGSP = 13
+};
q->to.type = D_BRANCH;
q->cond = p->link;
q->link = blitrl;
+ q->line = p->line;
blitrl = q;
}
else if(!force && (p->pc+pool.size-pool.start < 2048))
return 0;
elitrl->link = p->link;
p->link = blitrl;
+ // BUG(minux): how to correctly handle line number for constant pool entries?
+ // for now, we set line number to the last instruction preceding them at least
+ // this won't bloat the .debug_line tables
+ while(blitrl) {
+ blitrl->line = p->line;
+ blitrl = blitrl->link;
+ }
blitrl = 0; /* BUG: should refer back to values until out-of-range */
elitrl = 0;
pool.size = 0;