diff options
author | Simon Marchi <simon.marchi@ericsson.com> | 2017-10-21 12:06:42 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2017-10-21 12:15:42 -0400 |
commit | a664f67e50eff30198097d51cec0ec4690abb2a1 (patch) | |
tree | 80218f000d3530c920868dae8d186f3a5ec49fb6 /gdb/memattr.h | |
parent | 6e17c56511104abd605bd2d122104467fc4f0089 (diff) | |
download | gdb-a664f67e50eff30198097d51cec0ec4690abb2a1.zip gdb-a664f67e50eff30198097d51cec0ec4690abb2a1.tar.gz gdb-a664f67e50eff30198097d51cec0ec4690abb2a1.tar.bz2 |
Get rid of VEC (mem_region)
This patch removes VEC (mem_region). Doing so requires touching a lot
of little things here and there.
The fields in mem_attrib are now initialized during construction. The
values match those that were in default_mem_attrib (now removed).
unknown_mem_attrib is also removed, and replaced with a static method
(mem_attrib::unknown) that returns the equivalent.
mem_region is initialized in a way similar to mem_region_init (now
removed) did.
I found the organization of mem_region_list and target_mem_region_list a
bit confusing. Sometimes mem_region_list points to the same vector as
target_mem_region_list (and therefore does not own it), and sometimes
(when the user manually edits the mem regions) points to another vector,
and in this case owns it. To avoid this ambiguity, I think it is
simpler to have two vectors, one for target-defined regions and one for
user-defined regions, and have mem_region_list point to one or the
other. There are now no vector objects dynamically allocated, both are
static.
The make-target-delegates script does not generate valid code when a
target method returns a type with a parameter list. For this reason, I
created a typedef (mem_region_vector) that's only used in the target_ops
structure. If you speak perl, you are welcome to improve the script!
Regtested on the buildbot.
gdb/ChangeLog:
* memattr.h: Don't include vec.h.
(struct mem_attrib): Initialize fields.
<unknown>: New static method.
(struct mem_region): Add constructors, operator<, initialize
fields.
* memattr.c: Include algorithm.
(default_mem_attrib, unknown_mem_attrib): Remove.
(user_mem_region_list): New global.
(target_mem_region_list, mem_region_list): Change type to
std::vector<mem_region>.
(mem_use_target): Now a function.
(target_mem_regions_valid): Change type to bool.
(mem_region_lessthan, mem_region_cmp, mem_region_init): Remove.
(require_user_regions): Adjust.
(require_target_regions): Adjust.
(create_mem_region): Adjust.
(lookup_mem_region): Adjust.
(invalidate_target_mem_regions): Adjust.
(mem_clear): Rename to...
(user_mem_clear): ... this, and adjust.
(mem_command): Adjust.
(info_mem_command): Adjust.
(mem_enable, enable_mem_command, mem_disable,
disable_mem_command): Adjust.
(mem_delete): Adjust.
(delete_mem_command): Adjust.
* memory-map.h (parse_memory_map): Return an std::vector.
* memory-map.c (parse_memory_map): Likewise.
(struct memory_map_parsing_data): Add constructor.
<memory_map>: Point to std::vector.
(memory_map_start_memory): Adjust.
(memory_map_end_memory): Adjust.
(memory_map_end_property): Adjust.
(clear_result): Remove.
* remote.c (remote_memory_map): Return an std::vector.
* target-debug.h (target_debug_print_VEC_mem_region_s__p):
Remove.
(target_debug_print_mem_region_vector): New.
* target-delegates.c: Regenerate.
* target.h (mem_region_vector): New typedef.
(to_memory_map): Return mem_region_vector.
(target_memory_map): Return an std::vector.
* target.c (target_memory_map): Return an std::vector.
(flash_erase_command): Adjust.
Diffstat (limited to 'gdb/memattr.h')
-rw-r--r-- | gdb/memattr.h | 69 |
1 files changed, 46 insertions, 23 deletions
diff --git a/gdb/memattr.h b/gdb/memattr.h index e869fa3..aa62bfb 100644 --- a/gdb/memattr.h +++ b/gdb/memattr.h @@ -20,8 +20,6 @@ #ifndef MEMATTR_H #define MEMATTR_H -#include "vec.h" - enum mem_access_mode { MEM_NONE, /* Memory that is not physically present. */ @@ -54,27 +52,62 @@ enum mem_access_width struct mem_attrib { + static mem_attrib unknown () + { + mem_attrib attrib; + + attrib.mode = MEM_NONE; + + return attrib; + } + /* read/write, read-only, or write-only */ - enum mem_access_mode mode; + enum mem_access_mode mode = MEM_RW; - enum mem_access_width width; + enum mem_access_width width = MEM_WIDTH_UNSPECIFIED; /* enables hardware breakpoints */ - int hwbreak; + int hwbreak = 0; /* enables host-side caching of memory region data */ - int cache; + int cache = 0; /* Enables memory verification. After a write, memory is re-read to verify that the write was successful. */ - int verify; + int verify = 0; /* Block size. Only valid if mode == MEM_FLASH. */ - int blocksize; + int blocksize = -1; }; struct mem_region { + /* Create a mem_region with default attributes. */ + + mem_region (CORE_ADDR lo_, CORE_ADDR hi_) + : lo (lo_), hi (hi_) + {} + + /* Create a mem_region with access mode MODE_, but otherwise default + attributes. */ + + mem_region (CORE_ADDR lo_, CORE_ADDR hi_, mem_access_mode mode_) + : lo (lo_), hi (hi_) + { + attrib.mode = mode_; + } + + /* Create a mem_region with attributes ATTRIB_. */ + + mem_region (CORE_ADDR lo_, CORE_ADDR hi_, const mem_attrib &attrib_) + : lo (lo_), hi (hi_), attrib (attrib_) + {} + + bool operator< (const mem_region &other) const + { + return this->lo < other.lo; + } + /* Lowest address in the region. */ CORE_ADDR lo; /* Address past the highest address of the region. @@ -82,28 +115,18 @@ struct mem_region CORE_ADDR hi; /* Item number of this memory region. */ - int number; + int number = 0; - /* Status of this memory region (enabled if non-zero, otherwise + /* Status of this memory region (enabled if true, otherwise disabled). */ - int enabled_p; + bool enabled_p = true; /* Attributes for this region. */ - struct mem_attrib attrib; + mem_attrib attrib; }; -/* Declare a vector type for a group of mem_region structures. The - typedef is necessary because vec.h can not handle a struct tag. - Except during construction, these vectors are kept sorted. */ -typedef struct mem_region mem_region_s; -DEF_VEC_O(mem_region_s); - -extern struct mem_region *lookup_mem_region(CORE_ADDR); +extern struct mem_region *lookup_mem_region (CORE_ADDR); void invalidate_target_mem_regions (void); -void mem_region_init (struct mem_region *); - -int mem_region_cmp (const void *, const void *); - #endif /* MEMATTR_H */ |