#include <u.h>
#include <libc.h>
#include <mach.h>
#include "stabs.h"

/*
http://sources.redhat.com/gdb/onlinedocs/stabs.html
*/

int
stabsym(Stab *stabs, int i, StabSym *sym)
{
	uchar *p;
	ulong x;

	if(stabs == nil){
		werrstr("no stabs");
		return -1;
	}
	if(stabs->e2==nil || stabs->e4==nil){
		werrstr("no data extractors");
		return -1;
	}

	if(i >= stabs->stabsize/12){
		werrstr("stabs index out of range");
		return -1;
	}

	p = stabs->stabbase+i*12;
	x = stabs->e4(p);
	if(x == 0)
		sym->name = nil;
	else if(x < stabs->strsize)
		sym->name = stabs->strbase+x;
	else{
		werrstr("bad stabs string index");
		return -1;
	}

	/*
	 * In theory, if name ends with a backslash,
	 * it continues into the next entry.  We could
	 * rewrite these in place and then zero the next
	 * few entries, but let's wait until we run across
	 * some system that generates these.
	 */
	sym->type = p[4];
	sym->other = p[5];
	sym->desc = stabs->e2(p+6);
	sym->value = stabs->e4(p+8);
	return 0;
}

