/* Routines for handling XML memory maps provided by target.
- Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
- Free Software Foundation, Inc.
+ Copyright (C) 2006-2015 Free Software Foundation, Inc.
This file is part of GDB.
#include "defs.h"
#include "memory-map.h"
-#include "gdb_assert.h"
-#include "exceptions.h"
-
-#include "gdb_string.h"
#if !defined(HAVE_LIBEXPAT)
struct mem_region *r = VEC_safe_push (mem_region_s, *data->memory_map, NULL);
ULONGEST *start_p, *length_p, *type_p;
- start_p = VEC_index (gdb_xml_value_s, attributes, 0)->value;
- length_p = VEC_index (gdb_xml_value_s, attributes, 1)->value;
- type_p = VEC_index (gdb_xml_value_s, attributes, 2)->value;
+ start_p = xml_find_attribute (attributes, "start")->value;
+ length_p = xml_find_attribute (attributes, "length")->value;
+ type_p = xml_find_attribute (attributes, "type")->value;
mem_region_init (r);
r->lo = *start_p;
r->hi = r->lo + *length_p;
- r->attrib.mode = *type_p;
+ r->attrib.mode = (enum mem_access_mode) *type_p;
r->attrib.blocksize = -1;
}
struct memory_map_parsing_data *data = user_data;
char *name;
- name = VEC_index (gdb_xml_value_s, attributes, 0)->value;
+ name = xml_find_attribute (attributes, "name")->value;
snprintf (data->property_name, sizeof (data->property_name), "%s", name);
}
VEC(mem_region_s) *
parse_memory_map (const char *memory_map)
{
- struct gdb_xml_parser *parser;
VEC(mem_region_s) *result = NULL;
- struct cleanup *before_deleting_result, *back_to;
+ struct cleanup *back_to;
struct memory_map_parsing_data data = { NULL };
- back_to = make_cleanup (null_cleanup, NULL);
- parser = gdb_xml_create_parser_and_cleanup (_("target memory map"),
- memory_map_elements, &data);
-
- /* Note: 'clear_result' will zero 'result'. */
- before_deleting_result = make_cleanup (clear_result, &result);
data.memory_map = &result;
-
- if (gdb_xml_parse (parser, memory_map) == 0)
- /* Parsed successfully, don't need to delete the result. */
- discard_cleanups (before_deleting_result);
+ back_to = make_cleanup (clear_result, &result);
+ if (gdb_xml_parse_quick (_("target memory map"), NULL, memory_map_elements,
+ memory_map, &data) == 0)
+ {
+ /* Parsed successfully, keep the result. */
+ discard_cleanups (back_to);
+ return result;
+ }
do_cleanups (back_to);
- return result;
+ return NULL;
}
#endif /* HAVE_LIBEXPAT */