stacktrace.hh (8232:b28d06a175be) stacktrace.hh (10417:710ee116eb68)
1/*
2 * Copyright (c) 2006 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 61 unchanged lines hidden (view full) ---

70 bool decodePrologue(Addr sp, Addr callpc, Addr func, int &size, Addr &ra);
71 bool decodeSave(MachInst inst, int &reg, int &disp);
72 bool decodeStack(MachInst inst, int &disp);
73
74 void trace(ThreadContext *tc, bool is_call);
75
76 public:
77 StackTrace();
1/*
2 * Copyright (c) 2006 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 61 unchanged lines hidden (view full) ---

70 bool decodePrologue(Addr sp, Addr callpc, Addr func, int &size, Addr &ra);
71 bool decodeSave(MachInst inst, int &reg, int &disp);
72 bool decodeStack(MachInst inst, int &disp);
73
74 void trace(ThreadContext *tc, bool is_call);
75
76 public:
77 StackTrace();
78 StackTrace(ThreadContext *tc, StaticInstPtr inst);
78 StackTrace(ThreadContext *tc, const StaticInstPtr &inst);
79 ~StackTrace();
80
81 void clear()
82 {
83 tc = 0;
84 stack.clear();
85 }
86
87 bool valid() const { return tc != NULL; }
79 ~StackTrace();
80
81 void clear()
82 {
83 tc = 0;
84 stack.clear();
85 }
86
87 bool valid() const { return tc != NULL; }
88 bool trace(ThreadContext *tc, StaticInstPtr inst);
88 bool trace(ThreadContext *tc, const StaticInstPtr &inst);
89
90 public:
91 const std::vector<Addr> &getstack() const { return stack; }
92
93 static const int user = 1;
94 static const int console = 2;
95 static const int unknown = 3;
96

--- 5 unchanged lines hidden (view full) ---

102 void dprintf() { if (DTRACE(Stack)) dump(); }
103#else
104 public:
105 void dprintf() {}
106#endif
107 };
108
109 inline bool
89
90 public:
91 const std::vector<Addr> &getstack() const { return stack; }
92
93 static const int user = 1;
94 static const int console = 2;
95 static const int unknown = 3;
96

--- 5 unchanged lines hidden (view full) ---

102 void dprintf() { if (DTRACE(Stack)) dump(); }
103#else
104 public:
105 void dprintf() {}
106#endif
107 };
108
109 inline bool
110 StackTrace::trace(ThreadContext *tc, StaticInstPtr inst)
110 StackTrace::trace(ThreadContext *tc, const StaticInstPtr &inst)
111 {
112 if (!inst->isCall() && !inst->isReturn())
113 return false;
114
115 if (valid())
116 clear();
117
118 trace(tc, !inst->isReturn());
119 return true;
120 }
121}
122
123#endif // __ARCH_X86_STACKTRACE_HH__
111 {
112 if (!inst->isCall() && !inst->isReturn())
113 return false;
114
115 if (valid())
116 clear();
117
118 trace(tc, !inst->isReturn());
119 return true;
120 }
121}
122
123#endif // __ARCH_X86_STACKTRACE_HH__