|
|
1.1 ! root 1: this is a bit of a horror. ! 2: ! 3: the stab interface (to sdb and pi) has been hacked mercilessly until it works. ! 4: it's all pretty fragile, and probably somewhat buggy. things to beware ! 5: especially: ! 6: ! 7: f77 is a pcc1 compiler. c is a pcc2 compiler these days. over the years, ! 8: c has gained types, sort of; the pcc internal representation of types (which ! 9: is put out in the type field of the stab) has changed too. (and the printed ! 10: V8 manuals get it wrong, by the way; the online manual is correct.) f77, ! 11: being an old compiler, uses the old representation; it has to convert it ! 12: to the new one when it prints stabs. ! 13: ! 14: pcc1 used to put out symbols at the top of each block, followed by the ! 15: line number markers (N_SLINEs). f77 used some horrible hackery to make ! 16: that happen, as it didn't know enough about symbols until the end (think ! 17: about implicit declarations). pcc2 puts symbols after N_SLINEs. sdb now ! 18: wants things that way too. f77 has followed along. ! 19: ! 20: common and equivalence are nightmares. one would like to simply spit out ! 21: a stab for each piece of the common, pointing at the address of that piece; ! 22: unfortunately, offsets to commons don't work in the symbol table (it ! 23: requires the relocation info to make it work, and there's no relocation ! 24: data for symbols, logically enough). hence these monsters are put out as ! 25: crypto-structures, in the following format: ! 26: .stabs "cname",N_BCOMM,0,0,0 ! 27: .stabs "element",N_SSYM,0,type,offset ! 28: ... ! 29: .stabs "cname",N_ECOMM,0,0,0 ! 30: when a debugger wants the address of `element', having noted that it is ! 31: a N_SSYM within the BCOMM/ECOMM (or BCOMM/ECOML, see below) brackets, it ! 32: should pick up `cname' from the ECOMM, prepend an `_' to make an external ! 33: name of it, look that name up in the symbol table to find the address of ! 34: the common region, and add the offset. ! 35: ! 36: sometimes the endmarker isn't an ECOML, but is ! 37: .stabs "",N_ECOML,0,0,addr ! 38: e.g. when you've equivalenced two non-common variables together. this ! 39: means `element's address is addr+offset. ! 40: ! 41: enough. sdb works, sort of. pi works, but not on commons nor equivalences. ! 42: (tough.) ! 43: ! 44: it is probably impossible to make a pdp11 compiler without lots of work.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.