Files
binutils-gdb/gdb/gdbserver/tdesc.c
Alan Hayward 423cbc737c Remove xml file references from target descriptions.
We no longer need to know the name of the xml file for targets using the
new target descriptions. This patch removes the references and regenerates
the C files.

This patch is identical to the V3 version.

Alan.

2018-03-21  Alan Hayward  <alan.hayward@arm.com>

gdb/
	* common/tdesc.h (tdesc_create_feature): Remove xml filename parameter.
	* features/aarch64-core.c (create_feature_aarch64_core): Regenerate.
	* features/aarch64-fpu.c (create_feature_aarch64_fpu): Likewise.
	* features/i386/32bit-avx.c (create_feature_i386_32bit_avx): Likewise.
	* features/i386/32bit-avx512.c (create_feature_i386_32bit_avx512):
	Likewise.
	* features/i386/32bit-core.c (create_feature_i386_32bit_core):
	Likewise.
	* features/i386/32bit-linux.c (create_feature_i386_32bit_linux):
	Likewise.
	* features/i386/32bit-mpx.c (create_feature_i386_32bit_mpx): Likewise.
	* features/i386/32bit-pkeys.c (create_feature_i386_32bit_pkeys):
	Likewise.
	* features/i386/32bit-sse.c (create_feature_i386_32bit_sse): Likewise.
	* features/i386/64bit-avx.c (create_feature_i386_64bit_avx): Likewise.
	* features/i386/64bit-avx512.c (create_feature_i386_64bit_avx512):
	Likewise.
	* features/i386/64bit-core.c (create_feature_i386_64bit_core):
	Likewise.
	* features/i386/64bit-linux.c (create_feature_i386_64bit_linux):
	Likewise.
	* features/i386/64bit-mpx.c (create_feature_i386_64bit_mpx): Likewise.
	* features/i386/64bit-pkeys.c (create_feature_i386_64bit_pkeys):
	Likewise.
	* features/i386/64bit-segments.c (create_feature_i386_64bit_segments):
	Likewise.
	* features/i386/64bit-sse.c (create_feature_i386_64bit_sse): Likewise.
	* features/i386/x32-core.c (create_feature_i386_x32_core): Likewise.
	* features/tic6x-c6xp.c (create_feature_tic6x_c6xp): Likewise.
	* features/tic6x-core.c (create_feature_tic6x_core): Likewise.
	* features/tic6x-gp.c (create_feature_tic6x_gp): Likewise.
	* target-descriptions.c: In generated code, don't pass xml filename.

gdbserver/
	* gdbserver/tdesc.c: Remove xml parameter.
2018-03-21 15:57:15 +00:00

208 lines
4.6 KiB
C

/* Copyright (C) 2012-2018 Free Software Foundation, Inc.
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 "tdesc.h"
#include "regdef.h"
#ifndef IN_PROCESS_AGENT
target_desc::~target_desc ()
{
xfree ((char *) arch);
xfree ((char *) osabi);
}
bool target_desc::operator== (const target_desc &other) const
{
if (reg_defs.size () != other.reg_defs.size ())
return false;
for (int i = 0; i < reg_defs.size (); ++i)
{
struct reg reg = reg_defs[i];
struct reg reg2 = other.reg_defs[i];
if (&reg != &reg2 && reg != reg2)
return false;
}
/* Compare expedite_regs. */
int i = 0;
for (; expedite_regs[i] != NULL; i++)
{
if (strcmp (expedite_regs[i], other.expedite_regs[i]) != 0)
return false;
}
if (other.expedite_regs[i] != NULL)
return false;
return true;
}
#endif
void target_desc::accept (tdesc_element_visitor &v) const
{
#ifndef IN_PROCESS_AGENT
v.visit_pre (this);
for (const tdesc_feature_up &feature : features)
feature->accept (v);
v.visit_post (this);
#endif
}
void
init_target_desc (struct target_desc *tdesc)
{
int offset = 0;
/* Go through all the features and populate reg_defs. */
for (const tdesc_feature_up &feature : tdesc->features)
for (const tdesc_reg_up &treg : feature->registers)
{
int current_size = tdesc->reg_defs.size ();
/* Register number will either increase (possibly with gaps) or be
zero. */
gdb_assert (treg->target_regnum == 0
|| treg->target_regnum >= current_size);
tdesc->reg_defs.resize (treg->target_regnum != 0
? treg->target_regnum + 1
: current_size + 1);
/* Fill in any blank spaces. */
while (current_size < treg->target_regnum)
{
struct reg *reg = &tdesc->reg_defs[current_size];
reg->name = "";
reg->size = 0;
reg->offset = offset;
current_size++;
}
struct reg *reg = &tdesc->reg_defs.back ();
reg->name = treg->name.c_str ();
reg->size = treg->bitsize;
reg->offset = offset;
offset += reg->size;
}
tdesc->registers_size = offset / 8;
/* Make sure PBUFSIZ is large enough to hold a full register
packet. */
gdb_assert (2 * tdesc->registers_size + 32 <= PBUFSIZ);
}
struct target_desc *
allocate_target_description (void)
{
return new target_desc ();
}
#ifndef IN_PROCESS_AGENT
static const struct target_desc default_description {};
void
copy_target_description (struct target_desc *dest,
const struct target_desc *src)
{
dest->reg_defs = src->reg_defs;
dest->expedite_regs = src->expedite_regs;
dest->registers_size = src->registers_size;
dest->xmltarget = src->xmltarget;
}
const struct target_desc *
current_target_desc (void)
{
if (current_thread == NULL)
return &default_description;
return current_process ()->tdesc;
}
/* See common/tdesc.h. */
const char *
tdesc_architecture_name (const struct target_desc *target_desc)
{
return target_desc->arch;
}
/* See common/tdesc.h. */
void
set_tdesc_architecture (struct target_desc *target_desc,
const char *name)
{
target_desc->arch = xstrdup (name);
}
/* See common/tdesc.h. */
const char *
tdesc_osabi_name (const struct target_desc *target_desc)
{
return target_desc->osabi;
}
/* See common/tdesc.h. */
void
set_tdesc_osabi (struct target_desc *target_desc, const char *name)
{
target_desc->osabi = xstrdup (name);
}
/* See common/tdesc.h. */
const char *
tdesc_get_features_xml (target_desc *tdesc)
{
/* Either .xmltarget or .features is not NULL. */
gdb_assert (tdesc->xmltarget != NULL
|| (!tdesc->features.empty ()
&& tdesc->arch != NULL));
if (tdesc->xmltarget == NULL)
{
std::string buffer ("@");
print_xml_feature v (buffer);
tdesc->accept (v);
tdesc->xmltarget = xstrdup (buffer.c_str ());
}
return tdesc->xmltarget;
}
#endif
/* See common/tdesc.h. */
struct tdesc_feature *
tdesc_create_feature (struct target_desc *tdesc, const char *name)
{
struct tdesc_feature *new_feature = new tdesc_feature (name);
tdesc->features.emplace_back (new_feature);
return new_feature;
}