binutils-gdb/gdb/nat
Simon Marchi 466eeceef4 lwp_info: Make the arch code free arch_lwp_info
I have the goal of "poisoning" the XNEW/xfree-family of functions, so
that we catch their usages with non-POD types.  A few things need to be
fixed in the mean time, this is one.

The common lwp code in linux-nat.c and gdbserver/linux-low.c xfrees the
private lwp data of type arch_lwp_info.  However, that type is opaque
from its point of view, as its defined differently in each arch-specific
implementation.  This trips on the std::is_pod<T> check, since the
compiler can't tell whether the type is POD or not if it doesn't know
about it.

My initial patch [1] made a class hierarchy with a virtual destructor.
However, as Pedro pointed out, we only have one native architecture at
the time built in gdb and gdbserver, so that's overkill.  Instead, we
can move the responsibility of free'ing arch_lwp_info to the arch code
(which is also the one that allocated it in the first place).  This is
what this patch does.

Also, I had the concern that if we wanted to use C++ features in these
structures, we would have a problem with the one-definition rule.
However, since a build will only have one version of arch_lwp_info,
that's not a problem.

There are changes in arch-specific files, I was only able to built-test
this patch with the following cross-compilers:

  aarch64-linux-gnu
  alpha-linux-gnu
  arm-linux-gnueabihf
  hppa-linux-gnu
  m68k-linux-gnu
  mips64el-linux-gnuabi64
  powerpc64-linux-gnu
  s390x-linux-gnu
  sh4-linux-gnu
  sparc64-linux-gnu
  x86_64-linux-gnu
  x86_64-w64-mingw32

A buildbot run didn't find any regression.

[1] https://sourceware.org/ml/gdb-patches/2017-08/msg00255.html

gdb/ChangeLog:

	* linux-nat.h (linux_nat_set_delete_thread): New declaration.
	* linux-nat.c (linux_nat_delete_thread): New variable.
	(lwp_free): Invoke linux_nat_delete_thread if set.
	(linux_nat_set_delete_thread): New function.
	* aarch64-linux-nat.c (_initialize_aarch64_linux_nat): Assign
	thread delete callback.
	* arm-linux-nat.c (arm_linux_delete_thread): New function.
	(_initialize_arm_linux_nat): Assign thread delete callback.
	* s390-linux-nat.c (s390_delete_thread): New function.
	(_initialize_s390_nat): Assign thread delete callback.
	* x86-linux-nat.c (x86_linux_add_target): Likewise.
	* nat/aarch64-linux.c (aarch64_linux_delete_thread): New
	function.
	* nat/aarch64-linux.h (aarch64_linux_delete_thread): New
	declaration.
	* nat/x86-linux.c (x86_linux_delete_thread): New function.
	* nat/x86-linux.h (x86_linux_delete_thread): New declaration.

gdb/gdbserver/ChangeLog:

	* linux-aarch64-low.c (the_low_target): Add thread delete
	callback.
	* linux-arm-low.c (arm_delete_thread): New function.
	(the_low_target): Add thread delete callback.
	* linux-bfin-low.c (the_low_target): Likewise.
	* linux-crisv32-low.c (the_low_target): Likewise.
	* linux-low.c (delete_lwp): Invoke delete_thread callback if
	set.
	* linux-low.h (struct linux_target_ops) <delete_thread>: New
	field.
	* linux-m32r-low.c (the_low_target): Add thread delete callback.
	* linux-mips-low.c (mips_linux_delete_thread): New function.
	(the_low_target): Add thread delete callback.
	* linux-ppc-low.c (the_low_target): Likewise.
	* linux-s390-low.c (the_low_target): Likewise.
	* linux-sh-low.c (the_low_target): Likewise.
	* linux-tic6x-low.c (the_low_target): Likewise.
	* linux-tile-low.c (the_low_target): Likewise.
	* linux-x86-low.c (the_low_target): Likewise.
	* linux-xtensa-low.c (the_low_target): Likewise.
2017-10-12 16:48:22 -04:00
..
aarch64-linux-hw-point.c update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
aarch64-linux-hw-point.h Include break-common.h in nat/aarch64-linux-hw-point.h 2017-01-06 14:33:01 +00:00
aarch64-linux.c lwp_info: Make the arch code free arch_lwp_info 2017-10-12 16:48:22 -04:00
aarch64-linux.h lwp_info: Make the arch code free arch_lwp_info 2017-10-12 16:48:22 -04:00
amd64-linux-siginfo.c update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
amd64-linux-siginfo.h Include signal.h in nat/amd64-linux-siginfo.h 2017-01-06 14:33:01 +00:00
fork-inferior.c Implement "set cwd" command on GDB 2017-10-04 01:59:30 -04:00
fork-inferior.h Add ATTRIBUTE_PRINTF to trace_start_error 2017-06-17 23:19:25 +02:00
gdb_ptrace.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
gdb_thread_db.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
glibc_thread_db.h
linux-btrace.c Introduce and use gdb_file_up 2017-08-03 07:58:52 -06:00
linux-btrace.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
linux-namespaces.c update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
linux-namespaces.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
linux-nat.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
linux-osdata.c Introduce and use gdb_file_up 2017-08-03 07:58:52 -06:00
linux-osdata.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
linux-personality.c update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
linux-personality.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
linux-procfs.c Rename _const functions to use overloading instead 2017-09-11 15:46:12 -06:00
linux-procfs.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
linux-ptrace.c nat/linux-ptrace.c: add missing gdb_byte* cast 2017-06-18 23:29:03 +02:00
linux-ptrace.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
linux-waitpid.c linux-waitpid: Get rid of format string warning 2017-09-21 15:19:40 +02:00
linux-waitpid.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
mips-linux-watch.c update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
mips-linux-watch.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
ppc-linux.c update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
ppc-linux.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
x86-cpuid.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
x86-dregs.c x86-dregs: Print debug registers one per line 2017-06-25 12:40:10 +02:00
x86-dregs.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
x86-gcc-cpuid.h Sync up x86-gcc-cpuid.h with cpuid.h from gcc-6 branch. 2017-02-17 11:43:39 +01:00
x86-linux-dregs.c update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
x86-linux-dregs.h update copyright year range in GDB files 2017-01-01 10:52:34 +04:00
x86-linux.c lwp_info: Make the arch code free arch_lwp_info 2017-10-12 16:48:22 -04:00
x86-linux.h lwp_info: Make the arch code free arch_lwp_info 2017-10-12 16:48:22 -04:00