plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

Notes.stab (4678B)


      1 stabs
      2 
      3 N_MAIN with name "main" to identify entry function
      4 N_SO source file.  might be preceded by dir ending in /
      5 	value is code ptr
      6 	empty string means source done
      7 N_SOL source include file, value = text addr of where this starts
      8 N_SLINE start of source line
      9 	no name
     10 	desc = line number
     11 	value = code addr for that line
     12 
     13 N_FUN (36) function def
     14 	'F' global 'f' local
     15 	value = addr
     16 	desc = line number of def
     17 	return type is number after :
     18 
     19 	nil name marks end of function
     20 
     21 constants
     22 
     23 	c= XXX p. 15
     24 
     25 N_LSYM (128) local variable
     26 	:type-number
     27 	value = offset from fp
     28 	:ptype means parameter passed in reg but stored as variable
     29 
     30 N_GSYM (32) global variable
     31 	addr not given (use external symbol)
     32 	:type
     33 
     34 N_RSYM register value
     35 
     36 N_STSYM(38)/N_FUN/N_LCSYM(40) data/text/bss
     37 	static varibale 'S' file static 'V' procedure static
     38 	:Stype :Vtype
     39 
     40 N_PSYM (160) parameter 
     41 	:ptype
     42 	value=offset from fp
     43 	desc = line number of decl
     44 
     45 	register params followed by an N_RSYM with same name and :rtype.
     46 
     47 skip types
     48 
     49 type (a,b) means a=file number b=type number
     50 
     51 N_BINCL/N_EINCL begin/end include
     52 N_EXCL - same effect as earlier guy
     53 
     54 
     55 
     56 =============
     57 
     58 type crap
     59 
     60 
     61 
     62 	name:symbol_opt typeinfo
     63 
     64 typeinfo ::= typenum | typenum = attr* typedef
     65 
     66 typenum ::= integer | '(' integer ',' integer ')'
     67 
     68 attr ::= @ attrtext ;
     69 
     70 attrtext ::= 'a' integer 	(alignment)
     71 	| 'p' integer	(pointer class)
     72 	| 'P'	(packed type)
     73 	| 's' integer	(size of type in bits)
     74 	| 'S' 	(string instead of array of chars)
     75 
     76 typedef ::= typeinfo
     77 	| 'b' ('u' | 's') 'c'? width; offset; nbits; 		(builtin, signed/unsigned, char/not, width in bytes, offset & nbits of type)
     78 	| 'w'		(aix wide char type, not used)
     79 	| 'R' fptype; bytes;			(fptype 1=32-bit, 2=64-bit, 3=complex, 4=complex16, 5=complex32, 6=long double)
     80 	| 'g' typeinfo ';' nbits 		(aix floating, not used)
     81 	| 'c' typeinfo ';' nbits		(aix complex, not used)
     82 	| -1		int32
     83 	| -2		char8
     84 	| -3		int16
     85 	| -4		int32 (long)
     86 	| -5		uchar8
     87 	| -6		schar8
     88 	| -7		uint16
     89 	| -8		uint32
     90 	| -9		uint32
     91 	| -10		ulong32
     92 	| -11		void
     93 	| -12		float
     94 	| -13		double
     95 	| -14		long double
     96 	| -15		int32
     97 	| -16		bool32
     98 	| -17		short real
     99 	| -18		real
    100 	| -19		stringptr
    101 	| -20		character8
    102 	| -21		logical*1 8
    103 	| -22		logical*2 16
    104 	| -23		logical*4 32
    105 	| -24		logical 32
    106 	| -25		complex (two single)
    107 	| -26		complex (two double)
    108 	| -27		integer*1 8 signed
    109 	| -28		integer*2 16 signed
    110 	| -29		integer*4 32 signed
    111 	| -30		wchar 16 wide char
    112 	| -31		int64
    113 	| -32		uint64
    114 	| -33		logical*8 64
    115 	| -34		integer*8 64 signed
    116 	| 'b' typeinfo ';' bytes		(ibm, no idea)
    117 	| 'B' typeinfo		(volatile typref)
    118 	| 'd' typeinfo		(file of typeref)
    119 	| 'k' typeinfo		(const typeref)
    120 	| 'M' typeinfo ';' length		(multiple instance type, fortran)
    121 	| 'S' typeinfo		(set, typeref must have small number of values)
    122 	| '*' typeinfo		(pointer to typeref)
    123 	| 'x' ('s'|'u'|'e') name ':'	(struct, union, enum reference.  name can have '::' in it)
    124 	| 'r' typeinfo ';' low ';' high ';'		(subrange.  typeref can be type being defined for base types!)
    125 			low and high are bounds
    126 			if bound is octal power of two, it's a big negative number
    127 	| ('a'|'P') indextypedef arraytypeinfo 	(array, index should be range type)
    128 				indextype is type definition not typeinfo (need not say typenum=)
    129 				P means packed array
    130 	| 'A' arraytypeinfo		(open array (no index bounds))
    131 	| 'D' dims ';' typeinfo		(dims-dimensional dynamic array)
    132 	| 'E' dims ';' typeinfo		(subarray of N-dimensional array)
    133 	| 'n' typeinfo ';' bytes		(max length string)
    134 	| 'z' typeinfo ';' bytes		(no idea what difference is from 'n')
    135 	| 'N'					(pascal stringptr)
    136 	| 'e' (name ':' bigint ',')* ';'	(enum listing)
    137 	| ('s'|'u') bytes (name ':' type ',' bitoffset ',' bitsize ';')* ';'		(struct/union defn)
    138 						tag is given as name in stabs entry, with 'T' symbol
    139 	| 'f' typeinfo ';' 			(function returning type)
    140 	| 'f' rettypeinfo ',' paramcount ';' (typeinfo ',' (0|1) ';')* ';'
    141 	| 'p' paramcount ';' (typeinfo ',' (0|1) ';')* ';'
    142 	| 'F' rettypeinfo ',' paramcount ';' (name ':' typeinfo ',' (0|1) ';')* ';'
    143 	| 'R' paramcount ';' (name ':' typeinfo ',' (0|1) ';')* ';'
    144 						(the 0 or 1 is pass-by-reference vs pass-by-value)
    145 						(the 0 or 1 is pass-by-reference vs pass-by-value)
    146 
    147 bound ::= 
    148 	'A' offset			(bound is on stack by ref at offset offset from arg list)
    149 	| 'T' offset			(bound is on stack by val at offset offset from arg list)
    150 	| 'a' regnum		(bound passed by reference in register)
    151 	| 't' regnum		(bound passed by value in register)
    152 	| 'J'				(no bound)
    153 	| bigint
    154 
    155 bigint ::= '-'? decimal
    156 	| 0 octal
    157 	| -1
    158 
    159 C++
    160 
    161 symbol 'Tt' means typename + tag in one stab
    162 
    163 names can have ::, as in foo::bar::baz::t1
    164 
    165 t16 unknown type just like void
    166 t17 vtable record type