URI:
       tNotes.stab - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tNotes.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