From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20971 invoked by alias); 21 Nov 2004 00:58:01 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 20888 invoked from network); 21 Nov 2004 00:57:55 -0000 Received: from unknown (HELO lisa.goe.net) (134.76.166.209) by sourceware.org with SMTP; 21 Nov 2004 00:57:55 -0000 Received: from mutter.goe.net (mail@mutter-lisa0.a11.private [192.168.31.26]) by lisa.goe.net (8.12.10/8.12.10) with ESMTP id iAL0vrF2022325 for ; Sun, 21 Nov 2004 01:57:53 +0100 Received: from igel.a11.private ([192.168.31.91]) by mutter.goe.net with esmtp (Exim 4.42) id 1CVg37-0002B6-1B for gdb-patches@sources.redhat.com; Sun, 21 Nov 2004 01:57:53 +0100 Received: by igel.a11.private (Postfix, from userid 500) id 805A410C1C5; Sun, 21 Nov 2004 01:57:52 +0100 (CET) To: gdb-patches@sources.redhat.com Subject: Re: pthreads debug with gdbserver References: <200411191233.22357.vladimir.vorobyov@iss.org.ua> <200411191641.15822.vladimir.vorobyov@iss.org.ua> <20041120013220.GB27485@nevyn.them.org> <200411201427.13557.vladimir.vorobyov@iss.org.ua> <20041120164209.GA15174@nevyn.them.org> From: Andreas Schwab X-Yow: Are we live or on tape? Date: Sun, 21 Nov 2004 00:58:00 -0000 In-Reply-To: <20041120164209.GA15174@nevyn.them.org> (Daniel Jacobowitz's message of "Sat, 20 Nov 2004 11:42:10 -0500") Message-ID: User-Agent: Gnus/5.110002 (No Gnus v0.2) Emacs/21.3.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-SW-Source: 2004-11/txt/msg00419.txt.bz2 Daniel Jacobowitz writes: > Take a look at the source code to gdbserver. Andreas, now I remember > why I enabled thread_db support on a per-target basis - there are other > support routines that have to be written. Here is the gdbserver support for thread_db and regsets on m68k-linux. OK? Andreas. 2004-11-21 Andreas Schwab * linux-m68k-low.c (m68k_num_gregs): Define. (m68k_fill_gregset, m68k_store_gregset, m68k_fill_fpregset) (m68k_store_fpregset, target_regsets) [HAVE_LINUX_REGSETS]: New. (m68k_breakpoint, m68k_breakpoint_len, m68k_get_pc, m68k_set_pc) (m68k_breakpoint_at): New. Add to the_low_target. * configure.srv (m68*-*-linux*): Set srv_linux_regsets and srv_linux_thread_db to yes. Index: gdb/gdbserver/configure.srv =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/gdbserver/configure.srv,v retrieving revision 1.7 diff -u -a -p -r1.7 configure.srv --- gdb/gdbserver/configure.srv 8 Aug 2003 00:47:28 -0000 1.7 +++ gdb/gdbserver/configure.srv 21 Nov 2004 00:54:18 -0000 @@ -36,6 +36,8 @@ case "${target}" in m68*-*-linux*) srv_regobj=3Dreg-m68k.o srv_tgtobj=3D"linux-low.o linux-m68k-low.o" srv_linux_usrregs=3Dyes + srv_linux_regsets=3Dyes + srv_linux_thread_db=3Dyes ;; mips*-*-linux*) srv_regobj=3Dreg-mips.o srv_tgtobj=3D"linux-low.o linux-mips-low.o" Index: gdb/gdbserver/linux-m68k-low.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvs/src/src/gdb/gdbserver/linux-m68k-low.c,v retrieving revision 1.4 diff -u -a -p -r1.4 linux-m68k-low.c --- gdb/gdbserver/linux-m68k-low.c 4 Jan 2003 21:55:30 -0000 1.4 +++ gdb/gdbserver/linux-m68k-low.c 21 Nov 2004 00:54:18 -0000 @@ -1,5 +1,5 @@ /* GNU/Linux/m68k specific low level interface, for the remote server for = GDB. - Copyright 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003 + Copyright 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. =20 This file is part of GDB. @@ -27,6 +27,7 @@ #endif =20 #define m68k_num_regs 29 +#define m68k_num_gregs 18 =20 /* This table must line up with REGISTER_NAMES in tm-m68k.h */ static int m68k_regmap[] =3D @@ -64,9 +65,103 @@ m68k_cannot_fetch_register (int regno) return (regno >=3D m68k_num_regs); } =20 +#ifdef HAVE_LINUX_REGSETS +#include +#include + +static void +m68k_fill_gregset (void *buf) +{ + int i; + + for (i =3D 0; i < m68k_num_gregs; i++) + collect_register (i, (char *) buf + m68k_regmap[i]); +} + +static void +m68k_store_gregset (const void *buf) +{ + int i; + + for (i =3D 0; i < m68k_num_gregs; i++) + supply_register (i, (const char *) buf + m68k_regmap[i]); +} + +static void +m68k_fill_fpregset (void *buf) +{ + int i; + + for (i =3D m68k_num_gregs; i < m68k_num_regs; i++) + collect_register (i, ((char *) buf + + (m68k_regmap[i] - m68k_regmap[m68k_num_gregs]))); +} + +static void +m68k_store_fpregset (const void *buf) +{ + int i; + + for (i =3D m68k_num_gregs; i < m68k_num_regs; i++) + supply_register (i, ((const char *) buf + + (m68k_regmap[i] - m68k_regmap[m68k_num_gregs]))); +} + + +struct regset_info target_regsets[] =3D { + { PTRACE_GETREGS, PTRACE_SETREGS, sizeof (elf_gregset_t), + GENERAL_REGS, + m68k_fill_gregset, m68k_store_gregset }, + { PTRACE_GETFPREGS, PTRACE_SETFPREGS, sizeof (elf_fpregset_t), + FP_REGS, + m68k_fill_fpregset, m68k_store_fpregset }, + { 0, 0, -1, -1, NULL, NULL } +}; + +#endif /* HAVE_LINUX_REGSETS */ + +static const char m68k_breakpoint[] =3D { 0x4E, 0x4F }; +#define m68k_breakpoint_len 2 + +static CORE_ADDR +m68k_get_pc () +{ + unsigned long pc; + + collect_register_by_name ("pc", &pc); + return pc; +} + +static void +m68k_set_pc (CORE_ADDR value) +{ + unsigned long newpc =3D value; + + supply_register_by_name ("pc", &newpc); +} + +static int +m68k_breakpoint_at (CORE_ADDR pc) +{ + unsigned char c[2]; + + read_inferior_memory (pc, c, 2); + if (c[0] =3D=3D 0x4E && c[1] =3D=3D 0x4F) + return 1; + + return 0; +} + struct linux_target_ops the_low_target =3D { m68k_num_regs, m68k_regmap, m68k_cannot_fetch_register, m68k_cannot_store_register, + m68k_get_pc, + m68k_set_pc, + m68k_breakpoint, + m68k_breakpoint_len, + NULL, + 2, + m68k_breakpoint_at, }; --=20 Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux Products GmbH, Maxfeldstra=C3=9Fe 5, 90409 N=C3=BCrnberg, Germany Key fingerprint =3D 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."