From 7112c1cccfce2d76571d23de1af819e126ecbbdd Mon Sep 17 00:00:00 2001 From: Patrick Lipka Date: Mon, 18 Aug 2025 17:09:59 +0200 Subject: [PATCH] add public API --- src/rvprof_symbols.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/rvprof_symbols.c b/src/rvprof_symbols.c index 4da63fe..9606516 100644 --- a/src/rvprof_symbols.c +++ b/src/rvprof_symbols.c @@ -326,4 +326,38 @@ const char* rvprof_symbols_lookup(void* addr){ // fallback to addresses if we cannot resolve symbols snprintf(g_tmp_func_name, sizeof(g_tmp_func_name), "func_%p", addr); return g_tmp_func_name; +} + +// public API +rvprof_error_t rvprof_symbols_init(const char* program_path){ + // option 1: provided path + if (program_path && parse_elf_symbols(program_path) == 0){ + return RVPROF_SUCCESS; + } + + // option 2: try /proc/self/exe (Linux only) + if (parse_elf_symbols("/proc/self/exe") == 0){ + return RVPROF_SUCCESS; + } + + // option 3: try typical paths + const char* fallbacks[] = { + "a.out", + "./a.out", + NULL + }; + + for (int i=0; fallbacks[i]; i++){ + if (parse_elf_symbols(fallbacks[i]) == 0){ + return RVPROF_SUCCESS; + } + } + + // symbol loading failed, fall back to addresses + return RVPROF_ERROR_SYMBOLS; +} + +void rvprof_symbols_cleanup(void){ + symbol_array_cleanup(&g_rvprof.symbols); + g_rvprof.symbols_loaded = 0; } \ No newline at end of file