Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: John Baldwin <jhb@FreeBSD.org>
To: gdb-patches@sourceware.org
Subject: [PATCH 0/9] Support for thread-local variables on FreeBSD
Date: Tue, 22 Jan 2019 18:43:00 -0000	[thread overview]
Message-ID: <cover.1548180889.git.jhb@FreeBSD.org> (raw)

This series adds support for thread-local variables on a few FreeBSD
architectures.  Unlike other platforms, this patch series does not
rely on libthread_db but uses a different approach.  It instead relies
on an architecture-specific method to locate an individual thread's
DTV array of TLS block pointers.  The code to locate the specific TLS
block for an object file is shared in a helper function (patch 5) that
the per-architecture methods invoke after locating the DTV array.
Unlike the libthread_db approach, this permits examining TLS variables
of single-threaded variables and supports arbitrary cross debugging
(subject to the relevant registers being available from a core dump).
This did require introducing a new gdbarch method to resolve a TLS
variable address used instead of a target method (patch 4).

For FreeBSD/i386, TLS variables are stored relative to the %gs segment
register.  This requires access to the base address of %gs to locate
the DTV array.  To facilitate this, the first two patches add support
for the %fs_base and %gs_base registers on i386.  I did test this on
Linux x86-64 where it introduces no new regressions in the test suite
in my testing.

There are some limitations in the FreeBSD TLS support:

1) FreeBSD/amd64 and FreeBSD/i386 do not currently include the
   %fs_base and %gs_base registers in core dumps, so TLS only works
   for "live" processes currently.

2) TLS variables in the executable didn't work for me on FreeBSD/riscv,
   but this appears to be a compiler bug as the variable did not have
   a valid DW_at_location in the dwarf info.  TLS variables in libc
   worked fine both live and with core dumps.

3) For FreeBSD/powerpc, I was only able to test powerpc64 using a
   cross-debugger on amd64.

John Baldwin (9):
  Support the fs_base and gs_base registers on i386.
  Support fs_base and gs_base on FreeBSD/i386.
  Handle TLS variable lookups when using separate debug object files.
  Add a new gdbarch method to resolve the address of TLS variables.
  Add a helper function to resolve TLS variable addresses for FreeBSD.
  Support TLS variables on FreeBSD/amd64.
  Support TLS variables on FreeBSD/i386.
  Support TLS variables on FreeBSD/riscv.
  Support TLS variables on FreeBSD/powerpc.

 gdb/ChangeLog                        |  96 ++++++++++++++++++
 gdb/amd64-bsd-nat.c                  |  26 +++--
 gdb/amd64-fbsd-nat.c                 |   4 +-
 gdb/amd64-fbsd-tdep.c                |  25 +++++
 gdb/amd64-tdep.c                     |  10 +-
 gdb/arch/i386.c                      |   6 +-
 gdb/arch/i386.h                      |   3 +-
 gdb/fbsd-tdep.c                      | 146 +++++++++++++++++++++++++++
 gdb/fbsd-tdep.h                      |  10 ++
 gdb/features/i386/32bit-segments.c   |  15 +++
 gdb/features/i386/32bit-segments.xml |  12 +++
 gdb/gdbarch.c                        |  32 ++++++
 gdb/gdbarch.h                        |   6 ++
 gdb/gdbarch.sh                       |   1 +
 gdb/gdbserver/ChangeLog              |   8 ++
 gdb/gdbserver/linux-x86-tdesc.c      |   2 +-
 gdb/gdbserver/lynx-i386-low.c        |   2 +-
 gdb/gdbserver/nto-x86-low.c          |   2 +-
 gdb/gdbserver/win32-i386-low.c       |   2 +-
 gdb/i386-bsd-nat.c                   |  54 ++++++++++
 gdb/i386-fbsd-nat.c                  |   2 +-
 gdb/i386-fbsd-tdep.c                 |  31 +++++-
 gdb/i386-go32-tdep.c                 |   2 +-
 gdb/i386-linux-tdep.c                |   2 +-
 gdb/i386-tdep.c                      |  33 ++++--
 gdb/i386-tdep.h                      |  12 ++-
 gdb/ppc-fbsd-tdep.c                  |  35 +++++++
 gdb/riscv-fbsd-tdep.c                |  27 +++++
 gdb/solib-svr4.c                     |   5 +
 gdb/target.c                         |  13 ++-
 30 files changed, 580 insertions(+), 44 deletions(-)
 create mode 100644 gdb/features/i386/32bit-segments.c
 create mode 100644 gdb/features/i386/32bit-segments.xml

-- 
2.19.2


             reply	other threads:[~2019-01-22 18:43 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-22 18:43 John Baldwin [this message]
2019-01-22 18:43 ` [PATCH 9/9] Support TLS variables on FreeBSD/powerpc John Baldwin
2019-01-22 18:43 ` [PATCH 1/9] Support the fs_base and gs_base registers on i386 John Baldwin
2019-01-27  4:22   ` Simon Marchi
2019-01-28 17:54     ` John Baldwin
2019-02-02 15:11       ` Simon Marchi
2019-01-22 18:43 ` [PATCH 3/9] Handle TLS variable lookups when using separate debug object files John Baldwin
2019-02-02 15:52   ` Simon Marchi
2019-02-04 20:02     ` John Baldwin
2019-02-05 20:06       ` Simon Marchi
2019-02-05 22:21         ` John Baldwin
2019-02-05 22:33           ` John Baldwin
     [not found]             ` <67973931006085a171ad69952649de33@polymtl.ca>
2019-02-07  4:08               ` Simon Marchi
2019-01-22 18:43 ` [PATCH 7/9] Support TLS variables on FreeBSD/i386 John Baldwin
2019-01-22 18:43 ` [PATCH 6/9] Support TLS variables on FreeBSD/amd64 John Baldwin
2019-01-22 18:43 ` [PATCH 2/9] Support fs_base and gs_base on FreeBSD/i386 John Baldwin
2019-02-02 15:26   ` Simon Marchi
2019-02-04 19:45     ` John Baldwin
2019-02-05 18:59       ` Simon Marchi
2019-01-22 18:52 ` [PATCH 4/9] Add a new gdbarch method to resolve the address of TLS variables John Baldwin
2019-01-22 18:52 ` [PATCH 8/9] Support TLS variables on FreeBSD/riscv John Baldwin
2019-01-27 23:35   ` Andrew Burgess
2019-01-22 18:52 ` [PATCH 5/9] Add a helper function to resolve TLS variable addresses for FreeBSD John Baldwin
2019-01-24 17:09   ` John Baldwin
2019-02-07  5:05     ` Simon Marchi
2019-02-07 17:02       ` John Baldwin
2019-02-09  0:34         ` John Baldwin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1548180889.git.jhb@FreeBSD.org \
    --to=jhb@freebsd.org \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox