inline const string formatFrame()

in kernel/monad.hpp [291:335]


inline const string formatFrame(const char* const symbol) {
#ifdef __clang__
    // Mac OS X CLang/LLVM stack frame format
    // 0 kernel-test 0x000000010d440179 _ZN7tuscany9mkfailureINS_5valueENS_6stringEiEEKNS_8failableIT_T0_T1_EERKS5_RKS6_b + 265
    char nb[3];
    char file[256];
    char addr[32];
    char fun[256];
    char offset[16];
    if (sscanf(symbol, "%2s %255s %31s %255s %*[+] %15s", nb, file, addr, fun, offset) == 5) {
        char buf[1024];
        if (debug_islogging())
            sprintf(buf, "%.255s %.31s %.511s + %.15s", formatFrameFile(file), addr, c_str(demangleFrame(fun)), offset);
        else
            sprintf(buf, "%.255s %.31s", formatFrameFile(file), addr);
        return buf;
    }
#else
    // Linux GCC stack frame format
    // ./kernel-test(_ZN7tuscany9mkfailureINS_5valueENS_6stringEiEEKNS_8failableIT_T0_T1_EERKS5_RKS6_b+0x23d) [0xb7197afd]
    char file[256];
    char fun[256];
    char offset[16];
    char addr[32];
    if (sscanf(symbol, "%[^(]%*[(]%[^+]%*[+]%[^)]%*[)] %*[[]%[^]]%*[]]", file, fun, offset, addr) == 4) {
        char buf[1024];
        if (debug_islogging())
            sprintf(buf, "%.255s %.31s %.511s + %.15s", formatFrameFile(file), addr, c_str(demangleFrame(fun)), offset);
        else
            sprintf(buf, "%.255s %.31s", formatFrameFile(file), addr);
        return buf;
    }
    if (sscanf(symbol, "%[^(]%*[(]%*[^)]%*[)] %*[[]%[^]]%*[]]", file, addr) == 2) {
        char buf[512];
        sprintf(buf, "%.255s %.31s", formatFrameFile(file), addr);
        return buf;
    }
    if (sscanf(symbol, "%[^(]%*[(]%*[)] %*[[]%[^]]%*[]]", file, addr) == 2) {
        char buf[512];
        sprintf(buf, "%.255s %.31s", formatFrameFile(file), addr);
        return buf;
    }
#endif
    return symbol;
}