При отладке файла ядра я могу найти данные pthread_specific
, но я не нашел способа доступа к __thread
данным, таким как errno
.
Доступ осуществляется через %fs:0x0
регистр, и я могу разобрать __errno_location
, чтобы найти его относительный адрес из %fs:0x0
, но я не вижу способа разрешить его для каждого потока, как это выглядит базовое значение %fs
недоступно для GDB.
Пример:
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.
Есть ли способ узнать, какое значение %fs:0x0
будет для текущего потока?
Команда info registers
показывает только это для регистров сегмента:
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
lib c версия: 2.17
lib c .so.6 отладка, в настоящее время не установленная
Версия GDB: GNU gdb (Ubuntu 7.11.1-0ubuntu1 ~ 16.5) 7.11.1