GDB locate TLS variable from core

Viewed 621

In debugging a core file, I can find the pthread_specific data but I have not found a way to access __thread data such as errno.

The access is via %fs:0x0 register and I can disassemble __errno_location to find its relative address from %fs:0x0 but I don't see a way to resolve it on a per thread basis as it seems like the base %fs value is not available to GDB.

Example:

Dump of assembler code for function __errno_location:
   0x00007fefa83911f0 <+0>: push   %rbp
   0x00007fefa83911f1 <+1>: mov    0x206d90(%rip),%rax        # 0x7fefa8597f88
   0x00007fefa83911f8 <+8>: add    %fs:0x0,%rax
   0x00007fefa8391201 <+17>:    mov    %rsp,%rbp
   0x00007fefa8391204 <+20>:    pop    %rbp
   0x00007fefa8391205 <+21>:    retq   
End of assembler dump.

Is there a way to find out what the value of %fs:0x0 would be for the current thread?

The info registers command shows only this for the segment registers:

ds             0x0  0
es             0x0  0
fs             0x0  0
gs             0x0  0

libc version: 2.17
libc.so.6 debug not currently installed
GDB version: GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1

0 Answers
Related