URI:
       tstabs.c - 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
       ---
       tstabs.c (982B)
       ---
            1 #include <u.h>
            2 #include <libc.h>
            3 #include <mach.h>
            4 #include "stabs.h"
            5 
            6 /*
            7 http://sources.redhat.com/gdb/onlinedocs/stabs.html
            8 */
            9 
           10 int
           11 stabsym(Stab *stabs, int i, StabSym *sym)
           12 {
           13         uchar *p;
           14         ulong x;
           15 
           16         if(stabs == nil){
           17                 werrstr("no stabs");
           18                 return -1;
           19         }
           20         if(stabs->e2==0 || stabs->e4==0){
           21                 werrstr("no data extractors");
           22                 return -1;
           23         }
           24 
           25         if(i >= stabs->stabsize/12){
           26                 werrstr("stabs index out of range");
           27                 return -1;
           28         }
           29 
           30         p = stabs->stabbase+i*12;
           31         x = stabs->e4(p);
           32         if(x == 0)
           33                 sym->name = nil;
           34         else if(x < stabs->strsize)
           35                 sym->name = stabs->strbase+x;
           36         else{
           37                 werrstr("bad stabs string index");
           38                 return -1;
           39         }
           40 
           41         /*
           42          * In theory, if name ends with a backslash,
           43          * it continues into the next entry.  We could
           44          * rewrite these in place and then zero the next
           45          * few entries, but let's wait until we run across
           46          * some system that generates these.
           47          */
           48         sym->type = p[4];
           49         sym->other = p[5];
           50         sym->desc = stabs->e2(p+6);
           51         sym->value = stabs->e4(p+8);
           52         return 0;
           53 }