diff options
Diffstat (limited to 'src/pkg/runtime/symtab.c')
| -rw-r--r-- | src/pkg/runtime/symtab.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/pkg/runtime/symtab.c b/src/pkg/runtime/symtab.c index d2ebf9b40..d0468c6dd 100644 --- a/src/pkg/runtime/symtab.c +++ b/src/pkg/runtime/symtab.c @@ -464,3 +464,40 @@ runtime·findfunc(uintptr addr) runtime·prints("findfunc unreachable\n"); return nil; } + +static bool +hasprefix(String s, int8 *p) +{ + int32 i; + + for(i=0; i<s.len; i++) { + if(p[i] == 0) + return 1; + if(p[i] != s.str[i]) + return 0; + } + return p[i] == 0; +} + +static bool +contains(String s, int8 *p) +{ + int32 i; + + if(p[0] == 0) + return 1; + for(i=0; i<s.len; i++) { + if(s.str[i] != p[0]) + continue; + if(hasprefix((String){s.str + i, s.len - i}, p)) + return 1; + } + return 0; +} + +bool +runtime·showframe(Func *f) +{ + // return 1; // for debugging - show all frames + return contains(f->name, ".") && !hasprefix(f->name, "runtime."); +} |
