gdb: provide and use sparc{32,64} target description XML files.

gdb/ChangeLog:

2017-02-06  Ivo Raisr  <ivo.raisr@oracle.com>

	PR tdep/20936
	Provide and use sparc32 and sparc64 target description XML files.
	* features/sparc/sparc32-cp0.xml, features/sparc/sparc32-cpu.xml,
	features/sparc/sparc32-fpu.xml: New files for sparc 32-bit.
	* features/sparc/sparc64-cp0.xml, features/sparc/sparc64-cpu.xml,
	features/sparc/sparc64-fpu.xml: New files for sparc 64-bit.
	* features/sparc/sparc32-solaris.xml: New file.
	* features/sparc/sparc64-solaris.xml: New file.
	* features/sparc/sparc32-solaris.c: Generated.
	* features/sparc/sparc64-solaris.c: Generated.
	* sparc-tdep.h: Account for differences in target descriptions.
	* sparc-tdep.c (sparc32_register_name): Use target provided registers.
	(sparc32_register_type): Use target provided registers.
	(validate_tdesc_registers): New function.
	(sparc32_gdbarch_init): Use tdesc_has_registers.
	Set pseudoregister functions.
	* sparc64-tdep.c (sparc64_register_name): Use target provided registers.
	(sparc64_register_type): Use target provided registers.
	(sparc64_init_abi): Set pseudoregister functions.

gdb/doc/ChangeLog:

2017-02-06  Ivo Raisr  <ivo.raisr@oracle.com>

	PR tdep/20936
	* gdb.texinfo: (Standard Target Features): Document SPARC features.
	(Sparc Features): New node.

gdb/testsuite/ChangeLog:

2017-02-06  Ivo Raisr  <ivo.raisr@oracle.com>

	PR tdep/20936
	* gdb.xml/tdesc-regs.exp: Provide sparc core registers for the tests.
This commit is contained in:
Ivo Raisr 2017-02-05 23:44:03 -08:00 committed by Jose E. Marchesi
parent de32a80f8f
commit 3f7b46f2da
19 changed files with 647 additions and 0 deletions

View File

@ -1,3 +1,25 @@
2017-02-06 Ivo Raisr <ivo.raisr@oracle.com>
PR tdep/20936
Provide and use sparc32 and sparc64 target description XML files.
* features/sparc/sparc32-cp0.xml, features/sparc/sparc32-cpu.xml,
features/sparc/sparc32-fpu.xml: New files for sparc 32-bit.
* features/sparc/sparc64-cp0.xml, features/sparc/sparc64-cpu.xml,
features/sparc/sparc64-fpu.xml: New files for sparc 64-bit.
* features/sparc/sparc32-solaris.xml: New file.
* features/sparc/sparc64-solaris.xml: New file.
* features/sparc/sparc32-solaris.c: Generated.
* features/sparc/sparc64-solaris.c: Generated.
* sparc-tdep.h: Account for differences in target descriptions.
* sparc-tdep.c (sparc32_register_name): Use target provided registers.
(sparc32_register_type): Use target provided registers.
(validate_tdesc_registers): New function.
(sparc32_gdbarch_init): Use tdesc_has_registers.
Set pseudoregister functions.
* sparc64-tdep.c (sparc64_register_name): Use target provided registers.
(sparc64_register_type): Use target provided registers.
(sparc64_init_abi): Set pseudoregister functions.
2017-02-03 Tom Tromey <tom@tromey.com>
PR rust/21097:

View File

@ -47,6 +47,8 @@
end
end
* Target descriptions can now describe registers for sparc32 and sparc64.
* New native configurations
FreeBSD/mips mips*-*-freebsd

View File

@ -1,3 +1,9 @@
2017-02-06 Ivo Raisr <ivo.raisr@oracle.com>
PR tdep/20936
* gdb.texinfo: (Standard Target Features): Document SPARC features.
(Sparc Features): New node.
2017-01-27 Walfred Tedeschi <walfred.tedeschi@intel.com>
* gdb.texinfo (i386 Features): Add system segment registers

View File

@ -41030,6 +41030,7 @@ registers using the capitalization used in the description.
* Nios II Features::
* PowerPC Features::
* S/390 and System z Features::
* Sparc Features::
* TIC6x Features::
@end menu
@ -41381,6 +41382,48 @@ through @samp{f15} to present the 128-bit wide vector registers
contain the 128-bit wide vector registers @samp{v16} through
@samp{v31}.
@node Sparc Features
@subsection Sparc Features
@cindex target descriptions, sparc32 features
@cindex target descriptions, sparc64 features
The @samp{org.gnu.gdb.sparc.cpu} feature is required for sparc32/sparc64
targets. It should describe the following registers:
@itemize @minus
@item
@samp{g0} through @samp{g7}
@item
@samp{o0} through @samp{o7}
@item
@samp{l0} through @samp{l7}
@item
@samp{i0} through @samp{i7}
@end itemize
They may be 32-bit or 64-bit depending on the target.
Also the @samp{org.gnu.gdb.sparc.fpu} feature is required for sparc32/sparc64
targets. It should describe the following registers:
@itemize @minus
@item
@samp{f0} through @samp{f31}
@item
@samp{f32} through @samp{f62} for sparc64
@end itemize
The @samp{org.gnu.gdb.sparc.cp0} feature is required for sparc32/sparc64
targets. It should describe the following registers:
@itemize @minus
@item
@samp{y}, @samp{psr}, @samp{wim}, @samp{tbr}, @samp{pc}, @samp{npc},
@samp{fsr}, and @samp{csr} for sparc32
@item
@samp{pc}, @samp{npc}, @samp{state}, @samp{fsr}, @samp{fprs}, and @samp{y}
for sparc64
@end itemize
@node TIC6x Features
@subsection TMS320C6x Features
@cindex target descriptions, TIC6x features

View File

@ -0,0 +1,19 @@
<?xml version="1.0"?>
<!-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. -->
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
<feature name="org.gnu.gdb.sparc.cp0">
<reg name="y" bitsize="32" type="uint32" regnum="64"/>
<reg name="psr" bitsize="32" type="uint32" regnum="65"/>
<reg name="wim" bitsize="32" type="uint32" regnum="66"/>
<reg name="tbr" bitsize="32" type="uint32" regnum="67"/>
<reg name="pc" bitsize="32" type="code_ptr" regnum="68"/>
<reg name="npc" bitsize="32" type="code_ptr" regnum="69"/>
<reg name="fsr" bitsize="32" type="uint32" regnum="70"/>
<reg name="csr" bitsize="32" type="uint32" regnum="71"/>
</feature>

View File

@ -0,0 +1,42 @@
<?xml version="1.0"?>
<!-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. -->
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
<feature name="org.gnu.gdb.sparc.cpu">
<reg name="g0" bitsize="32" type="uint32" regnum="0"/>
<reg name="g1" bitsize="32" type="uint32" regnum="1"/>
<reg name="g2" bitsize="32" type="uint32" regnum="2"/>
<reg name="g3" bitsize="32" type="uint32" regnum="3"/>
<reg name="g4" bitsize="32" type="uint32" regnum="4"/>
<reg name="g5" bitsize="32" type="uint32" regnum="5"/>
<reg name="g6" bitsize="32" type="uint32" regnum="6"/>
<reg name="g7" bitsize="32" type="uint32" regnum="7"/>
<reg name="o0" bitsize="32" type="uint32" regnum="8"/>
<reg name="o1" bitsize="32" type="uint32" regnum="9"/>
<reg name="o2" bitsize="32" type="uint32" regnum="10"/>
<reg name="o3" bitsize="32" type="uint32" regnum="11"/>
<reg name="o4" bitsize="32" type="uint32" regnum="12"/>
<reg name="o5" bitsize="32" type="uint32" regnum="13"/>
<reg name="sp" bitsize="32" type="uint32" regnum="14"/>
<reg name="o7" bitsize="32" type="uint32" regnum="15"/>
<reg name="l0" bitsize="32" type="uint32" regnum="16"/>
<reg name="l1" bitsize="32" type="uint32" regnum="17"/>
<reg name="l2" bitsize="32" type="uint32" regnum="18"/>
<reg name="l3" bitsize="32" type="uint32" regnum="19"/>
<reg name="l4" bitsize="32" type="uint32" regnum="20"/>
<reg name="l5" bitsize="32" type="uint32" regnum="21"/>
<reg name="l6" bitsize="32" type="uint32" regnum="22"/>
<reg name="l7" bitsize="32" type="uint32" regnum="23"/>
<reg name="i0" bitsize="32" type="uint32" regnum="24"/>
<reg name="i1" bitsize="32" type="uint32" regnum="25"/>
<reg name="i2" bitsize="32" type="uint32" regnum="26"/>
<reg name="i3" bitsize="32" type="uint32" regnum="27"/>
<reg name="i4" bitsize="32" type="uint32" regnum="28"/>
<reg name="i5" bitsize="32" type="uint32" regnum="29"/>
<reg name="fp" bitsize="32" type="uint32" regnum="30"/>
<reg name="i7" bitsize="32" type="uint32" regnum="31"/>
</feature>

View File

@ -0,0 +1,43 @@
<?xml version="1.0"?>
<!-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. -->
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
<feature name="org.gnu.gdb.sparc.fpu">
<reg name="f0" bitsize="32" type="ieee_single" regnum="32"/>
<reg name="f1" bitsize="32" type="ieee_single" regnum="33"/>
<reg name="f2" bitsize="32" type="ieee_single" regnum="34"/>
<reg name="f3" bitsize="32" type="ieee_single" regnum="35"/>
<reg name="f4" bitsize="32" type="ieee_single" regnum="36"/>
<reg name="f5" bitsize="32" type="ieee_single" regnum="37"/>
<reg name="f6" bitsize="32" type="ieee_single" regnum="38"/>
<reg name="f7" bitsize="32" type="ieee_single" regnum="39"/>
<reg name="f8" bitsize="32" type="ieee_single" regnum="40"/>
<reg name="f9" bitsize="32" type="ieee_single" regnum="41"/>
<reg name="f10" bitsize="32" type="ieee_single" regnum="42"/>
<reg name="f11" bitsize="32" type="ieee_single" regnum="43"/>
<reg name="f12" bitsize="32" type="ieee_single" regnum="44"/>
<reg name="f13" bitsize="32" type="ieee_single" regnum="45"/>
<reg name="f14" bitsize="32" type="ieee_single" regnum="46"/>
<reg name="f15" bitsize="32" type="ieee_single" regnum="47"/>
<reg name="f16" bitsize="32" type="ieee_single" regnum="48"/>
<reg name="f17" bitsize="32" type="ieee_single" regnum="49"/>
<reg name="f18" bitsize="32" type="ieee_single" regnum="50"/>
<reg name="f19" bitsize="32" type="ieee_single" regnum="51"/>
<reg name="f20" bitsize="32" type="ieee_single" regnum="52"/>
<reg name="f21" bitsize="32" type="ieee_single" regnum="53"/>
<reg name="f22" bitsize="32" type="ieee_single" regnum="54"/>
<reg name="f23" bitsize="32" type="ieee_single" regnum="55"/>
<reg name="f24" bitsize="32" type="ieee_single" regnum="56"/>
<reg name="f25" bitsize="32" type="ieee_single" regnum="57"/>
<reg name="f26" bitsize="32" type="ieee_single" regnum="58"/>
<reg name="f27" bitsize="32" type="ieee_single" regnum="59"/>
<reg name="f28" bitsize="32" type="ieee_single" regnum="60"/>
<reg name="f29" bitsize="32" type="ieee_single" regnum="61"/>
<reg name="f30" bitsize="32" type="ieee_single" regnum="62"/>
<reg name="f31" bitsize="32" type="ieee_single" regnum="63"/>
</feature>

View File

@ -0,0 +1,98 @@
/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
Original: sparc32-solaris.xml */
#include "defs.h"
#include "osabi.h"
#include "target-descriptions.h"
struct target_desc *tdesc_sparc32_solaris;
static void
initialize_tdesc_sparc32_solaris (void)
{
struct target_desc *result = allocate_target_description ();
struct tdesc_feature *feature;
set_tdesc_architecture (result, bfd_scan_arch ("sparc"));
set_tdesc_osabi (result, osabi_from_tdesc_string ("Solaris"));
feature = tdesc_create_feature (result, "org.gnu.gdb.sparc.cpu");
tdesc_create_reg (feature, "g0", 0, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "g1", 1, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "g2", 2, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "g3", 3, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "g4", 4, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "g5", 5, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "g6", 6, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "g7", 7, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "o0", 8, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "o1", 9, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "o2", 10, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "o3", 11, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "o4", 12, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "o5", 13, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "sp", 14, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "o7", 15, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "l0", 16, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "l1", 17, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "l2", 18, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "l3", 19, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "l4", 20, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "l5", 21, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "l6", 22, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "l7", 23, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "i0", 24, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "i1", 25, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "i2", 26, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "i3", 27, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "i4", 28, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "i5", 29, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "fp", 30, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "i7", 31, 1, NULL, 32, "uint32");
feature = tdesc_create_feature (result, "org.gnu.gdb.sparc.cp0");
tdesc_create_reg (feature, "y", 64, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "psr", 65, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "wim", 66, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "tbr", 67, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "pc", 68, 1, NULL, 32, "code_ptr");
tdesc_create_reg (feature, "npc", 69, 1, NULL, 32, "code_ptr");
tdesc_create_reg (feature, "fsr", 70, 1, NULL, 32, "uint32");
tdesc_create_reg (feature, "csr", 71, 1, NULL, 32, "uint32");
feature = tdesc_create_feature (result, "org.gnu.gdb.sparc.fpu");
tdesc_create_reg (feature, "f0", 32, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f1", 33, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f2", 34, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f3", 35, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f4", 36, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f5", 37, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f6", 38, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f7", 39, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f8", 40, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f9", 41, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f10", 42, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f11", 43, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f12", 44, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f13", 45, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f14", 46, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f15", 47, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f16", 48, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f17", 49, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f18", 50, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f19", 51, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f20", 52, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f21", 53, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f22", 54, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f23", 55, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f24", 56, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f25", 57, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f26", 58, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f27", 59, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f28", 60, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f29", 61, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f30", 62, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f31", 63, 1, NULL, 32, "ieee_single");
tdesc_sparc_solaris = result;
}

View File

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<!-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. -->
<!DOCTYPE target SYSTEM "gdb-target.dtd">
<target>
<architecture>sparc</architecture>
<osabi>Solaris</osabi>
<xi:include href="sparc32-cpu.xml"/>
<xi:include href="sparc32-cp0.xml"/>
<xi:include href="sparc32-fpu.xml"/>
</target>

View File

@ -0,0 +1,17 @@
<?xml version="1.0"?>
<!-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. -->
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
<feature name="org.gnu.gdb.sparc.cp0">
<reg name="pc" bitsize="64" type="code_ptr" regnum="80"/>
<reg name="npc" bitsize="64" type="code_ptr" regnum="81"/>
<reg name="state" bitsize="64" type="uint64" regnum="82"/>
<reg name="fsr" bitsize="64" type="uint64" regnum="83"/>
<reg name="fprs" bitsize="64" type="uint64" regnum="84"/>
<reg name="y" bitsize="64" type="uint64" regnum="85"/>
</feature>

View File

@ -0,0 +1,42 @@
<?xml version="1.0"?>
<!-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. -->
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
<feature name="org.gnu.gdb.sparc.cpu">
<reg name="g0" bitsize="64" type="uint64" regnum="0"/>
<reg name="g1" bitsize="64" type="uint64" regnum="1"/>
<reg name="g2" bitsize="64" type="uint64" regnum="2"/>
<reg name="g3" bitsize="64" type="uint64" regnum="3"/>
<reg name="g4" bitsize="64" type="uint64" regnum="4"/>
<reg name="g5" bitsize="64" type="uint64" regnum="5"/>
<reg name="g6" bitsize="64" type="uint64" regnum="6"/>
<reg name="g7" bitsize="64" type="uint64" regnum="7"/>
<reg name="o0" bitsize="64" type="uint64" regnum="8"/>
<reg name="o1" bitsize="64" type="uint64" regnum="9"/>
<reg name="o2" bitsize="64" type="uint64" regnum="10"/>
<reg name="o3" bitsize="64" type="uint64" regnum="11"/>
<reg name="o4" bitsize="64" type="uint64" regnum="12"/>
<reg name="o5" bitsize="64" type="uint64" regnum="13"/>
<reg name="sp" bitsize="64" type="uint64" regnum="14"/>
<reg name="o7" bitsize="64" type="uint64" regnum="15"/>
<reg name="l0" bitsize="64" type="uint64" regnum="16"/>
<reg name="l1" bitsize="64" type="uint64" regnum="17"/>
<reg name="l2" bitsize="64" type="uint64" regnum="18"/>
<reg name="l3" bitsize="64" type="uint64" regnum="19"/>
<reg name="l4" bitsize="64" type="uint64" regnum="20"/>
<reg name="l5" bitsize="64" type="uint64" regnum="21"/>
<reg name="l6" bitsize="64" type="uint64" regnum="22"/>
<reg name="l7" bitsize="64" type="uint64" regnum="23"/>
<reg name="i0" bitsize="64" type="uint64" regnum="24"/>
<reg name="i1" bitsize="64" type="uint64" regnum="25"/>
<reg name="i2" bitsize="64" type="uint64" regnum="26"/>
<reg name="i3" bitsize="64" type="uint64" regnum="27"/>
<reg name="i4" bitsize="64" type="uint64" regnum="28"/>
<reg name="i5" bitsize="64" type="uint64" regnum="29"/>
<reg name="fp" bitsize="64" type="uint64" regnum="30"/>
<reg name="i7" bitsize="64" type="uint64" regnum="31"/>
</feature>

View File

@ -0,0 +1,60 @@
<?xml version="1.0"?>
<!-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. -->
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
<feature name="org.gnu.gdb.sparc.fpu">
<reg name="f0" bitsize="32" type="ieee_single" regnum="32"/>
<reg name="f1" bitsize="32" type="ieee_single" regnum="33"/>
<reg name="f2" bitsize="32" type="ieee_single" regnum="34"/>
<reg name="f3" bitsize="32" type="ieee_single" regnum="35"/>
<reg name="f4" bitsize="32" type="ieee_single" regnum="36"/>
<reg name="f5" bitsize="32" type="ieee_single" regnum="37"/>
<reg name="f6" bitsize="32" type="ieee_single" regnum="38"/>
<reg name="f7" bitsize="32" type="ieee_single" regnum="39"/>
<reg name="f8" bitsize="32" type="ieee_single" regnum="40"/>
<reg name="f9" bitsize="32" type="ieee_single" regnum="41"/>
<reg name="f10" bitsize="32" type="ieee_single" regnum="42"/>
<reg name="f11" bitsize="32" type="ieee_single" regnum="43"/>
<reg name="f12" bitsize="32" type="ieee_single" regnum="44"/>
<reg name="f13" bitsize="32" type="ieee_single" regnum="45"/>
<reg name="f14" bitsize="32" type="ieee_single" regnum="46"/>
<reg name="f15" bitsize="32" type="ieee_single" regnum="47"/>
<reg name="f16" bitsize="32" type="ieee_single" regnum="48"/>
<reg name="f17" bitsize="32" type="ieee_single" regnum="49"/>
<reg name="f18" bitsize="32" type="ieee_single" regnum="50"/>
<reg name="f19" bitsize="32" type="ieee_single" regnum="51"/>
<reg name="f20" bitsize="32" type="ieee_single" regnum="52"/>
<reg name="f21" bitsize="32" type="ieee_single" regnum="53"/>
<reg name="f22" bitsize="32" type="ieee_single" regnum="54"/>
<reg name="f23" bitsize="32" type="ieee_single" regnum="55"/>
<reg name="f24" bitsize="32" type="ieee_single" regnum="56"/>
<reg name="f25" bitsize="32" type="ieee_single" regnum="57"/>
<reg name="f26" bitsize="32" type="ieee_single" regnum="58"/>
<reg name="f27" bitsize="32" type="ieee_single" regnum="59"/>
<reg name="f28" bitsize="32" type="ieee_single" regnum="60"/>
<reg name="f29" bitsize="32" type="ieee_single" regnum="61"/>
<reg name="f30" bitsize="32" type="ieee_single" regnum="62"/>
<reg name="f31" bitsize="32" type="ieee_single" regnum="63"/>
<reg name="f32" bitsize="64" type="ieee_double" regnum="64"/>
<reg name="f34" bitsize="64" type="ieee_double" regnum="65"/>
<reg name="f36" bitsize="64" type="ieee_double" regnum="66"/>
<reg name="f38" bitsize="64" type="ieee_double" regnum="67"/>
<reg name="f40" bitsize="64" type="ieee_double" regnum="68"/>
<reg name="f42" bitsize="64" type="ieee_double" regnum="69"/>
<reg name="f44" bitsize="64" type="ieee_double" regnum="70"/>
<reg name="f46" bitsize="64" type="ieee_double" regnum="71"/>
<reg name="f48" bitsize="64" type="ieee_double" regnum="72"/>
<reg name="f50" bitsize="64" type="ieee_double" regnum="73"/>
<reg name="f52" bitsize="64" type="ieee_double" regnum="74"/>
<reg name="f54" bitsize="64" type="ieee_double" regnum="75"/>
<reg name="f56" bitsize="64" type="ieee_double" regnum="76"/>
<reg name="f58" bitsize="64" type="ieee_double" regnum="77"/>
<reg name="f60" bitsize="64" type="ieee_double" regnum="78"/>
<reg name="f62" bitsize="64" type="ieee_double" regnum="79"/>
</feature>

View File

@ -0,0 +1,112 @@
/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro:
Original: sparc64-solaris.xml */
#include "defs.h"
#include "osabi.h"
#include "target-descriptions.h"
struct target_desc *tdesc_sparc64_solaris;
static void
initialize_tdesc_sparc64_solaris (void)
{
struct target_desc *result = allocate_target_description ();
struct tdesc_feature *feature;
set_tdesc_architecture (result, bfd_scan_arch ("sparc"));
set_tdesc_osabi (result, osabi_from_tdesc_string ("Solaris"));
feature = tdesc_create_feature (result, "org.gnu.gdb.sparc.cpu");
tdesc_create_reg (feature, "g0", 0, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "g1", 1, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "g2", 2, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "g3", 3, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "g4", 4, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "g5", 5, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "g6", 6, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "g7", 7, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "o0", 8, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "o1", 9, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "o2", 10, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "o3", 11, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "o4", 12, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "o5", 13, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "sp", 14, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "o7", 15, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "l0", 16, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "l1", 17, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "l2", 18, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "l3", 19, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "l4", 20, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "l5", 21, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "l6", 22, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "l7", 23, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "i0", 24, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "i1", 25, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "i2", 26, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "i3", 27, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "i4", 28, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "i5", 29, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "fp", 30, 1, NULL, 32, "uint64");
tdesc_create_reg (feature, "i7", 31, 1, NULL, 64, "uint64");
feature = tdesc_create_feature (result, "org.gnu.gdb.sparc.cp0");
tdesc_create_reg (feature, "pc", 80, 1, NULL, 64, "code_ptr");
tdesc_create_reg (feature, "npc", 81, 1, NULL, 64, "code_ptr");
tdesc_create_reg (feature, "state", 82, 1, NULL, 64, "uint64");
tdesc_create_reg (feature, "fsr", 83, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "fprs", 84, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "y", 85, 1, NULL, 64, "uint64");
feature = tdesc_create_feature (result, "org.gnu.gdb.sparc.fpu");
tdesc_create_reg (feature, "f0", 32, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f1", 33, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f2", 34, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f3", 35, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f4", 36, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f5", 37, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f6", 38, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f7", 39, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f8", 40, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f9", 41, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f10", 42, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f11", 43, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f12", 44, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f13", 45, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f14", 46, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f15", 47, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f16", 48, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f17", 49, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f18", 50, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f19", 51, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f20", 52, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f21", 53, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f22", 54, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f23", 55, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f24", 56, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f25", 57, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f26", 58, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f27", 59, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f28", 60, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f29", 61, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f30", 62, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f31", 63, 1, NULL, 32, "ieee_single");
tdesc_create_reg (feature, "f32", 64, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f34", 65, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f36", 66, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f38", 67, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f40", 68, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f42", 69, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f44", 70, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f46", 71, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f48", 72, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f50", 73, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f52", 74, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f54", 75, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f56", 76, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f58", 77, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f60", 78, 1, NULL, 64, "ieee_double");
tdesc_create_reg (feature, "f62", 79, 1, NULL, 64, "ieee_double");
tdesc_sparc64_solaris = result;
}

View File

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<!-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. -->
<!DOCTYPE target SYSTEM "gdb-target.dtd">
<target>
<architecture>sparc:v9</architecture>
<osabi>Solaris</osabi>
<xi:include href="sparc64-cpu.xml"/>
<xi:include href="sparc64-cp0.xml"/>
<xi:include href="sparc64-fpu.xml"/>
</target>

View File

@ -33,6 +33,7 @@
#include "osabi.h"
#include "regcache.h"
#include "target.h"
#include "target-descriptions.h"
#include "value.h"
#include "sparc-tdep.h"
@ -304,6 +305,10 @@ sparc_structure_or_union_p (const struct type *type)
#define SPARC32_CP0_REGISTERS \
"y", "psr", "wim", "tbr", "pc", "npc", "fsr", "csr"
static const char *sparc_core_register_names[] = { SPARC_CORE_REGISTERS };
static const char *sparc32_fpu_register_names[] = { SPARC32_FPU_REGISTERS };
static const char *sparc32_cp0_register_names[] = { SPARC32_CP0_REGISTERS };
static const char *sparc32_register_names[] =
{
SPARC_CORE_REGISTERS,
@ -346,6 +351,9 @@ sparc32_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
static const char *
sparc32_register_name (struct gdbarch *gdbarch, int regnum)
{
if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
return tdesc_register_name (gdbarch, regnum);
if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch))
return sparc32_register_names[regnum];
@ -431,6 +439,9 @@ sparc32_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
static struct type *
sparc32_register_type (struct gdbarch *gdbarch, int regnum)
{
if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
return tdesc_register_type (gdbarch, regnum);
if (regnum >= SPARC_F0_REGNUM && regnum <= SPARC_F31_REGNUM)
return builtin_type (gdbarch)->builtin_float;
@ -1686,11 +1697,36 @@ sparc_iterate_over_regset_sections (struct gdbarch *gdbarch,
}
static int
validate_tdesc_registers (const struct target_desc *tdesc,
struct tdesc_arch_data *tdesc_data,
const char *feature_name,
const char *register_names[],
unsigned int registers_num,
unsigned int reg_start)
{
int valid_p = 1;
const struct tdesc_feature *feature;
feature = tdesc_find_feature (tdesc, feature_name);
if (feature == NULL)
return 0;
for (unsigned int i = 0; i < registers_num; i++)
valid_p &= tdesc_numbered_register (feature, tdesc_data,
reg_start + i,
register_names[i]);
return valid_p;
}
static struct gdbarch *
sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
{
struct gdbarch_tdep *tdep;
const struct target_desc *tdesc = info.target_desc;
struct gdbarch *gdbarch;
int valid_p = 1;
/* If there is already a candidate, use it. */
arches = gdbarch_list_lookup_by_info (arches, &info);
@ -1704,6 +1740,10 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
tdep->pc_regnum = SPARC32_PC_REGNUM;
tdep->npc_regnum = SPARC32_NPC_REGNUM;
tdep->step_trap = sparc_step_trap;
tdep->fpu_register_names = sparc32_fpu_register_names;
tdep->fpu_registers_num = ARRAY_SIZE (sparc32_fpu_register_names);
tdep->cp0_register_names = sparc32_cp0_register_names;
tdep->cp0_registers_num = ARRAY_SIZE (sparc32_cp0_register_names);
set_gdbarch_long_double_bit (gdbarch, 128);
set_gdbarch_long_double_format (gdbarch, floatformats_sparc_quad);
@ -1712,6 +1752,8 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
set_gdbarch_register_name (gdbarch, sparc32_register_name);
set_gdbarch_register_type (gdbarch, sparc32_register_type);
set_gdbarch_num_pseudo_regs (gdbarch, SPARC32_NUM_PSEUDO_REGS);
set_tdesc_pseudo_register_name (gdbarch, sparc32_pseudo_register_name);
set_tdesc_pseudo_register_type (gdbarch, sparc32_pseudo_register_type);
set_gdbarch_pseudo_register_read (gdbarch, sparc32_pseudo_register_read);
set_gdbarch_pseudo_register_write (gdbarch, sparc32_pseudo_register_write);
@ -1763,6 +1805,39 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
frame_unwind_append_unwinder (gdbarch, &sparc32_frame_unwind);
if (tdesc_has_registers (tdesc))
{
struct tdesc_arch_data *tdesc_data = tdesc_data_alloc ();
/* Validate that the descriptor provides the mandatory registers
and allocate their numbers. */
valid_p &= validate_tdesc_registers (tdesc, tdesc_data,
"org.gnu.gdb.sparc.cpu",
sparc_core_register_names,
ARRAY_SIZE (sparc_core_register_names),
SPARC_G0_REGNUM);
valid_p &= validate_tdesc_registers (tdesc, tdesc_data,
"org.gnu.gdb.sparc.fpu",
tdep->fpu_register_names,
tdep->fpu_registers_num,
SPARC_F0_REGNUM);
valid_p &= validate_tdesc_registers (tdesc, tdesc_data,
"org.gnu.gdb.sparc.cp0",
tdep->cp0_register_names,
tdep->cp0_registers_num,
SPARC_F0_REGNUM +
tdep->fpu_registers_num);
if (!valid_p)
{
tdesc_data_cleanup (tdesc_data);
return NULL;
}
/* Target description may have changed. */
info.tdep_info = tdesc_data;
tdesc_use_registers (gdbarch, tdesc, tdesc_data);
}
/* If we have register sets, enable the generic core file support. */
if (tdep->gregset)
set_gdbarch_iterate_over_regset_sections

View File

@ -63,6 +63,12 @@ struct gdbarch_tdep
int pc_regnum;
int npc_regnum;
/* Register names specific for architecture (sparc32 vs. sparc64) */
const char **fpu_register_names;
size_t fpu_registers_num;
const char **cp0_register_names;
size_t cp0_registers_num;
/* Register sets. */
const struct regset *gregset;
size_t sizeof_gregset;

View File

@ -31,6 +31,7 @@
#include "objfiles.h"
#include "osabi.h"
#include "regcache.h"
#include "target-descriptions.h"
#include "target.h"
#include "value.h"
@ -241,6 +242,9 @@ sparc64_fprs_type (struct gdbarch *gdbarch)
"fprs", \
"y"
static const char *sparc64_fpu_register_names[] = { SPARC64_FPU_REGISTERS };
static const char *sparc64_cp0_register_names[] = { SPARC64_CP0_REGISTERS };
static const char *sparc64_register_names[] =
{
SPARC_CORE_REGISTERS,
@ -290,6 +294,9 @@ sparc64_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
static const char *
sparc64_register_name (struct gdbarch *gdbarch, int regnum)
{
if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
return tdesc_register_name (gdbarch, regnum);
if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch))
return sparc64_register_names[regnum];
@ -328,6 +335,9 @@ sparc64_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
static struct type *
sparc64_register_type (struct gdbarch *gdbarch, int regnum)
{
if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
return tdesc_register_type (gdbarch, regnum);
/* Raw registers. */
if (regnum == SPARC_SP_REGNUM || regnum == SPARC_FP_REGNUM)
return builtin_type (gdbarch)->builtin_data_ptr;
@ -1222,6 +1232,10 @@ sparc64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
tdep->pc_regnum = SPARC64_PC_REGNUM;
tdep->npc_regnum = SPARC64_NPC_REGNUM;
tdep->fpu_register_names = sparc64_fpu_register_names;
tdep->fpu_registers_num = ARRAY_SIZE (sparc64_fpu_register_names);
tdep->cp0_register_names = sparc64_cp0_register_names;
tdep->cp0_registers_num = ARRAY_SIZE (sparc64_cp0_register_names);
/* This is what all the fuss is about. */
set_gdbarch_long_bit (gdbarch, 64);
@ -1232,6 +1246,8 @@ sparc64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
set_gdbarch_register_name (gdbarch, sparc64_register_name);
set_gdbarch_register_type (gdbarch, sparc64_register_type);
set_gdbarch_num_pseudo_regs (gdbarch, SPARC64_NUM_PSEUDO_REGS);
set_tdesc_pseudo_register_name (gdbarch, sparc64_pseudo_register_name);
set_tdesc_pseudo_register_type (gdbarch, sparc64_pseudo_register_type);
set_gdbarch_pseudo_register_read (gdbarch, sparc64_pseudo_register_read);
set_gdbarch_pseudo_register_write (gdbarch, sparc64_pseudo_register_write);

View File

@ -1,3 +1,8 @@
2017-02-06 Ivo Raisr <ivo.raisr@oracle.com>
PR tdep/20936
* gdb.xml/tdesc-regs.exp: Provide sparc core registers for the tests.
2017-02-03 Tom Tromey <tom@tromey.com>
PR rust/21097:

View File

@ -57,6 +57,15 @@ switch -glob -- [istarget] {
"s390*-*-*" {
set core-regs {s390-core32.xml s390-acr.xml s390-fpr.xml}
}
"sparc-*-*" {
set regdir "sparc/"
set core-regs {sparc32-cpu.xml sparc32-fpu.xml sparc32-cp0.xml}
}
"sparc64-*-*" {
set architecture "sparc:v9"
set regdir "sparc/"
set core-regs {sparc64-cpu.xml sparc64-fpu.xml sparc64-cp0.xml}
}
"spu*-*-*" {
# This may be either the spu-linux-nat target, or the Cell/B.E.
# multi-architecture debugger in SPU standalone executable mode.