diff --git a/librz/core/linux_heap_glibc.c b/librz/core/linux_heap_glibc.c index adc8711ffa..a4f533a466 100644 --- a/librz/core/linux_heap_glibc.c +++ b/librz/core/linux_heap_glibc.c @@ -886,9 +886,14 @@ static bool GH(parse_tcache_from_addr)(RzCore *core, GHT tls_addr, GHT tid) { */ static bool GH(parse_tls_data)(RzCore *core, RZ_NONNULL RzDebugPid *th, GHT tid) { + rz_return_val_if_fail(th, false); GHT tls_addr = GHT_MAX; ut8 dtv[sizeof(GHT)] = { 0 }; + if (!th->tls) { + return false; + } + rz_io_nread_at(core->io, th->tls + (SZ), dtv, sizeof(GHT)); GHT addr = GH(read_val)(core, dtv, false); memset(dtv, 0, sizeof(dtv)); diff --git a/librz/debug/p/native/linux/linux_debug.c b/librz/debug/p/native/linux/linux_debug.c index 6c123c79a3..df4a9b4cb6 100644 --- a/librz/debug/p/native/linux/linux_debug.c +++ b/librz/debug/p/native/linux/linux_debug.c @@ -890,6 +890,7 @@ RZ_API ut64 get_linux_tls_val(RZ_NONNULL RzDebug *dbg, int tid) { rz_debug_reg_sync(dbg, RZ_REG_TYPE_GPR, false); } +#if (__x86_64__ || __i386__) RzRegItem *ri = rz_reg_get(dbg->reg, "fs", RZ_REG_TYPE_ANY); RZ_DEBUG_REG_T regs; // Fetch gs_base from a ptrace call @@ -900,6 +901,7 @@ RZ_API ut64 get_linux_tls_val(RZ_NONNULL RzDebug *dbg, int tid) { } else { tls = rz_reg_get_value(dbg->reg, ri); } +#endif // Must execute this block everytime if (dbg->tid != tid) { @@ -961,6 +963,8 @@ RzList /**/ *linux_thread_list(RzDebug *dbg, int pid, RzList /*reg, "fs", RZ_REG_TYPE_ANY); RZ_DEBUG_REG_T regs; // Fetch gs_base from a ptrace call @@ -971,6 +975,7 @@ RzList /**/ *linux_thread_list(RzDebug *dbg, int pid, RzList /*reg, ri); } +#endif if (!procfs_pid_slurp(tid, "status", info, sizeof(info))) { // Get information about pid (status, pc, etc.)