name mangling, process control
diff --git a/src/libmach/sym.c b/src/libmach/sym.c
index 4730fdc..c3d0519 100644
--- a/src/libmach/sym.c
+++ b/src/libmach/sym.c
@@ -491,6 +491,8 @@
 Symbol*
 _addsym(Fhdr *fp, Symbol *sym)
 {
+	char *t;
+	static char buf[65536];
 	Symbol *s;
 
 	if(fp->nsym%128 == 0){
@@ -502,6 +504,12 @@
 	if(machdebug)
 		fprint(2, "sym %s %c %L\n", sym->name, sym->type, sym->loc);
 	sym->fhdr = fp;
+	t = demangle(sym->name, buf, 1);
+	if(t != sym->name){
+		sym->name = strdup(t);
+		if(sym->name == nil)
+			return nil;
+	}
 	s = &fp->sym[fp->nsym++];
 	*s = *sym;
 	return s;