X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fdwarf2-frame.h;h=d6dbeffd876a7114c26812af3cab9069516f5ed7;hb=1431937bee66d6a36c377156d07856f6e469e552;hp=52316e5e168ba8c1c1987ef2aa3c7e1e8438e385;hpb=3c3bb0580be0027a1c7187b78c747af74dcfa884;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/dwarf2-frame.h b/gdb/dwarf2-frame.h index 52316e5e16..d6dbeffd87 100644 --- a/gdb/dwarf2-frame.h +++ b/gdb/dwarf2-frame.h @@ -1,6 +1,6 @@ /* Frame unwinder for frames with DWARF Call Frame Information. - Copyright (C) 2003-2018 Free Software Foundation, Inc. + Copyright (C) 2003-2019 Free Software Foundation, Inc. Contributed by Mark Kettenis. @@ -41,7 +41,7 @@ enum dwarf2_frame_reg_rule DWARF2_FRAME_REG_UNSPECIFIED = 0, /* The term "undefined" comes from the DWARF2 CFI spec which this - code is moddeling; it indicates that the register's value is + code is modeling; it indicates that the register's value is "undefined". GCC uses the less formal term "unsaved". Its definition is a combination of REG_UNDEFINED and REG_UNSPECIFIED. The failure to differentiate the two helps explain a few problems @@ -98,19 +98,14 @@ struct dwarf2_frame_state_reg_info ~dwarf2_frame_state_reg_info () { delete prev; - xfree (reg); } /* Copy constructor. */ dwarf2_frame_state_reg_info (const dwarf2_frame_state_reg_info &src) - : num_regs (src.num_regs), cfa_offset (src.cfa_offset), + : reg (src.reg), cfa_offset (src.cfa_offset), cfa_reg (src.cfa_reg), cfa_how (src.cfa_how), cfa_exp (src.cfa_exp), prev (src.prev) { - size_t size = src.num_regs * sizeof (struct dwarf2_frame_state_reg); - - reg = (struct dwarf2_frame_state_reg *) xmalloc (size); - memcpy (reg, src.reg, size); } /* Assignment operator for both move-assignment and copy-assignment. */ @@ -123,33 +118,26 @@ struct dwarf2_frame_state_reg_info /* Move constructor. */ dwarf2_frame_state_reg_info (dwarf2_frame_state_reg_info &&rhs) noexcept - : reg (rhs.reg), num_regs (rhs.num_regs), cfa_offset (rhs.cfa_offset), + : reg (std::move (rhs.reg)), cfa_offset (rhs.cfa_offset), cfa_reg (rhs.cfa_reg), cfa_how (rhs.cfa_how), cfa_exp (rhs.cfa_exp), prev (rhs.prev) { rhs.prev = nullptr; - rhs.reg = nullptr; } -/* Assert that the register set RS is large enough to store gdbarch_num_regs - columns. If necessary, enlarge the register set. */ + /* If necessary, enlarge the register set to hold NUM_REGS_REQUESTED + registers. */ void alloc_regs (int num_regs_requested) { - if (num_regs_requested <= num_regs) - return; + gdb_assert (num_regs_requested > 0); - size_t size = sizeof (struct dwarf2_frame_state_reg); - - reg = (struct dwarf2_frame_state_reg *) - xrealloc (reg, num_regs_requested * size); + if (num_regs_requested <= reg.size ()) + return; - /* Initialize newly allocated registers. */ - memset (reg + num_regs, 0, (num_regs_requested - num_regs) * size); - num_regs = num_regs_requested; + reg.resize (num_regs_requested); } - struct dwarf2_frame_state_reg *reg = NULL; - int num_regs = 0; + std::vector reg; LONGEST cfa_offset = 0; ULONGEST cfa_reg = 0; @@ -166,7 +154,6 @@ private: using std::swap; swap (lhs.reg, rhs.reg); - swap (lhs.num_regs, rhs.num_regs); swap (lhs.cfa_offset, rhs.cfa_offset); swap (lhs.cfa_reg, rhs.cfa_reg); swap (lhs.cfa_how, rhs.cfa_how); @@ -214,7 +201,7 @@ struct dwarf2_frame_state registered with the gdbarch. Not all architectures can or do use the DWARF unwinders. Setting this to true on a target that does not otherwise support the DWARF unwinders has no effect. */ -extern int dwarf2_frame_unwinders_enabled_p; +extern bool dwarf2_frame_unwinders_enabled_p; /* Set the architecture-specific register state initialization function for GDBARCH to INIT_REG. */