[PATCH] Support modified-breakpoint async output from GDB
- From: Dodji Seketeli <dodji redhat com>
- To: Nemiver Development <nemiver-list gnome org>
- Subject: [PATCH] Support modified-breakpoint async output from GDB
- Date: Sun, 27 Oct 2013 17:07:57 +0100
Hello,
When you set a breakpoint in an inferior before running it and then
run the inferior, GDB first sets the breakpoint, and then when the
inferior starts running and all the libraries are fully loaded, GDB
possibly emits an asynchronous notification saying that the breakpoint
has been modified.
Right now Nemiver just ignores that breakpoint modification
notification. After my last changes about the breakpoints with
multiple locations, it appears that the breakpoint modification can
actually change the number of locations of said breakpoint. So it
looks like we really ought to support this breakpoint modification
notification thingy.
The patch below adds that support.
Tested and applied to master.
* src/dbgengine/nmv-dbg-common.h
(Output::OutOfBandRecord::{m_has_modified_breakpoint,
m_modified_breakpoint): New members.
(Output::OutOfBandRecord::{has_modified_breakpoint,
modified_breakpoint}): New accessors.
(Output::OutOfBandRecord::clear): Clear m_has_modified_breakpoint
and m_modified_breakpoint.
(Output::OutOfBandRecords): New typedef.
* src/dbgengine/nmv-gdbmi-parser.h
(GDBMIParser::parse_breakpoint_modified_async_output): New
declaration.
* src/dbgengine/nmv-gdbmi-parser.cc (CHECK_END): Re-use
END_OF_INPUT for this macro.
(PARSING_ERROR_IF_END): New macro.
(PREFIX_*, NDELETED, NUMCHILD, CHANGELIST, PATH_EXPR): Make these
global variables static.
(PREFIX_BREAKPOINT_MODIFIED_ASYNC_OUTPUT): New static global
variable.
(GDBMIParser::parse_breakpoint_modified_async_output): New function.
(GDBMIParser::parse_out_of_band_record): New the new function
above.
* src/dbgengine/nmv-i-debugger.h (OverloadsChoiceEntry): New
typedef.
* src/dbgengine/nmv-gdb-engine.cc
(OnBreakpointHandler::{has_modified_breakpoint,
notify_breakpoint_deleted_signal,
append_bp_to_cache_and_notify_bp_set): New helper functions.
(OnBreakpointHandler::can_handle): If the output contains an
out-of-band-record with the modified breakpoint async output then
the OnBreakpointHandler can handle this output.
(OnBreakpointHandler::do_handle): New the above. Detect if a
breakpoint was modified. If so, delete its previous version from
the cache, notify listeners about the deletion, add the new
version to the cache and notify listeners about the addition.
Also, rename the has_breaks boolean into has_breaks_set. Remove
some trailing white space. Use the new
notify_breakpoint_deleted_signal to delete some old code, making
this a bit more maintainable.
* tests/test-gdbmi.cc (gv_breakpoint_modified_async_output0): New
global with a modified-breakpoint async output from GDB.
(test_breakpoint): Add testing about parsing the
modified-breakpoint async output from GDB above.
---
src/dbgengine/nmv-dbg-common.h | 56 ++++++++++++----
src/dbgengine/nmv-gdb-engine.cc | 130 +++++++++++++++++++++++++++++++++-----
src/dbgengine/nmv-gdbmi-parser.cc | 119 +++++++++++++++++++++++-----------
src/dbgengine/nmv-gdbmi-parser.h | 7 ++
src/dbgengine/nmv-i-debugger.h | 1 +
tests/test-gdbmi.cc | 12 ++++
6 files changed, 256 insertions(+), 69 deletions(-)
diff --git a/src/dbgengine/nmv-dbg-common.h b/src/dbgengine/nmv-dbg-common.h
index 79a38fc..2645e84 100644
--- a/src/dbgengine/nmv-dbg-common.h
+++ b/src/dbgengine/nmv-dbg-common.h
@@ -277,6 +277,8 @@ public:
long m_thread_id;
UString m_signal_type;
UString m_signal_meaning;
+ bool m_has_modified_breakpoint;
+ IDebugger::Breakpoint m_modified_breakpoint;
public:
@@ -378,23 +380,49 @@ public:
bool has_signal () const {return m_signal_type != "";}
- /// @}
-
- void clear ()
+ /// Getter of the "modified_breakpoint" flag. This flag is
+ /// true if the underlying debugging engine reports that a
+ /// given breakpoint has been modified.
+ ///
+ /// @return the modified_breakpoint flag.
+ bool has_modified_breakpoint () const
+ {return m_has_modified_breakpoint;}
+
+ /// Getter of the modified breakpoint carried by this out of
+ /// band record. What this returns is meaningful only if the
+ /// has_modified_breakpoint() member function above returns
+ /// true.
+ IDebugger::Breakpoint& modified_breakpoint ()
+ {return m_modified_breakpoint;}
+
+ /// Setter of the modified breakpoint carried by this out of
+ /// band record.
+ void modified_breakpoint (const IDebugger::Breakpoint& b)
{
- m_has_stream_record = false;
- m_stream_record.clear ();
- m_is_stopped = false;
- m_is_running = false;
- m_stop_reason = IDebugger::UNDEFINED_REASON;
- m_has_frame = false;
- m_thread_selected = false;
- m_frame.clear ();
- m_breakpoint_number = 0;
- m_thread_id = -1;
- m_signal_type.clear ();
+ m_modified_breakpoint = b;
+ m_has_modified_breakpoint = true;
}
+
+ /// @}
+
+ void clear ()
+ {
+ m_has_stream_record = false;
+ m_stream_record.clear ();
+ m_is_stopped = false;
+ m_is_running = false;
+ m_stop_reason = IDebugger::UNDEFINED_REASON;
+ m_has_frame = false;
+ m_thread_selected = false;
+ m_frame.clear ();
+ m_breakpoint_number = 0;
+ m_thread_id = -1;
+ m_signal_type.clear ();
+ m_has_modified_breakpoint = 0;
+ m_modified_breakpoint.clear();
+ }
};//end class OutOfBandRecord
+ typedef list<OutOfBandRecord> OutOfBandRecords;
/// \debugger result record
///
diff --git a/src/dbgengine/nmv-gdb-engine.cc b/src/dbgengine/nmv-gdb-engine.cc
index 7dcf196..68e181f 100644
--- a/src/dbgengine/nmv-gdb-engine.cc
+++ b/src/dbgengine/nmv-gdb-engine.cc
@@ -1494,10 +1494,93 @@ struct OnBreakpointHandler: OutputHandler {
return false;
}
- bool can_handle (CommandAndOutput &a_in)
+ /// \return true if the output has an out of band containing a
+ /// breakpoint-modified async output, and if so, set an iterator
+ /// over the out of band record that contains the first modified
+ /// breakpoint.
+ ///
+ /// \param a_in the debugging command sent and its output.
+ ///
+ /// \param b_ib out parameter. Set to the out of band record that
+ /// contains the modified breakpoint, iff the function returned
+ /// true.
+ bool
+ has_modified_breakpoint (CommandAndOutput &a_in,
+ Output::OutOfBandRecords::iterator &b_i) const
+ {
+ for (Output::OutOfBandRecords::iterator i =
+ a_in.output ().out_of_band_records ().begin ();
+ i != a_in.output ().out_of_band_records ().end ();
+ ++i) {
+ if (i->has_modified_breakpoint ()) {
+ b_i = i;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /// \param a_in command sent and its output.
+ ///
+ /// \return true if there is an out of band record that contains a
+ /// modified breakpoint.
+ bool
+ has_modified_breakpoint (CommandAndOutput &a_in) const
+ {
+ Output::OutOfBandRecords::iterator i;
+ return has_modified_breakpoint (a_in, i);
+ }
+
+ /// Look if we have a breakpoint of a given id in the cache. If
+ /// so, notify listeners that the breakpoint has been deleted and
+ /// delete it from the cache and return true.
+ ///
+ /// \param bp_id the id of the breakpoint to consider.
+ ///
+ /// \return true if the breakpoint has been found in the cache,
+ /// the listeners were notified about its deletion and it was
+ /// deleted from the cache.
+ bool
+ notify_breakpoint_deleted_signal (const string &bp_id)
+ {
+ map<string, IDebugger::Breakpoint>::iterator iter;
+ map<string, IDebugger::Breakpoint> &breaks =
+ m_engine->get_cached_breakpoints ();
+ iter = breaks.find (bp_id);
+ if (iter != breaks.end ()) {
+ LOG_DD ("firing IDebugger::breakpoint_deleted_signal()");
+ m_engine->breakpoint_deleted_signal ().emit (iter->second,
+ iter->first,
+ "");
+ breaks.erase (iter);
+ return true;
+ }
+ return false;
+ }
+
+ /// Append a breakpoint to the cache and notify the listeners that
+ /// this new breakpoint was set.
+ ///
+ /// \param b the breakpoint to add to the cache and to notify the
+ /// listeners about.
+ void
+ append_bp_to_cache_and_notify_bp_set (IDebugger::Breakpoint &b)
+ {
+ LOG_DD ("Adding bp " << b.id () << "to cache");
+ m_engine->append_breakpoint_to_cache (b);
+
+ map<string, IDebugger::Breakpoint> bps;
+ bps[b.id ()] = b;
+ LOG_DD ("Firing bp " << b.id() << " set");
+ m_engine->breakpoints_set_signal ().emit (bps, "");
+ }
+
+ bool
+ can_handle (CommandAndOutput &a_in)
{
if (!a_in.output ().has_result_record ()
- && !has_overloads_prompt (a_in)) {
+ && !has_overloads_prompt (a_in)
+ && !has_modified_breakpoint (a_in)) {
return false;
}
LOG_DD ("handler selected");
@@ -1532,7 +1615,30 @@ struct OnBreakpointHandler: OutputHandler {
return;
}
- bool has_breaks = false;
+ // If there is modified breakpoint, delete its previous
+ // version from the cache, notify the listeners about its
+ // deletion, add the new version to the cache and notify the
+ // listeners about its addition.
+ {
+ Output::OutOfBandRecords::iterator i, end;
+ if (has_modified_breakpoint (a_in, i)) {
+ LOG_DD ("has modified breakpoints!");
+ end = a_in.output ().out_of_band_records ().end ();
+ for (; i != end; ++i) {
+ if (!i->has_modified_breakpoint ())
+ continue;
+ IDebugger::Breakpoint &b = i->modified_breakpoint ();
+ LOG_DD ("bp " << b.id () << ": notify deleted");
+ notify_breakpoint_deleted_signal (b.id ());
+ LOG_DD ("bp "
+ << b.id ()
+ << ": add to cache and notify set");
+ append_bp_to_cache_and_notify_bp_set (b);
+ }
+ }
+ }
+
+ bool has_breaks_set = false;
//if breakpoint where set, put them in cache !
if (has_breakpoints_set (a_in)) {
LOG_DD ("adding BPs to cache");
@@ -1546,10 +1652,10 @@ struct OnBreakpointHandler: OutputHandler {
breakpoints ().begin ()->second.id (),
true);
}
- has_breaks = true;
+ has_breaks_set = true;
}
- if (has_breaks
+ if (has_breaks_set
&& (a_in.command ().name () == "set-breakpoint"
|| a_in.command ().name () == "set-countpoint")) {
// We are getting this reply b/c we did set a breakpoint;
@@ -1575,7 +1681,6 @@ struct OnBreakpointHandler: OutputHandler {
== Output::ResultRecord::DONE
&& a_in.command ().value ().find ("-break-delete")
!= Glib::ustring::npos) {
-
LOG_DD ("detected break-delete");
UString tmp = a_in.command ().value ();
tmp = tmp.erase (0, 13);
@@ -1583,23 +1688,14 @@ struct OnBreakpointHandler: OutputHandler {
tmp.chomp ();
string bkpt_number = tmp;
if (!bkpt_number.empty ()) {
- map<string, IDebugger::Breakpoint>::iterator iter;
- map<string, IDebugger::Breakpoint> &breaks =
- m_engine->get_cached_breakpoints ();
- iter = breaks.find (bkpt_number);
- if (iter != breaks.end ()) {
- LOG_DD ("firing IDebugger::breakpoint_deleted_signal()");
- m_engine->breakpoint_deleted_signal ().emit
- (iter->second, iter->first, a_in.command ().cookie ());
- breaks.erase (iter);
- }
+ notify_breakpoint_deleted_signal (bkpt_number);
m_engine->set_state (IDebugger::READY);
} else {
LOG_ERROR ("Got deleted breakpoint number '"
<< tmp
<< "', but that's not a well formed number, dude.");
}
- } else if (has_breaks) {
+ } else if (has_breaks_set) {
LOG_DD ("firing IDebugger::breakpoints_list_signal(), after command: "
<< a_in.command ().name ());
m_engine->breakpoints_list_signal ().emit
diff --git a/src/dbgengine/nmv-gdbmi-parser.cc b/src/dbgengine/nmv-gdbmi-parser.cc
index 9f651e0..d414d5d 100644
--- a/src/dbgengine/nmv-gdbmi-parser.cc
+++ b/src/dbgengine/nmv-gdbmi-parser.cc
@@ -54,12 +54,20 @@ LOG_ERROR ("parsing failed for buf: >>>" \
<< ", reason: " << msg); \
} while (0)
-#define CHECK_END(a_current) \
-if ((a_current) >= (m_priv->end)) {\
-LOG_ERROR ("hit end index " << (int) m_priv->end); \
-return false;\
+#define END_OF_INPUT(cur) m_priv->index_passed_end (cur)
+
+#define CHECK_END(a_current) \
+ if (END_OF_INPUT (a_current)) { \
+ LOG_ERROR ("hit end index " << (int) m_priv->end); \
+ return false; \
}
+#define PARSING_ERROR_IF_END(cur) \
+ if (END_OF_INPUT (cur)) { \
+ LOG_PARSING_ERROR (cur); \
+ return false; \
+ }
+
#define SKIP_WS(a_from) \
while (!m_priv->index_passed_end (a_from) \
&& isspace (RAW_CHAR_AT (a_from))) { \
@@ -74,8 +82,6 @@ while (!m_priv->index_passed_end (a_from) \
#define RAW_INPUT m_priv->input.raw ()
-#define END_OF_INPUT(cur) m_priv->index_passed_end (cur)
-
using namespace std;
using namespace nemiver::common;
@@ -120,38 +126,39 @@ GDBMITuple::clear ()
// *******************************
// prefixes of command output records.
-const char* PREFIX_DONE = "^done";
-const char* PREFIX_RUNNING = "^running";
-const char* PREFIX_EXIT = "^exit";
-const char* PREFIX_CONNECTED = "^connected";
-const char* PREFIX_ERROR = "^error";
-const char* PREFIX_BKPT = "bkpt={";
-const char* PREFIX_BREAKPOINT_TABLE = "BreakpointTable={";
-const char* PREFIX_THREAD_IDS = "thread-ids={";
-const char* PREFIX_NEW_THREAD_ID = "new-thread-id=\"";
-const char* PREFIX_FILES = "files=[";
-const char* PREFIX_STACK = "stack=[";
-const char* PREFIX_FRAME = "frame={";
-const char* PREFIX_DEPTH = "depth=\"";
-const char* PREFIX_STACK_ARGS = "stack-args=[";
-const char* PREFIX_LOCALS = "locals=[";
-const char* PREFIX_VALUE = "value=\"";
-const char* PREFIX_REGISTER_NAMES = "register-names=";
-const char* PREFIX_CHANGED_REGISTERS = "changed-registers=";
-const char* PREFIX_REGISTER_VALUES = "register-values=";
-const char* PREFIX_MEMORY_VALUES = "addr=";
-const char* PREFIX_RUNNING_ASYNC_OUTPUT = "*running,";
-const char* PREFIX_STOPPED_ASYNC_OUTPUT = "*stopped,";
-const char* PREFIX_THREAD_SELECTED_ASYNC_OUTPUT = "=thread-selected,";
-const char* PREFIX_NAME = "name=\"";
-const char* PREFIX_VARIABLE_DELETED = "ndeleted=\"";
-const char* NDELETED = "ndeleted";
-const char* PREFIX_NUMCHILD = "numchild=\"";
-const char* NUMCHILD = "numchild";
-const char* PREFIX_VARIABLES_CHANGED_LIST = "changelist=[";
-const char* CHANGELIST = "changelist";
-const char* PREFIX_PATH_EXPR = "path_expr=";
-const char* PATH_EXPR = "path_expr";
+static const char* PREFIX_DONE = "^done";
+static const char* PREFIX_RUNNING = "^running";
+static const char* PREFIX_EXIT = "^exit";
+static const char* PREFIX_CONNECTED = "^connected";
+static const char* PREFIX_ERROR = "^error";
+static const char* PREFIX_BKPT = "bkpt={";
+static const char* PREFIX_BREAKPOINT_TABLE = "BreakpointTable={";
+static const char* PREFIX_BREAKPOINT_MODIFIED_ASYNC_OUTPUT = "=breakpoint-modified,";
+static const char* PREFIX_THREAD_IDS = "thread-ids={";
+static const char* PREFIX_NEW_THREAD_ID = "new-thread-id=\"";
+static const char* PREFIX_FILES = "files=[";
+static const char* PREFIX_STACK = "stack=[";
+static const char* PREFIX_FRAME = "frame={";
+static const char* PREFIX_DEPTH = "depth=\"";
+static const char* PREFIX_STACK_ARGS = "stack-args=[";
+static const char* PREFIX_LOCALS = "locals=[";
+static const char* PREFIX_VALUE = "value=\"";
+static const char* PREFIX_REGISTER_NAMES = "register-names=";
+static const char* PREFIX_CHANGED_REGISTERS = "changed-registers=";
+static const char* PREFIX_REGISTER_VALUES = "register-values=";
+static const char* PREFIX_MEMORY_VALUES = "addr=";
+static const char* PREFIX_RUNNING_ASYNC_OUTPUT = "*running,";
+static const char* PREFIX_STOPPED_ASYNC_OUTPUT = "*stopped,";
+static const char* PREFIX_THREAD_SELECTED_ASYNC_OUTPUT = "=thread-selected,";
+static const char* PREFIX_NAME = "name=\"";
+static const char* PREFIX_VARIABLE_DELETED = "ndeleted=\"";
+static const char* NDELETED = "ndeleted";
+static const char* PREFIX_NUMCHILD = "numchild=\"";
+static const char* NUMCHILD = "numchild";
+static const char* PREFIX_VARIABLES_CHANGED_LIST = "changelist=[";
+static const char* CHANGELIST = "changelist";
+static const char* PREFIX_PATH_EXPR = "path_expr=";
+static const char* PATH_EXPR = "path_expr";
static const char* PREFIX_ASM_INSTRUCTIONS= "asm_insns=";
const char* PREFIX_VARIABLE_FORMAT = "format=";
@@ -1800,6 +1807,20 @@ GDBMIParser::parse_out_of_band_record (UString::size_type a_from,
goto end;
}
+ if (!RAW_INPUT.compare (cur,
+ strlen (PREFIX_BREAKPOINT_MODIFIED_ASYNC_OUTPUT),
+ PREFIX_BREAKPOINT_MODIFIED_ASYNC_OUTPUT)) {
+ IDebugger::Breakpoint bp;
+ if (!parse_breakpoint_modified_async_output (cur, cur, bp)) {
+ LOG_PARSING_ERROR_MSG (cur,
+ "could not parse the expected "
+ "breakpoint modifed async output");
+ return false;
+ }
+ record.modified_breakpoint (bp);
+ goto end;
+ }
+
if (RAW_CHAR_AT (cur) == '=' || RAW_CHAR_AT (cur) == '*') {
//this is an unknown async notification sent by gdb.
//For now, the only one
@@ -2501,6 +2522,28 @@ GDBMIParser::parse_breakpoint_table (UString::size_type a_from,
}
bool
+GDBMIParser::parse_breakpoint_modified_async_output (UString::size_type a_from,
+ UString::size_type &a_to,
+ IDebugger::Breakpoint &a_b)
+{
+ LOG_FUNCTION_SCOPE_NORMAL_DD;
+
+ UString::size_type cur = a_from;
+
+ int prefix_len = strlen (PREFIX_BREAKPOINT_MODIFIED_ASYNC_OUTPUT);
+ if (RAW_INPUT.compare (cur, prefix_len,
+ PREFIX_BREAKPOINT_MODIFIED_ASYNC_OUTPUT)) {
+ LOG_PARSING_ERROR (cur);
+ return false;
+ }
+
+ cur += prefix_len;
+ PARSING_ERROR_IF_END (cur);
+
+ return parse_breakpoint (cur, a_to, a_b);
+}
+
+bool
GDBMIParser::parse_threads_list (UString::size_type a_from,
UString::size_type &a_to,
std::list<int> &a_thread_ids)
diff --git a/src/dbgengine/nmv-gdbmi-parser.h b/src/dbgengine/nmv-gdbmi-parser.h
index f0e6cc1..aea914d 100644
--- a/src/dbgengine/nmv-gdbmi-parser.h
+++ b/src/dbgengine/nmv-gdbmi-parser.h
@@ -533,6 +533,13 @@ public:
UString::size_type &a_to,
map<string, IDebugger::Breakpoint> &a_breakpoints);
+ /// Parse a GDB/MI async output that says that a breakpoint that
+ /// was set (e.g before the inferior is run) has changed (e.g
+ /// after the inferior started to run).
+ bool parse_breakpoint_modified_async_output (UString::size_type a_from,
+ UString::size_type &a_to,
+ IDebugger::Breakpoint &a_b);
+
/// parses the result of the gdbmi command
/// "-thread-list-ids".
bool parse_threads_list (UString::size_type a_from,
diff --git a/src/dbgengine/nmv-i-debugger.h b/src/dbgengine/nmv-i-debugger.h
index 9e05e10..63e2639 100644
--- a/src/dbgengine/nmv-i-debugger.h
+++ b/src/dbgengine/nmv-i-debugger.h
@@ -362,6 +362,7 @@ public:
int line_number () const {return m_line_number;}
void line_number (int a_in) {m_line_number = a_in;}
};//end class OverloadsChoiceEntry
+ typedef vector<OverloadsChoiceEntry> OverloadsChoiceEntries;
class Variable;
typedef SafePtr<Variable, ObjectRef, ObjectUnref> VariableSafePtr;
diff --git a/tests/test-gdbmi.cc b/tests/test-gdbmi.cc
index 2f48c44..6f5edc5 100644
--- a/tests/test-gdbmi.cc
+++ b/tests/test-gdbmi.cc
@@ -168,6 +168,9 @@ static const char* gv_breakpoint2 =
static const char* gv_breakpoint3 =
"bkpt={number=\"2\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"<MULTIPLE>\",times=\"0\",original-location=\"error\"},{number=\"2.1\",enabled=\"y\",addr=\"0x000000000132d2f7\",func=\"error(char
const*,...)\",file=\"/home/dodji/git/gcc/PR56782/gcc/diagnostic.c\",fullname=\"/home/dodji/git/gcc/PR56782/gcc/diagnostic.c\",line=\"1038\"},{number=\"2.2\",enabled=\"y\",addr=\"0x00000032026f1490\",at=\"<error>\"}";
+static const char* gv_breakpoint_modified_async_output0 =
+
"=breakpoint-modified,bkpt={number=\"2\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"<MULTIPLE>\",times=\"0\",original-location=\"/home/dodji/git/libabigail/abi-diff/include/abg-diff-utils.h:1322\"},{number=\"2.1\",enabled=\"y\",addr=\"0x00007ffff7d70922\",func=\"abigail::diff_utils::compute_diff<__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::base_spec>
const*, std::vector<std::tr1::shared_ptr<abigail::class_decl::base_spec>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::base_spec> > > >
(__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::base_spec> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::base_spec>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::base_spec> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::base_spec> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::base_spec>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::base_spec> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::base_spec> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::base_spec>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::base_spec> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::base_spec> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::base_spec>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::base_spec> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::base_spec> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::base_spec>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::base_spec> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::base_spec> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::base_spec>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::base_spec> > > >,
std::vector<abigail::diff_utils::point, std::allocator<abigail::diff_utils::point> >&,
abigail::diff_utils::edit_script&,
int&)\",file=\"/home/dodji/git/libabigail/abi-diff/build/../include/abg-diff-utils.h\",fullname=\"/home/dodji/git/libabigail/abi-diff/include/abg-diff-utils.h\",line=\"1322\"},{number=\"2.2\",enabled=\"y\",addr=\"0x00007ffff7d71536\",func=\"abigail::diff_utils::compute_diff<__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_type>
const*, std::vector<std::tr1::shared_ptr<abigail::class_decl::member_type>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_type> > > >
(__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_type> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_type>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_type> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_type> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_type>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_type> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_type> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_type>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_type> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_type> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_type>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_type> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_type> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_type>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_type> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_type> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_type>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_type> > > >,
std::vector<abigail::diff_utils::point, std::allocator<abigail::diff_utils::point> >&,
abigail::diff_utils::edit_script&,
int&)\",file=\"/home/dodji/git/libabigail/abi-diff/build/../include/abg-diff-utils.h\",fullname=\"/home/dodji/git/libabigail/abi-diff/include/abg-diff-utils.h\",line=\"1322\"},{number=\"2.3\",enabled=\"y\",addr=\"0x00007ffff7d7214a\",func=\"abigail::diff_utils::compute_diff<__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::data_member>
const*, std::vector<std::tr1::shared_ptr<abigail::class_decl::data_member>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::data_member> > > >
(__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::data_member> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::data_member>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::data_member> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::data_member> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::data_member>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::data_member> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::data_member> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::data_member>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::data_member> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::data_member> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::data_member>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::data_member> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::data_member> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::data_member>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::data_member> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::data_member> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::data_member>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::data_member> > > >,
std::vector<abigail::diff_utils::point, std::allocator<abigail::diff_utils::point> >&,
abigail::diff_utils::edit_script&,
int&)\",file=\"/home/dodji/git/libabigail/abi-diff/build/../include/abg-diff-utils.h\",fullname=\"/home/dodji/git/libabigail/abi-diff/include/abg-diff-utils.h\",line=\"1322\"},{number=\"2.4\",enabled=\"y\",addr=\"0x00007ffff7d72d5e\",func=\"abigail::diff_utils::compute_diff<__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function>
const*, std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function> > > >
(__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function> > > >,
std::vector<abigail::diff_utils::point, std::allocator<abigail::diff_utils::point> >&,
abigail::diff_utils::edit_script&,
int&)\",file=\"/home/dodji/git/libabigail/abi-diff/build/../include/abg-diff-utils.h\",fullname=\"/home/dodji/git/libabigail/abi-diff/include/abg-diff-utils.h\",line=\"1322\"},{number=\"2.5\",enabled=\"y\",addr=\"0x00007ffff7d73972\",func=\"abigail::diff_utils::compute_diff<__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function_template>
const*, std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function_template> > > >
(__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function_template> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function_template> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function_template> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function_template> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function_template> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function_template> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function_template> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function_template> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function_template> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function_template> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_function_template> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_function_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_function_template> > > >,
std::vector<abigail::diff_utils::point, std::allocator<abigail::diff_utils::point> >&,
abigail::diff_utils::edit_script&,
int&)\",file=\"/home/dodji/git/libabigail/abi-diff/build/../include/abg-diff-utils.h\",fullname=\"/home/dodji/git/libabigail/abi-diff/include/abg-diff-utils.h\",line=\"1322\"},{number=\"2.6\",enabled=\"y\",addr=\"0x00007ffff7d74586\",func=\"abigail::diff_utils::compute_diff<__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_class_template>
const*, std::vector<std::tr1::shared_ptr<abigail::class_decl::member_class_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_class_template> > > >
(__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_class_template> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_class_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_class_template> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_class_template> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_class_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_class_template> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_class_template> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_class_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_class_template> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_class_template> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_class_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_class_template> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_class_template> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_class_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_class_template> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::class_decl::member_class_template> const*,
std::vector<std::tr1::shared_ptr<abigail::class_decl::member_class_template>,
std::allocator<std::tr1::shared_ptr<abigail::class_decl::member_class_template> > > >,
std::vector<abigail::diff_utils::point, std::allocator<abigail::diff_utils::point> >&,
abigail::diff_utils::edit_script&,
int&)\",file=\"/home/dodji/git/libabigail/abi-diff/build/../include/abg-diff-utils.h\",fullname=\"/home/dodji/git/libabigail/abi-diff/include/abg-diff-utils.h\",line=\"1322\"},{number=\"2.7\",enabled=\"y\",addr=\"0x00007ffff7d75928\",func=\"abigail::diff_utils::compute_diff<__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::decl_base>
const*, std::vector<std::tr1::shared_ptr<abigail::decl_base>,
std::allocator<std::tr1::shared_ptr<abigail::decl_base> > > >
(__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::decl_base> const*,
std::vector<std::tr1::shared_ptr<abigail::decl_base>, std::allocator<std::tr1::shared_ptr<abigail::decl_base>
, __gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::decl_base> const*,
std::vector<std::tr1::shared_ptr<abigail::decl_base>, std::allocator<std::tr1::shared_ptr<abigail::decl_base>
, __gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::decl_base> const*,
std::vector<std::tr1::shared_ptr<abigail::decl_base>, std::allocator<std::tr1::shared_ptr<abigail::decl_base>
, __gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::decl_base> const*,
std::vector<std::tr1::shared_ptr<abigail::decl_base>, std::allocator<std::tr1::shared_ptr<abigail::decl_base>
, __gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::decl_base> const*,
std::vector<std::tr1::shared_ptr<abigail::decl_base>, std::allocator<std::tr1::shared_ptr<abigail::decl_base>
, __gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::decl_base> const*,
std::vector<std::tr1::shared_ptr<abigail::decl_base>, std::allocator<std::tr1::shared_ptr<abigail::decl_base>
, std::vector<abigail::diff_utils::point, std::allocator<abigail::diff_utils::point> >&,
abigail::diff_utils::edit_script&,
int&)\",file=\"/home/dodji/git/libabigail/abi-diff/build/../include/abg-diff-utils.h\",fullname=\"/home/dodji/git/libabigail/abi-diff/include/abg-diff-utils.h\",line=\"1322\"},{number=\"2.8\",enabled=\"y\",addr=\"0x00007ffff7d76f1a\",func=\"abigail::diff_utils::compute_diff<__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::function_decl::parameter>
const*, std::vector<std::tr1::shared_ptr<abigail::function_decl::parameter>,
std::allocator<std::tr1::shared_ptr<abigail::function_decl::parameter> > > >
(__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::function_decl::parameter> const*,
std::vector<std::tr1::shared_ptr<abigail::function_decl::parameter>,
std::allocator<std::tr1::shared_ptr<abigail::function_decl::parameter> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::function_decl::parameter> const*,
std::vector<std::tr1::shared_ptr<abigail::function_decl::parameter>,
std::allocator<std::tr1::shared_ptr<abigail::function_decl::parameter> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::function_decl::parameter> const*,
std::vector<std::tr1::shared_ptr<abigail::function_decl::parameter>,
std::allocator<std::tr1::shared_ptr<abigail::function_decl::parameter> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::function_decl::parameter> const*,
std::vector<std::tr1::shared_ptr<abigail::function_decl::parameter>,
std::allocator<std::tr1::shared_ptr<abigail::function_decl::parameter> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::function_decl::parameter> const*,
std::vector<std::tr1::shared_ptr<abigail::function_decl::parameter>,
std::allocator<std::tr1::shared_ptr<abigail::function_decl::parameter> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<abigail::function_decl::parameter> const*,
std::vector<std::tr1::shared_ptr<abigail::function_decl::parameter>,
std::allocator<std::tr1::shared_ptr<abigail::function_decl::parameter> > > >,
std::vector<abigail::diff_utils::point, std::allocator<abigail::diff_utils::point> >&,
abigail::diff_utils::edit_script&,
int&)\",file=\"/home/dodji/git/libabigail/abi-diff/build/../include/abg-diff-utils.h\",fullname=\"/home/dodji/git/libabigail/abi-diff/include/abg-diff-utils.h\",line=\"1322\"},{number=\"2.9\",enabled=\"y\",addr=\"0x00007ffff7d77b2e\",func=\"abigail::diff_utils::compute_diff<__gnu_cxx::__normal_iterator<char*,
std::vector<char, std::allocator<char> > > >(__gnu_cxx::__normal_iterator<char*, std::vector<char,
std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >,
__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >,
__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >,
__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >,
__gnu_cxx::__normal_iterator<char*, std::vector<char, std::allocator<char> > >,
std::vector<abigail::diff_utils::point, std::allocator<abigail::diff_utils::point> >&,
abigail::diff_utils::edit_script&,
int&)\",file=\"/home/dodji/git/libabigail/abi-diff/build/../include/abg-diff-utils.h\",fullname=\"/home/dodji/git/libabigail/abi-diff/include/abg-diff-utils.h\",line=\"1322\"},{number=\"2.10\",enabled=\"y\",addr=\"0x00007ffff7d573c8\",func=\"abigail::diff_utils::compute_diff<char
const*>(char const*, char const*, char const*, char const*, char const*, char const*,
std::vector<abigail::diff_utils::point, std::allocator<abigail::diff_utils::point> >&,
abigail::diff_utils::edit_script&,
int&)\",file=\"/home/dodji/git/libabigail/abi-diff/build/../include/abg-diff-utils.h\",fullname=\"/home/dodji/git/libabigail/abi-diff/include/abg-diff-utils.h\",line=\"1322\"}";
+
const char *gv_disassemble0 =
"asm_insns=[{address=\"0x08048dc3\",func-name=\"main\",offset=\"0\",inst=\"lea
0x4(%esp),%ecx\"},{address=\"0x08048dc7\",func-name=\"main\",offset=\"4\",inst=\"and
$0xfffffff0,%esp\"},{address=\"0x08048dca\",func-name=\"main\",offset=\"7\",inst=\"pushl
-0x4(%ecx)\"},{address=\"0x08048dcd\",func-name=\"main\",offset=\"10\",inst=\"push
%ebp\"},{address=\"0x08048dce\",func-name=\"main\",offset=\"11\",inst=\"mov
%esp,%ebp\"},{address=\"0x08048dd0\",func-name=\"main\",offset=\"13\",inst=\"push
%esi\"},{address=\"0x08048dd1\",func-name=\"main\",offset=\"14\",inst=\"push
%ebx\"},{address=\"0x08048dd2\",func-name=\"main\",offset=\"15\",inst=\"push
%ecx\"},{address=\"0x08048dd3\",func-name=\"main\",offset=\"16\",inst=\"sub
$0x5c,%esp\"},{address=\"0x08048dd6\",func-name=\"main\",offset=\"19\",inst=\"lea
-0x25(%ebp),%eax\"},{address=\"0x08048dd9\",func-name=\"main\",offset=\"22\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048ddc\",func-name=\"main\",offset=\"25\",inst=\"call 0x8048be4 <_ZNSaIcEC1Ev
plt>\"},{address=\"0x08048de1\",func-name=\"main\",offset=\"30\",inst=\"lea
-0x25(%ebp),%eax\"},{address=\"0x08048de4\",func-name=\"main\",offset=\"33\",inst=\"mov
%eax,0x8(%esp)\"},{address=\"0x08048de8\",func-name=\"main\",offset=\"37\",inst=\"movl
$0x8049485,0x4(%esp)\"},{address=\"0x08048df0\",func-name=\"main\",offset=\"45\",inst=\"lea
-0x2c(%ebp),%eax\"},{address=\"0x08048df3\",func-name=\"main\",offset=\"48\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048df6\",func-name=\"main\",offset=\"51\",inst=\"call 0x8048b84
<_ZNSsC1EPKcRKSaIcE plt>\"},{address=\"0x08048dfb\",func-name=\"main\",offset=\"56\",inst=\"lea
-0x1d(%ebp),%eax\"},{address=\"0x08048dfe\",func-name=\"main\",offset=\"59\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048e01\",func-name=\"main\",offset=\"62\",inst=\"call 0x8048be4 <_ZNSaIcEC1Ev
plt>\"},{address=\"0x08048e06\",func-name=\"main\",offset=\"67\",inst=\"lea
-0x1d(%ebp),%eax\"},{address=\"0x08048e09\",func-name=\"main\",offset=\"70\",inst=\"mov
%eax,0x8(%esp)\"},{address=\"0x08048e0d\",func-name=\"main\",offset=\"74\",inst=\"movl
$0x804948c,0x4(%esp)\"},{address=\"0x08048e15\",func-name=\"main\",offset=\"82\",inst=\"lea
-0x24(%ebp),%eax\"},{address=\"0x08048e18\",func-name=\"main\",offset=\"85\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048e1b\",func-name=\"main\",offset=\"88\",inst=\"call 0x8048b84
<_ZNSsC1EPKcRKSaIcE plt>\"},{address=\"0x08048e20\",func-name=\"main\",offset=\"93\",inst=\"movl
$0xf,0xc(%esp)\"},{address=\"0x08048e28\",func-name=\"main\",offset=\"101\",inst=\"lea
-0x2c(%ebp),%eax\"},{address=\"0x08048e2b\",func-name=\"main\",offset=\"104\",inst=\"mov
%eax,0x8(%esp)\"},{address=\"0x08048e2f\",func-name=\"main\",offset=\"108\",inst=\"lea
-0x24(%ebp),%eax\"},{address=\"0x08048e32\",func-name=\"main\",offset=\"111\",inst=\"mov
%eax,0x4(%esp)\"},{address=\"0x08048e36\",func-name=\"main\",offset=\"115\",inst=\"lea
-0x38(%ebp),%eax\"},{address=\"0x08048e39\",func-name=\"main\",offset=\"118\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048e3c\",func-name=\"main\",offset=\"121\",inst=\"call 0x8049178
<Person>\"},{address=\"0x08048e41\",func-name=\"main\",offset=\"126\",inst=\"lea
-0x24(%ebp),%eax\"},{address=\"0x08048e44\",func-name=\"main\",offset=\"129\",inst=\"mov
%eax,-0x48(%ebp)\"},{address=\"0x08048e47\",func-name=\"main\",offset=\"132\",inst=\"mov
-0x48(%ebp),%eax\"},{address=\"0x08048e4a\",func-name=\"main\",offset=\"135\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048e4d\",func-name=\"main\",offset=\"138\",inst=\"call 0x8048bb4 <_ZNSsD1Ev
plt>\"},{address=\"0x08048e52\",func-name=\"main\",offset=\"143\",inst=\"jmp 0x8048e79
<main+182>\"},{address=\"0x08048e54\",func-name=\"main\",offset=\"145\",inst=\"mov
%eax,-0x54(%ebp)\"},{address=\"0x08048e57\",func-name=\"main\",offset=\"148\",inst=\"mov
%edx,-0x50(%ebp)\"},{address=\"0x08048e5a\",func-name=\"main\",offset=\"151\",inst=\"mov
-0x50(%ebp),%esi\"},{address=\"0x08048e5d\",func-name=\"main\",offset=\"154\",inst=\"mov
-0x54(%ebp),%ebx\"},{address=\"0x08048e60\",func-name=\"main\",offset=\"157\",inst=\"lea
-0x24(%ebp),%eax\"},{address=\"0x08048e63\",func-name=\"main\",offset=\"160\",inst=\"mov
%eax,-0x48(%ebp)\"},{address=\"0x08048e66\",func-name=\"main\",offset=\"163\",inst=\"mov
-0x48(%ebp),%eax\"},{address=\"0x08048e69\",func-name=\"main\",offset=\"166\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048e6c\",func-name=\"main\",offset=\"169\",inst=\"call 0x8048bb4 <_ZNSsD1Ev
plt>\"},{address=\"0x08048e71\",func-name=\"main\",offset=\"174\",inst=\"mov
%ebx,-0x54(%ebp)\"},{address=\"0x08048e74\",func-name=\"main\",offset=\"177\",inst=\"mov
%esi,-0x50(%ebp)\"},{address=\"0x08048e77\",func-name=\"main\",offset=\"180\",inst=\"jmp 0x8048ebc
<main+249>\"},{address=\"0x08048e79\",func-name=\"main\",offset=\"182\",inst=\"lea
-0x1d(%ebp),%eax\"},{address=\"0x08048e7c\",func-name=\"main\",offset=\"185\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048e7f\",func-name=\"main\",offset=\"188\",inst=\"call 0x8048b74
<_ZNSaIcED1Ev plt>\"},{address=\"0x08048e84\",func-name=\"main\",offset=\"193\",inst=\"lea
-0x2c(%ebp),%eax\"},{address=\"0x08048e87\",func-name=\"main\",offset=\"196\",inst=\"mov
%eax,-0x4c(%ebp)\"},{address=\"0x08048e8a\",func-name=\"main\",offset=\"199\",inst=\"mov
-0x4c(%ebp),%eax\"},{address=\"0x08048e8d\",func-name=\"main\",offset=\"202\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048e90\",func-name=\"main\",offset=\"205\",inst=\"call 0x8048bb4 <_ZNSsD1Ev
plt>\"},{address=\"0x08048e95\",func-name=\"main\",offset=\"210\",inst=\"jmp 0x8048ef2
<main+303>\"},{address=\"0x08048e97\",func-name=\"main\",offset=\"212\",inst=\"mov
%eax,-0x54(%ebp)\"},{address=\"0x08048e9a\",func-name=\"main\",offset=\"215\",inst=\"mov
%edx,-0x50(%ebp)\"},{address=\"0x08048e9d\",func-name=\"main\",offset=\"218\",inst=\"mov
-0x50(%ebp),%esi\"},{address=\"0x08048ea0\",func-name=\"main\",offset=\"221\",inst=\"mov
-0x54(%ebp),%ebx\"},{address=\"0x08048ea3\",func-name=\"main\",offset=\"224\",inst=\"lea
-0x38(%ebp),%eax\"},{address=\"0x08048ea6\",func-name=\"main\",offset=\"227\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048ea9\",func-name=\"main\",offset=\"230\",inst=\"call 0x804921a
<~Person>\"},{address=\"0x08048eae\",func-name=\"main\",offset=\"235\",inst=\"mov
%ebx,-0x54(%ebp)\"},{address=\"0x08048eb1\",func-name=\"main\",offset=\"238\",inst=\"mov
%esi,-0x50(%ebp)\"},{address=\"0x08048eb4\",func-name=\"main\",offset=\"241\",inst=\"jmp 0x8048ebc
<main+249>\"},{address=\"0x08048eb6\",func-name=\"main\",offset=\"243\",inst=\"mov
%eax,-0x54(%ebp)\"},{address=\"0x08048eb9\",func-name=\"main\",offset=\"246\",inst=\"mov
%edx,-0x50(%ebp)\"},{address=\"0x08048ebc\",func-name=\"main\",offset=\"249\",inst=\"mov
-0x50(%ebp),%esi\"},{address=\"0x08048ebf\",func-name=\"main\",offset=\"252\",inst=\"mov
-0x54(%ebp),%ebx\"},{address=\"0x08048ec2\",func-name=\"main\",offset=\"255\",inst=\"lea
-0x1d(%ebp),%eax\"},{address=\"0x08048ec5\",func-name=\"main\",offset=\"258\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048ec8\",func-name=\"main\",offset=\"261\",inst=\"call 0x8048b74
<_ZNSaIcED1Ev plt>\"},{address=\"0x08048ecd\",func-name=\"main\",offset=\"266\",inst=\"mov
%ebx,-0x54(%ebp)\"},{address=\"0x08048ed0\",func-name=\"main\",offset=\"269\",inst=\"mov
%esi,-0x50(%ebp)\"},{address=\"0x08048ed3\",func-name=\"main\",offset=\"272\",inst=\"mov
-0x50(%ebp),%esi\"},{address=\"0x08048ed6\",func-name=\"main\",offset=\"275\",inst=\"mov
-0x54(%ebp),%ebx\"},{address=\"0x08048ed9\",func-name=\"main\",offset=\"278\",inst=\"lea
-0x2c(%ebp),%eax\"},{address=\"0x08048edc\",func-name=\"main\",offset=\"281\",inst=\"mov
%eax,-0x4c(%ebp)\"},{address=\"0x08048edf\",func-name=\"main\",offset=\"284\",inst=\"mov
-0x4c(%ebp),%eax\"},{address=\"0x08048ee2\",func-name=\"main\",offset=\"287\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048ee5\",func-name=\"main\",offset=\"290\",inst=\"call 0x8048bb4 <_ZNSsD1Ev
plt>\"},{address=\"0x08048eea\",func-name=\"main\",offset=\"295\",inst=\"mov
%ebx,-0x54(%ebp)\"},{address=\"0x08048eed\",func-name=\"main\",offset=\"298\",inst=\"mov
%esi,-0x50(%ebp)\"},{address=\"0x08048ef0\",func-name=\"main\",offset=\"301\",inst=\"jmp 0x8048f62
<main+415>\"},{address=\"0x08048ef2\",func-name=\"main\",offset=\"303\",inst=\"lea
-0x25(%ebp),%eax\"},{address=\"0x08048ef5\",func-name=\"main\",offset=\"306\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048ef8\",func-name=\"main\",offset=\"309\",inst=\"call 0x8048b74
<_ZNSaIcED1Ev plt>\"},{address=\"0x08048efd\",func-name=\"main\",offset=\"314\",inst=\"call 0x8048cd4
<_Z5func1v>\"},{address=\"0x08048f02\",func-name=\"main\",offset=\"319\",inst=\"movl
$0x2,0x4(%esp)\"},{address=\"0x08048f0a\",func-name=\"main\",offset=\"327\",inst=\"movl
$0x1,(%esp)\"},{address=\"0x08048f11\",func-name=\"main\",offset=\"334\",inst=\"call 0x8048ce7
<_Z5func2ii>\"},{address=\"0x08048f16\",func-name=\"main\",offset=\"339\",inst=\"lea
-0x15(%ebp),%eax\"},{address=\"0x08048f19\",func-name=\"main\",offset=\"342\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048f1c\",func-name=\"main\",offset=\"345\",inst=\"call 0x8048be4
<_ZNSaIcEC1Ev plt>\"},{address=\"0x08048f21\",func-name=\"main\",offset=\"350\",inst=\"lea
-0x15(%ebp),%eax\"},{address=\"0x08048f24\",func-name=\"main\",offset=\"353\",inst=\"mov
%eax,0x8(%esp)\"},{address=\"0x08048f28\",func-name=\"main\",offset=\"357\",inst=\"movl
$0x8049490,0x4(%esp)\"},{address=\"0x08048f30\",func-name=\"main\",offset=\"365\",inst=\"lea
-0x1c(%ebp),%eax\"},{address=\"0x08048f33\",func-name=\"main\",offset=\"368\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048f36\",func-name=\"main\",offset=\"371\",inst=\"call 0x8048b84
<_ZNSsC1EPKcRKSaIcE plt>\"},{address=\"0x08048f3b\",func-name=\"main\",offset=\"376\",inst=\"jmp 0x8048f84
<main+449>\"},{address=\"0x08048f3d\",func-name=\"main\",offset=\"378\",inst=\"mov
%eax,-0x54(%ebp)\"},{address=\"0x08048f40\",func-name=\"main\",offset=\"381\",inst=\"mov
%edx,-0x50(%ebp)\"},{address=\"0x08048f43\",func-name=\"main\",offset=\"384\",inst=\"mov
-0x50(%ebp),%esi\"},{address=\"0x08048f46\",func-name=\"main\",offset=\"387\",inst=\"mov
-0x54(%ebp),%ebx\"},{address=\"0x08048f49\",func-name=\"main\",offset=\"390\",inst=\"lea
-0x38(%ebp),%eax\"},{address=\"0x08048f4c\",func-name=\"main\",offset=\"393\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048f4f\",func-name=\"main\",offset=\"396\",inst=\"call 0x804921a
<~Person>\"},{address=\"0x08048f54\",func-name=\"main\",offset=\"401\",inst=\"mov
%ebx,-0x54(%ebp)\"},{address=\"0x08048f57\",func-name=\"main\",offset=\"404\",inst=\"mov
%esi,-0x50(%ebp)\"},{address=\"0x08048f5a\",func-name=\"main\",offset=\"407\",inst=\"jmp 0x8048f62
<main+415>\"},{address=\"0x08048f5c\",func-name=\"main\",offset=\"409\",inst=\"mov
%eax,-0x54(%ebp)\"},{address=\"0x08048f5f\",func-name=\"main\",offset=\"412\",inst=\"mov
%edx,-0x50(%ebp)\"},{address=\"0x08048f62\",func-name=\"main\",offset=\"415\",inst=\"mov
-0x50(%ebp),%esi\"},{address=\"0x08048f65\",func-name=\"main\",offset=\"418\",inst=\"mov
-0x54(%ebp),%ebx\"},{address=\"0x08048f68\",func-name=\"main\",offset=\"421\",inst=\"lea
-0x25(%ebp),%eax\"},{address=\"0x08048f6b\",func-name=\"main\",offset=\"424\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048f6e\",func-name=\"main\",offset=\"427\",inst=\"call 0x8048b74
<_ZNSaIcED1Ev plt>\"},{address=\"0x08048f73\",func-name=\"main\",offset=\"432\",inst=\"mov
%ebx,-0x54(%ebp)\"},{address=\"0x08048f76\",func-name=\"main\",offset=\"435\",inst=\"mov
%esi,-0x50(%ebp)\"},{address=\"0x08048f79\",func-name=\"main\",offset=\"438\",inst=\"mov
-0x54(%ebp),%eax\"},{address=\"0x08048f7c\",func-name=\"main\",offset=\"441\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048f7f\",func-name=\"main\",offset=\"444\",inst=\"call 0x8048bd4
<_Unwind_Resume plt>\"},{address=\"0x08048f84\",func-name=\"main\",offset=\"449\",inst=\"lea
-0x1c(%ebp),%eax\"},{address=\"0x08048f87\",func-name=\"main\",offset=\"452\",inst=\"mov
%eax,0x4(%esp)\"},{address=\"0x08048f8b\",func-name=\"main\",offset=\"456\",inst=\"lea
-0x38(%ebp),%eax\"},{address=\"0x08048f8e\",func-name=\"main\",offset=\"459\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048f91\",func-name=\"main\",offset=\"462\",inst=\"call 0x8049140
<_ZN6Person14set_first_nameERKSs>\"},{address=\"0x08048f96\",func-name=\"main\",offset=\"467\",inst=\"lea
-0x1c(%ebp),%eax\"},{address=\"0x08048f99\",func-name=\"main\",offset=\"470\",inst=\"mov
%eax,-0x44(%ebp)\"},{address=\"0x08048f9c\",func-name=\"main\",offset=\"473\",inst=\"mov
-0x44(%ebp),%eax\"},{address=\"0x08048f9f\",func-name=\"main\",offset=\"476\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048fa2\",func-name=\"main\",offset=\"479\",inst=\"call 0x8048bb4 <_ZNSsD1Ev
plt>\"},{address=\"0x08048fa7\",func-name=\"main\",offset=\"484\",inst=\"jmp 0x8048fce
<main+523>\"},{address=\"0x08048fa9\",func-name=\"main\",offset=\"486\",inst=\"mov
%eax,-0x54(%ebp)\"},{address=\"0x08048fac\",func-name=\"main\",offset=\"489\",inst=\"mov
%edx,-0x50(%ebp)\"},{address=\"0x08048faf\",func-name=\"main\",offset=\"492\",inst=\"mov
-0x50(%ebp),%esi\"},{address=\"0x08048fb2\",func-name=\"main\",offset=\"495\",inst=\"mov
-0x54(%ebp),%ebx\"},{address=\"0x08048fb5\",func-name=\"main\",offset=\"498\",inst=\"lea
-0x1c(%ebp),%eax\"},{address=\"0x08048fb8\",func-name=\"main\",offset=\"501\",inst=\"mov
%eax,-0x44(%ebp)\"},{address=\"0x08048fbb\",func-name=\"main\",offset=\"504\",inst=\"mov
-0x44(%ebp),%eax\"},{address=\"0x08048fbe\",func-name=\"main\",offset=\"507\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048fc1\",func-name=\"main\",offset=\"510\",inst=\"call 0x8048bb4 <_ZNSsD1Ev
plt>\"},{address=\"0x08048fc6\",func-name=\"main\",offset=\"515\",inst=\"mov
%ebx,-0x54(%ebp)\"},{address=\"0x08048fc9\",func-name=\"main\",offset=\"518\",inst=\"mov
%esi,-0x50(%ebp)\"},{address=\"0x08048fcc\",func-name=\"main\",offset=\"521\",inst=\"jmp 0x8049006
<main+579>\"},{address=\"0x08048fce\",func-name=\"main\",offset=\"523\",inst=\"lea
-0x15(%ebp),%eax\"},{address=\"0x08048fd1\",func-name=\"main\",offset=\"526\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048fd4\",func-name=\"main\",offset=\"529\",inst=\"call 0x8048b74
<_ZNSaIcED1Ev plt>\"},{address=\"0x08048fd9\",func-name=\"main\",offset=\"534\",inst=\"lea
-0xd(%ebp),%eax\"},{address=\"0x08048fdc\",func-name=\"main\",offset=\"537\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048fdf\",func-name=\"main\",offset=\"540\",inst=\"call 0x8048be4
<_ZNSaIcEC1Ev plt>\"},{address=\"0x08048fe4\",func-name=\"main\",offset=\"545\",inst=\"lea
-0xd(%ebp),%eax\"},{address=\"0x08048fe7\",func-name=\"main\",offset=\"548\",inst=\"mov
%eax,0x8(%esp)\"},{address=\"0x08048feb\",func-name=\"main\",offset=\"552\",inst=\"movl
$0x8049494,0x4(%esp)\"},{address=\"0x08048ff3\",func-name=\"main\",offset=\"560\",inst=\"lea
-0x14(%ebp),%eax\"},{address=\"0x08048ff6\",func-name=\"main\",offset=\"563\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08048ff9\",func-name=\"main\",offset=\"566\",inst=\"call 0x8048b84
<_ZNSsC1EPKcRKSaIcE plt>\"},{address=\"0x08048ffe\",func-name=\"main\",offset=\"571\",inst=\"jmp 0x8049022
<main+607>\"},{address=\"0x08049000\",func-name=\"main\",offset=\"573\",inst=\"mov
%eax,-0x54(%ebp)\"},{address=\"0x08049003\",func-name=\"main\",offset=\"576\",inst=\"mov
%edx,-0x50(%ebp)\"},{address=\"0x08049006\",func-name=\"main\",offset=\"579\",inst=\"mov
-0x50(%ebp),%esi\"},{address=\"0x08049009\",func-name=\"main\",offset=\"582\",inst=\"mov
-0x54(%ebp),%ebx\"},{address=\"0x0804900c\",func-name=\"main\",offset=\"585\",inst=\"lea
-0x15(%ebp),%eax\"},{address=\"0x0804900f\",func-name=\"main\",offset=\"588\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08049012\",func-name=\"main\",offset=\"591\",inst=\"call 0x8048b74
<_ZNSaIcED1Ev plt>\"},{address=\"0x08049017\",func-name=\"main\",offset=\"596\",inst=\"mov
%ebx,-0x54(%ebp)\"},{address=\"0x0804901a\",func-name=\"main\",offset=\"599\",inst=\"mov
%esi,-0x50(%ebp)\"},{address=\"0x0804901d\",func-name=\"main\",offset=\"602\",inst=\"jmp 0x80490fa
<main+823>\"},{address=\"0x08049022\",func-name=\"main\",offset=\"607\",inst=\"lea
-0x14(%ebp),%eax\"},{address=\"0x08049025\",func-name=\"main\",offset=\"610\",inst=\"mov
%eax,0x4(%esp)\"},{address=\"0x08049029\",func-name=\"main\",offset=\"614\",inst=\"lea
-0x38(%ebp),%eax\"},{address=\"0x0804902c\",func-name=\"main\",offset=\"617\",inst=\"mov
%eax,(%esp)\"},{address=\"0x0804902f\",func-name=\"main\",offset=\"620\",inst=\"call 0x804915a
<_ZN6Person15set_family_nameERKSs>\"},{address=\"0x08049034\",func-name=\"main\",offset=\"625\",inst=\"lea
-0x14(%ebp),%eax\"},{address=\"0x08049037\",func-name=\"main\",offset=\"628\",inst=\"mov
%eax,-0x40(%ebp)\"},{address=\"0x0804903a\",func-name=\"main\",offset=\"631\",inst=\"mov
-0x40(%ebp),%eax\"},{address=\"0x0804903d\",func-name=\"main\",offset=\"634\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08049040\",func-name=\"main\",offset=\"637\",inst=\"call 0x8048bb4 <_ZNSsD1Ev
plt>\"},{address=\"0x08049045\",func-name=\"main\",offset=\"642\",inst=\"jmp 0x804906c
<main+681>\"},{address=\"0x08049047\",func-name=\"main\",offset=\"644\",inst=\"mov
%eax,-0x54(%ebp)\"},{address=\"0x0804904a\",func-name=\"main\",offset=\"647\",inst=\"mov
%edx,-0x50(%ebp)\"},{address=\"0x0804904d\",func-name=\"main\",offset=\"650\",inst=\"mov
-0x50(%ebp),%esi\"},{address=\"0x08049050\",func-name=\"main\",offset=\"653\",inst=\"mov
-0x54(%ebp),%ebx\"},{address=\"0x08049053\",func-name=\"main\",offset=\"656\",inst=\"lea
-0x14(%ebp),%eax\"},{address=\"0x08049056\",func-name=\"main\",offset=\"659\",inst=\"mov
%eax,-0x40(%ebp)\"},{address=\"0x08049059\",func-name=\"main\",offset=\"662\",inst=\"mov
-0x40(%ebp),%eax\"},{address=\"0x0804905c\",func-name=\"main\",offset=\"665\",inst=\"mov
%eax,(%esp)\"},{address=\"0x0804905f\",func-name=\"main\",offset=\"668\",inst=\"call 0x8048bb4 <_ZNSsD1Ev
plt>\"},{address=\"0x08049064\",func-name=\"main\",offset=\"673\",inst=\"mov
%ebx,-0x54(%ebp)\"},{address=\"0x08049067\",func-name=\"main\",offset=\"676\",inst=\"mov
%esi,-0x50(%ebp)\"},{address=\"0x0804906a\",func-name=\"main\",offset=\"679\",inst=\"jmp 0x804908a
<main+711>\"},{address=\"0x0804906c\",func-name=\"main\",offset=\"681\",inst=\"lea
-0xd(%ebp),%eax\"},{address=\"0x0804906f\",func-name=\"main\",offset=\"684\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08049072\",func-name=\"main\",offset=\"687\",inst=\"call 0x8048b74
<_ZNSaIcED1Ev plt>\"},{address=\"0x08049077\",func-name=\"main\",offset=\"692\",inst=\"lea
-0x38(%ebp),%eax\"},{address=\"0x0804907a\",func-name=\"main\",offset=\"695\",inst=\"mov
%eax,(%esp)\"},{address=\"0x0804907d\",func-name=\"main\",offset=\"698\",inst=\"call 0x8049272
<_ZN6Person7do_thisEv>\"},{address=\"0x08049082\",func-name=\"main\",offset=\"703\",inst=\"jmp 0x80490a3
<main+736>\"},{address=\"0x08049084\",func-name=\"main\",offset=\"705\",inst=\"mov
%eax,-0x54(%ebp)\"},{address=\"0x08049087\",func-name=\"main\",offset=\"708\",inst=\"mov
%edx,-0x50(%ebp)\"},{address=\"0x0804908a\",func-name=\"main\",offset=\"711\",inst=\"mov
-0x50(%ebp),%esi\"},{address=\"0x0804908d\",func-name=\"main\",offset=\"714\",inst=\"mov
-0x54(%ebp),%ebx\"},{address=\"0x08049090\",func-name=\"main\",offset=\"717\",inst=\"lea
-0xd(%ebp),%eax\"},{address=\"0x08049093\",func-name=\"main\",offset=\"720\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08049096\",func-name=\"main\",offset=\"723\",inst=\"call 0x8048b74
<_ZNSaIcED1Ev plt>\"},{address=\"0x0804909b\",func-name=\"main\",offset=\"728\",inst=\"mov
%ebx,-0x54(%ebp)\"},{address=\"0x0804909e\",func-name=\"main\",offset=\"731\",inst=\"mov
%esi,-0x50(%ebp)\"},{address=\"0x080490a1\",func-name=\"main\",offset=\"734\",inst=\"jmp 0x80490fa
<main+823>\"},{address=\"0x080490a3\",func-name=\"main\",offset=\"736\",inst=\"lea
-0x38(%ebp),%eax\"},{address=\"0x080490a6\",func-name=\"main\",offset=\"739\",inst=\"mov
%eax,(%esp)\"},{address=\"0x080490a9\",func-name=\"main\",offset=\"742\",inst=\"call 0x804911c
<_ZN6Person8overloadEv>\"},{address=\"0x080490ae\",func-name=\"main\",offset=\"747\",inst=\"movl
$0x0,0x4(%esp)\"},{address=\"0x080490b6\",func-name=\"main\",offset=\"755\",inst=\"lea
-0x38(%ebp),%eax\"},{address=\"0x080490b9\",func-name=\"main\",offset=\"758\",inst=\"mov
%eax,(%esp)\"},{address=\"0x080490bc\",func-name=\"main\",offset=\"761\",inst=\"call 0x8049130
<_ZN6Person8overloadEi>\"},{address=\"0x080490c1\",func-name=\"main\",offset=\"766\",inst=\"lea
-0x38(%ebp),%eax\"},{address=\"0x080490c4\",func-name=\"main\",offset=\"769\",inst=\"mov
%eax,(%esp)\"},{address=\"0x080490c7\",func-name=\"main\",offset=\"772\",inst=\"call 0x8048db0
<_Z5func3R6Person>\"},{address=\"0x080490cc\",func-name=\"main\",offset=\"777\",inst=\"lea
-0x38(%ebp),%eax\"},{address=\"0x080490cf\",func-name=\"main\",offset=\"780\",inst=\"mov
%eax,(%esp)\"},{address=\"0x080490d2\",func-name=\"main\",offset=\"783\",inst=\"call 0x8048cff
<_Z5func4R6Person>\"},{address=\"0x080490d7\",func-name=\"main\",offset=\"788\",inst=\"mov
$0x0,%ebx\"},{address=\"0x080490dc\",func-name=\"main\",offset=\"793\",inst=\"lea
-0x38(%ebp),%eax\"},{address=\"0x080490df\",func-name=\"main\",offset=\"796\",inst=\"mov
%eax,(%esp)\"},{address=\"0x080490e2\",func-name=\"main\",offset=\"799\",inst=\"call 0x804921a
<~Person>\"},{address=\"0x080490e7\",func-name=\"main\",offset=\"804\",inst=\"mov
%ebx,%eax\"},{address=\"0x080490e9\",func-name=\"main\",offset=\"806\",inst=\"add
$0x5c,%esp\"},{address=\"0x080490ec\",func-name=\"main\",offset=\"809\",inst=\"pop
%ecx\"},{address=\"0x080490ed\",func-name=\"main\",offset=\"810\",inst=\"pop
%ebx\"},{address=\"0x080490ee\",func-name=\"main\",offset=\"811\",inst=\"pop
%esi\"},{address=\"0x080490ef\",func-name=\"main\",offset=\"812\",inst=\"pop
%ebp\"},{address=\"0x080490f0\",func-name=\"main\",offset=\"813\",inst=\"lea
-0x4(%ecx),%esp\"},{address=\"0x080490f3\",func-name=\"main\",offset=\"816\",inst=\"ret
\"},{address=\"0x080490f4\",func-name=\"main\",offset=\"817\",inst=\"mov
%eax,-0x54(%ebp)\"},{address=\"0x080490f7\",func-name=\"main\",offset=\"820\",inst=\"mov
%edx,-0x50(%ebp)\"},{address=\"0x080490fa\",func-name=\"main\",offset=\"823\",inst=\"mov
-0x50(%ebp),%esi\"},{address=\"0x080490fd\",func-name=\"main\",offset=\"826\",inst=\"mov
-0x54(%ebp),%ebx\"},{address=\"0x08049100\",func-name=\"main\",offset=\"829\",inst=\"lea
-0x38(%ebp),%eax\"},{address=\"0x08049103\",func-name=\"main\",offset=\"832\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08049106\",func-name=\"main\",offset=\"835\",inst=\"call 0x804921a
<~Person>\"},{address=\"0x0804910b\",func-name=\"main\",offset=\"840\",inst=\"mov
%ebx,-0x54(%ebp)\"},{address=\"0x0804910e\",func-name=\"main\",offset=\"843\",inst=\"mov
%esi,-0x50(%ebp)\"},{address=\"0x08049111\",func-name=\"main\",offset=\"846\",inst=\"mov
-0x54(%ebp),%eax\"},{address=\"0x08049114\",func-name=\"main\",offset=\"849\",inst=\"mov
%eax,(%esp)\"},{address=\"0x08049117\",func-name=\"main\",offset=\"852\",inst=\"call 0x8048bd4
<_Unwind_Resume plt>\"}]";
@@ -935,6 +938,15 @@ test_breakpoint ()
BOOST_REQUIRE_EQUAL (breakpoint.sub_breakpoints ().size (), 2);
BOOST_REQUIRE_EQUAL (breakpoint.sub_breakpoints ()[0].id (), "2.1");
BOOST_REQUIRE_EQUAL (breakpoint.sub_breakpoints ()[1].id (), "2.2");
+
+ parser.push_input (gv_breakpoint_modified_async_output0);
+ breakpoint.clear ();
+ is_ok = parser.parse_breakpoint_modified_async_output (0, cur, breakpoint);
+ BOOST_REQUIRE (is_ok);
+ BOOST_REQUIRE (breakpoint.has_multiple_locations ());
+ BOOST_REQUIRE_EQUAL (breakpoint.sub_breakpoints ().size (), 10);
+ BOOST_REQUIRE_EQUAL (breakpoint.sub_breakpoints ()[0].id (), "2.1");
+ BOOST_REQUIRE_EQUAL (breakpoint.sub_breakpoints ()[9].id (), "2.10");
}
void
--
Dodji
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]