Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87a6ezx8wc.fsf@oldenburg.str.redhat.com>
Date: Thu, 10 Feb 2022 12:23:31 +0100
From: Florian Weimer <fweimer@...hat.com>
To: Rich Felker <dalias@...c.org>
Cc: Yehuda Yitchak <yehuda80@...il.com>,  musl@...ts.openwall.com
Subject: Re: Accessing Thread-Local-Storage in GDB

* Rich Felker:

> Indeed, I was just offering a quick workaround that might help, not
> suggesting gdb should do that. __tls_get_addr can be used for
> non-dynamic symbols with information already available to the
> debugger. For core files you could probably simulate execution and
> abort if anything is reached that would need to change process state
> (lazy allocation) although that doesn't happen with musl anyway. But I
> wonder if the core file even records the x86 segment information
> needed to preserve thread pointer and simulate the %fs/%gs based
> loads on x86[_64]..?

The register is available as $fs_base on x86-64:

(gdb) print (void *)$fs_base
$1 = (void *) 0x7f2d12981740
(gdb) print *(void **)$fs_base
$2 = (void *) 0x7f2d12981740

It probably does not work on i386 (even as $gs_base).  I do not think it
depends on FSGSBASE support in the kernel, but maybe I'm mistaken.  I
think I looked at this three years ago and couldn't make it work.

Thanks,
Florian

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.