Skip to content

Commit 0523aed

Browse files
dcpleungstephanosio
authored andcommitted
gdb: xtensa: use remote target register numer...
...instead of the sequential number defined in xtensa-config.c when retrieving registers from remote target, as the remote probe maps registers to their target numbers. Signed-off-by: Daniel Leung <daniel.leung@intel.com> Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
1 parent 57fb9be commit 0523aed

File tree

3 files changed

+55
-2
lines changed

3 files changed

+55
-2
lines changed

gdb/configure

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,7 @@ with_babeltrace
976976
with_libbabeltrace_prefix
977977
with_libbabeltrace_type
978978
enable_libctf
979+
enable_xtensa_use_target_regnum
979980
enable_unit_tests
980981
'
981982
ac_precious_vars='build_alias
@@ -1662,6 +1663,8 @@ Optional Features:
16621663
--enable-libbacktrace use libbacktrace to write a backtrace after a fatal
16631664
signal.
16641665
--enable-libctf Handle .ctf type-info sections [default=yes]
1666+
--enable-xtensa-use-target-regnum
1667+
Use remote target register numbers (Xtensa target)
16651668
--enable-unit-tests Enable the inclusion of unit tests when compiling
16661669
GDB
16671670

@@ -11500,7 +11503,7 @@ else
1150011503
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
1150111504
lt_status=$lt_dlunknown
1150211505
cat > conftest.$ac_ext <<_LT_EOF
11503-
#line 11503 "configure"
11506+
#line 11506 "configure"
1150411507
#include "confdefs.h"
1150511508

1150611509
#if HAVE_DLFCN_H
@@ -11606,7 +11609,7 @@ else
1160611609
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
1160711610
lt_status=$lt_dlunknown
1160811611
cat > conftest.$ac_ext <<_LT_EOF
11609-
#line 11609 "configure"
11612+
#line 11612 "configure"
1161011613
#include "confdefs.h"
1161111614

1161211615
#if HAVE_DLFCN_H
@@ -33636,6 +33639,23 @@ fi
3363633639
# If nativefile (NAT_FILE) is not set in configure.nat, we link to an
3363733640
# empty version.
3363833641

33642+
# Xtensa to use target register number
33643+
# Check whether --enable-xtensa-use-target-regnum was given.
33644+
if test "${enable_xtensa_use_target_regnum+set}" = set; then :
33645+
enableval=$enable_xtensa_use_target_regnum; case $enableval in
33646+
yes | no)
33647+
enable_xtensa_use_target_regnum=$enableval ;;
33648+
*)
33649+
as_fn_error $? "bad value $enableval for --enable-xtensa-use-target-regnum" "$LINENO" 5 ;;
33650+
esac
33651+
else
33652+
enable_xtensa_use_target_regnum=no
33653+
fi
33654+
33655+
if test x"$enable_xtensa_use_target_regnum" = xyes; then
33656+
CPPFLAGS="$CPPFLAGS -DXTENSA_USE_TGT_REGNUM"
33657+
fi
33658+
3363933659
NM_H=
3364033660
rm -f nm.h
3364133661
if test "${nativefile}" != ""; then

gdb/configure.ac

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2230,6 +2230,20 @@ AC_SUBST(CTF_DEPS)
22302230
# If nativefile (NAT_FILE) is not set in configure.nat, we link to an
22312231
# empty version.
22322232

2233+
# Xtensa to use target register number
2234+
AC_ARG_ENABLE(xtensa-use-target-regnum,
2235+
AS_HELP_STRING([--enable-xtensa-use-target-regnum], [Use remote target register numbers (Xtensa target)]),
2236+
[case $enableval in
2237+
yes | no)
2238+
enable_xtensa_use_target_regnum=$enableval ;;
2239+
*)
2240+
AC_MSG_ERROR([bad value $enableval for --enable-xtensa-use-target-regnum]) ;;
2241+
esac],
2242+
[enable_xtensa_use_target_regnum=no])
2243+
if test x"$enable_xtensa_use_target_regnum" = xyes; then
2244+
CPPFLAGS="$CPPFLAGS -DXTENSA_USE_TGT_REGNUM"
2245+
fi
2246+
22332247
NM_H=
22342248
rm -f nm.h
22352249
if test "${nativefile}" != ""; then

gdb/xtensa-tdep.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3146,6 +3146,21 @@ xtensa_derive_tdep (xtensa_gdbarch_tdep *tdep)
31463146
tdep->max_register_virtual_size = max_size;
31473147
}
31483148

3149+
#ifdef XTENSA_USE_TGT_REGNUM
3150+
static int
3151+
xtensa_remote_register_number (struct gdbarch *gdbarch, int regnum)
3152+
{
3153+
xtensa_gdbarch_tdep *tdep = gdbarch_tdep<xtensa_gdbarch_tdep> (gdbarch);
3154+
3155+
/* Return the name stored in the register map. */
3156+
if (regnum >= 0 && regnum < gdbarch_num_cooked_regs (gdbarch))
3157+
return tdep->regmap[regnum].target_number;
3158+
3159+
internal_error (__FILE__, __LINE__, _("invalid register %d"), regnum);
3160+
return regnum;
3161+
}
3162+
#endif
3163+
31493164
/* Module "constructor" function. */
31503165

31513166
extern xtensa_register_t xtensa_rmap[];
@@ -3194,6 +3209,10 @@ xtensa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
31943209
set_gdbarch_register_name (gdbarch, xtensa_register_name);
31953210
set_gdbarch_register_type (gdbarch, xtensa_register_type);
31963211

3212+
#ifdef XTENSA_USE_TGT_REGNUM
3213+
set_gdbarch_remote_register_number (gdbarch, xtensa_remote_register_number);
3214+
#endif
3215+
31973216
/* To call functions from GDB using dummy frame. */
31983217
set_gdbarch_push_dummy_call (gdbarch, xtensa_push_dummy_call);
31993218

0 commit comments

Comments
 (0)