This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH v4] gdbserver: bfin: new port


Looks okay, with the cc register removed.  I'd prefer if you wacked away
the unimplemented registers rather than leaving them commented out
behind.

(Some of the minor comments to be gdb patch apply here as well, and
I won't repeat them.)

-- 
Pedro Alves

On Wednesday 15 December 2010 16:47:26, Mike Frysinger wrote:
> From: Jie Zhang <jie.zhang@analog.com>
> 
> Signed-off-by: Jie Zhang <jie.zhang@analog.com>
> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
> 
> gdb/:
> 2010-12-15  Jie Zhang  <jie.zhang@analog.com>
> 
> 	* configure.tgt (bfin-*-*): Set build_gdbserver to yes.
> 	* NEWS: Mention new Blackfin support.
> 	* regformats/reg-bfin.dat: New file.
> 
> gdbserver/:
> 2010-12-15  Jie Zhang  <jie.zhang@analog.com>
> 
> 	* configure.srv (bfin-*-*linux*): Handle Blackfin/Linux targets.
> 	* linux-bfin-low.c: New file.
> 	* linux-low.c: Define PT_TEXT_ADDR, PT_TEXT_END_ADDR, and
> 	PT_DATA_ADDR for BFIN targets.
> 	* Makefile.in (SFILES): Add linux-bfin-low.c.
> 	(clean): Remove reg-bfin.c.
> 	(linux-bfin-low.o, reg-bfin.o, reg-bfin.c): New targets.
> 	* README: Mention supported Blackfin targets.
> ---
> v4
> 	- drop all mention of pseudo flat/fdpic registers
> 	- restrict valid targets to bfin/linux
> 
>  gdb/NEWS                       |    2 +
>  gdb/configure.tgt              |    1 +
>  gdb/gdbserver/Makefile.in      |   10 +++-
>  gdb/gdbserver/README           |    2 +
>  gdb/gdbserver/configure.srv    |    5 ++
>  gdb/gdbserver/linux-bfin-low.c |  108 ++++++++++++++++++++++++++++++++++++++++
>  gdb/gdbserver/linux-low.c      |    4 ++
>  gdb/regformats/reg-bfin.dat    |   57 +++++++++++++++++++++
>  8 files changed, 186 insertions(+), 3 deletions(-)
>  create mode 100644 gdb/gdbserver/linux-bfin-low.c
>  create mode 100644 gdb/regformats/reg-bfin.dat
> 
> diff --git a/gdb/NEWS b/gdb/NEWS
> index 633338a..ba60ae5 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -108,6 +108,8 @@
>    ** GDBserver is now supported on PowerPC LynxOS (versions 4.x and 5.x),
>       and i686 LynxOS (version 5.x).
>  
> +  ** GDBserver is now supported on Blackfin Linux.
> +
>  * New targets:
>  
>  Analog Devices, Inc. Blackfin Processor	bfin-*
> diff --git a/gdb/configure.tgt b/gdb/configure.tgt
> index a4d2386..37a257d 100644
> --- a/gdb/configure.tgt
> +++ b/gdb/configure.tgt
> @@ -109,6 +109,7 @@ avr-*-*)
>  bfin-*-*)
>  	# Target: Blackfin
>  	gdb_target_obs="bfin-tdep.o bfin-linux-tdep.o linux-tdep.o"
> +	build_gdbserver=yes
>  	;;
>  
>  cris*)
> diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
> index 7cf68da..44187eb 100644
> --- a/gdb/gdbserver/Makefile.in
> +++ b/gdb/gdbserver/Makefile.in
> @@ -111,8 +111,8 @@ SFILES=	$(srcdir)/gdbreplay.c $(srcdir)/inferiors.c \
>  	$(srcdir)/proc-service.list $(srcdir)/regcache.c \
>  	$(srcdir)/remote-utils.c $(srcdir)/server.c $(srcdir)/target.c \
>  	$(srcdir)/thread-db.c $(srcdir)/utils.c \
> -	$(srcdir)/linux-arm-low.c $(srcdir)/linux-cris-low.c \
> -	$(srcdir)/linux-crisv32-low.c \
> +	$(srcdir)/linux-arm-low.c $(srcdir)/linux-bfin-low.c \
> +	$(srcdir)/linux-cris-low.c $(srcdir)/linux-crisv32-low.c \
>  	${srcdir}/i386-low.c $(srcdir)/i387-fp.c \
>  	$(srcdir)/linux-ia64-low.c $(srcdir)/linux-low.c \
>  	$(srcdir)/linux-m32r-low.c \
> @@ -263,7 +263,7 @@ clean:
>  	rm -f version.c
>  	rm -f gdbserver$(EXEEXT) gdbreplay$(EXEEXT) core make.log
>  	rm -f $(IPA_LIB)
> -	rm -f reg-arm.c i386.c reg-ia64.c reg-m32r.c reg-m68k.c
> +	rm -f reg-arm.c reg-bfin.c i386.c reg-ia64.c reg-m32r.c reg-m68k.c
>  	rm -f reg-sh.c reg-sparc.c reg-spu.c amd64.c i386-linux.c
>  	rm -f reg-cris.c reg-crisv32.c amd64-linux.c reg-xtensa.c
>  	rm -f arm-with-iwmmxt.c
> @@ -413,6 +413,7 @@ linux-low.o: linux-low.c $(linux_low_h) $(server_h)
>  
>  linux-arm-low.o: linux-arm-low.c $(linux_low_h) $(server_h) \
>  	$(gdb_proc_service_h)
> +linux-bfin-low.o: linux-bfin-low.c $(linux_low_h) $(server_h)
>  linux-cris-low.o: linux-cris-low.c $(linux_low_h) $(server_h)
>  linux-crisv32-low.o: linux-crisv32-low.c $(linux_low_h) $(server_h)
>  linux-ia64-low.o: linux-ia64-low.c $(linux_low_h) $(server_h)
> @@ -455,6 +456,9 @@ arm-with-vfpv3.c : $(srcdir)/../regformats/arm-with-vfpv3.dat $(regdat_sh)
>  arm-with-neon.o : arm-with-neon.c $(regdef_h)
>  arm-with-neon.c : $(srcdir)/../regformats/arm-with-neon.dat $(regdat_sh)
>  	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/arm-with-neon.dat arm-with-neon.c
> +reg-bfin.o : reg-bfin.c $(regdef_h)
> +reg-bfin.c : $(srcdir)/../regformats/reg-bfin.dat $(regdat_sh)
> +	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-bfin.dat reg-bfin.c
>  reg-cris.o : reg-cris.c $(regdef_h)
>  reg-cris.c : $(srcdir)/../regformats/reg-cris.dat $(regdat_sh)
>  	$(SHELL) $(regdat_sh) $(srcdir)/../regformats/reg-cris.dat reg-cris.c
> diff --git a/gdb/gdbserver/README b/gdb/gdbserver/README
> index 6debbd8..3eaeb61 100644
> --- a/gdb/gdbserver/README
> +++ b/gdb/gdbserver/README
> @@ -81,6 +81,8 @@ Building GDBserver:
>  
>  The supported targets as of November 2006 are:
>  	arm-*-linux*
> +	bfin-*-uclinux
> +	bfin-*-linux-uclibc
>  	crisv32-*-linux*
>  	cris-*-linux*
>  	i[34567]86-*-cygwin*
> diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
> index 1e8fa30..d6110dd 100644
> --- a/gdb/gdbserver/configure.srv
> +++ b/gdb/gdbserver/configure.srv
> @@ -67,6 +67,11 @@ case "${target}" in
>  			srv_mingw=yes
>  			srv_mingwce=yes
>  			;;
> +  bfin-*-*linux*)	srv_regobj=reg-bfin.o
> +			srv_tgtobj="linux-low.o linux-bfin-low.o"
> +			srv_linux_usrregs=yes
> +			srv_linux_thread_db=yes
> +			;;
>    crisv32-*-linux*)	srv_regobj=reg-crisv32.o
>  			srv_tgtobj="linux-low.o linux-crisv32-low.o"
>  			srv_linux_regsets=yes
> diff --git a/gdb/gdbserver/linux-bfin-low.c b/gdb/gdbserver/linux-bfin-low.c
> new file mode 100644
> index 0000000..ce40dea
> --- /dev/null
> +++ b/gdb/gdbserver/linux-bfin-low.c
> @@ -0,0 +1,108 @@
> +/* GNU/Linux/BFIN specific low level interface, for the remote server for GDB.
> +
> +   Copyright (C) 2005-2010 Free Software Foundation, Inc.
> +   Contributed by Analog Devices.
> +
> +   This file is part of GDB.
> +
> +   This program is free software; you can redistribute it and/or modify
> +   it under the terms of the GNU General Public License as published by
> +   the Free Software Foundation; either version 3 of the License, or
> +   (at your option) any later version.
> +
> +   This program is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +   GNU General Public License for more details.
> +
> +   You should have received a copy of the GNU General Public License
> +   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
> +
> +#include "server.h"
> +#include "linux-low.h"
> +#include "libiberty.h"
> +#include <asm/ptrace.h>
> +
> +/* Defined in auto-generated file reg-bfin.c.  */
> +void init_registers_bfin (void);
> +
> +static int bfin_regmap[] =
> +{
> +  PT_R0, PT_R1, PT_R2, PT_R3, PT_R4, PT_R5, PT_R6, PT_R7,
> +  PT_P0, PT_P1, PT_P2, PT_P3, PT_P4, PT_P5, PT_USP, PT_FP,
> +  PT_I0, PT_I1, PT_I2, PT_I3, PT_M0, PT_M1, PT_M2, PT_M3,
> +  PT_B0, PT_B1, PT_B2, PT_B3, PT_L0, PT_L1, PT_L2, PT_L3,
> +  PT_A0X, PT_A0W, PT_A1X, PT_A1W, PT_ASTAT, PT_RETS,
> +  PT_LC0, PT_LT0, PT_LB0, PT_LC1, PT_LT1, PT_LB1,
> +  -1 /* PT_CYCLES */, -1 /* PT_CYCLES2 */,
> +  -1 /* PT_USP */, PT_SEQSTAT, PT_SYSCFG, PT_PC, PT_RETX, PT_RETN, PT_RETE,
> +  PT_PC, -1 /* PT_CC */,
> +  /* FLAT:  PT_TEXT_ADDR, PT_TEXT_END_ADDR, PT_DATA_ADDR, */
> +  /* FDPIC: PT_FDPIC_EXEC PT_FDPIC_INTERP, */
> +  /* MISC:  PT_IPEND */
> +};
> +
> +#define bfin_num_regs ARRAY_SIZE (bfin_regmap)
> +
> +static int
> +bfin_cannot_store_register (int regno)
> +{
> +  return (regno >= bfin_num_regs);
> +}
> +
> +static int
> +bfin_cannot_fetch_register (int regno)
> +{
> +  return (regno >= bfin_num_regs);
> +}
> +
> +static CORE_ADDR
> +bfin_get_pc (struct regcache *regcache)
> +{
> +  unsigned long pc;
> +
> +  collect_register_by_name (regcache, "pc", &pc);
> +
> +  return pc;
> +}
> +
> +static void
> +bfin_set_pc (struct regcache *regcache, CORE_ADDR pc)
> +{
> +  unsigned long newpc = pc;
> +
> +  supply_register_by_name (regcache, "pc", &newpc);
> +}
> +
> +#define bfin_breakpoint_len 2
> +static const unsigned char bfin_breakpoint[bfin_breakpoint_len] = {0xa1, 0x00};
> +
> +static int
> +bfin_breakpoint_at (CORE_ADDR where)
> +{
> +  unsigned char insn[bfin_breakpoint_len];
> +
> +  read_inferior_memory(where, insn, bfin_breakpoint_len);
> +  if (insn[0] == bfin_breakpoint[0]
> +      && insn[1] == bfin_breakpoint[1])
> +    return 1;
> +
> +  /* If necessary, recognize more trap instructions here.  GDB only uses the
> +     one.  */
> +  return 0;
> +}
> +
> +struct linux_target_ops the_low_target = {
> +  init_registers_bfin,
> +  bfin_num_regs,
> +  bfin_regmap,
> +  bfin_cannot_fetch_register,
> +  bfin_cannot_store_register,
> +  bfin_get_pc,
> +  bfin_set_pc,
> +  bfin_breakpoint,
> +  bfin_breakpoint_len,
> +  0,
> +  2,
> +  bfin_breakpoint_at,
> +};
> diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c
> index c65ce54..75fe905 100644
> --- a/gdb/gdbserver/linux-low.c
> +++ b/gdb/gdbserver/linux-low.c
> @@ -4373,6 +4373,10 @@ linux_stopped_data_address (void)
>  #define PT_TEXT_ADDR 49*4
>  #define PT_DATA_ADDR 50*4
>  #define PT_TEXT_END_ADDR  51*4
> +#elif defined(BFIN)
> +#define PT_TEXT_ADDR 220
> +#define PT_TEXT_END_ADDR 224
> +#define PT_DATA_ADDR 228
>  #endif
>  
>  /* Under uClinux, programs are loaded at non-zero offsets, which we need
> diff --git a/gdb/regformats/reg-bfin.dat b/gdb/regformats/reg-bfin.dat
> new file mode 100644
> index 0000000..52f7826
> --- /dev/null
> +++ b/gdb/regformats/reg-bfin.dat
> @@ -0,0 +1,57 @@
> +name:bfin
> +expedite:pc,sp,fp
> +32:r0
> +32:r1
> +32:r2
> +32:r3
> +32:r4
> +32:r5
> +32:r6
> +32:r7
> +32:p0
> +32:p1
> +32:p2
> +32:p3
> +32:p4
> +32:p5
> +32:sp
> +32:fp
> +32:i0
> +32:i1
> +32:i2
> +32:i3
> +32:m0
> +32:m1
> +32:m2
> +32:m3
> +32:b0
> +32:b1
> +32:b2
> +32:b3
> +32:l0
> +32:l1
> +32:l2
> +32:l3
> +32:a0x
> +32:a0w
> +32:a1x
> +32:a1w
> +32:astat
> +32:rets
> +32:lc0
> +32:lt0
> +32:lb0
> +32:lc1
> +32:lt1
> +32:lb1
> +32:cycles
> +32:cycles2
> +32:usp
> +32:seqstat
> +32:syscfg
> +32:reti
> +32:retx
> +32:retn
> +32:rete
> +32:pc
> +32:cc
> 



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]