33 public final class Stack { |
33 public final class Stack { |
34 |
34 |
35 // XML tags |
35 // XML tags |
36 public static final String TAG_ID = "id"; |
36 public static final String TAG_ID = "id"; |
37 public static final String TAG_RANGE = "range"; |
37 public static final String TAG_RANGE = "range"; |
|
38 public static final String TAG_HASH = "hash"; |
38 public static final String TAG_LINK = "link"; |
39 public static final String TAG_LINK = "link"; |
39 public static final String TAG_STACK_ENTRY = "stack_entry"; |
40 public static final String TAG_STACK_ENTRY = "stack_entry"; |
40 public static final String ATTRIBUTE_SEG = "seg"; |
41 public static final String ATTRIBUTE_SEG = "seg"; |
41 public static final String SEGMENT_REGISTERS = "seg_registers"; |
42 public static final String SEGMENT_REGISTERS = "seg_registers"; |
42 |
43 |
44 |
45 |
45 // Data |
46 // Data |
46 private final int stackId; |
47 private final int stackId; |
47 private final String stackType; |
48 private final String stackType; |
48 private final String stackRange; |
49 private final String stackRange; |
|
50 private final String stackHash; |
49 private final String stackLinkRegister; |
51 private final String stackLinkRegister; |
50 private final String stackStackPointer; |
52 private final String stackStackPointer; |
51 private final String stackProgramCounter; |
53 private final String stackProgramCounter; |
52 private final boolean stackContainsAccurateStackEntries; |
54 private final boolean stackContainsAccurateStackEntries; |
53 private final boolean stackRegisterContainsCpsr; |
55 private final boolean stackRegisterContainsCpsr; |
64 * @param containsAccurateStackEntries defines if this stack was constructed with accurate (true) |
66 * @param containsAccurateStackEntries defines if this stack was constructed with accurate (true) |
65 * or heuristic (false) method |
67 * or heuristic (false) method |
66 * @param data stack entries |
68 * @param data stack entries |
67 * @param cpsrStack defines whether this stack contains cpsr register |
69 * @param cpsrStack defines whether this stack contains cpsr register |
68 */ |
70 */ |
69 private Stack(int id, String type, String range, String linkRegister, String stackPointer, |
71 private Stack(int id, String type, String range, String hash, String linkRegister, String stackPointer, |
70 String programCounter, boolean containsAccurateStackEntries, List<StackEntry> data, |
72 String programCounter, boolean containsAccurateStackEntries, List<StackEntry> data, |
71 boolean cpsrStack) { |
73 boolean cpsrStack) { |
72 stackId = id; |
74 stackId = id; |
73 stackType = type; |
75 stackType = type; |
74 stackRange = range; |
76 stackRange = range; |
|
77 stackHash = hash; |
75 stackLinkRegister = linkRegister; |
78 stackLinkRegister = linkRegister; |
76 stackStackPointer = stackPointer; |
79 stackStackPointer = stackPointer; |
77 stackProgramCounter = programCounter; |
80 stackProgramCounter = programCounter; |
78 stackContainsAccurateStackEntries = containsAccurateStackEntries; |
81 stackContainsAccurateStackEntries = containsAccurateStackEntries; |
79 stackData = data; |
82 stackData = data; |
108 return stackStackPointer; |
111 return stackStackPointer; |
109 } |
112 } |
110 |
113 |
111 public String getLinkRegister() { |
114 public String getLinkRegister() { |
112 return stackLinkRegister; |
115 return stackLinkRegister; |
|
116 } |
|
117 |
|
118 public String getHash() { |
|
119 return stackHash; |
113 } |
120 } |
114 |
121 |
115 /** |
122 /** |
116 * Writes stack data into given buffer (i.e. text file) |
123 * Writes stack data into given buffer (i.e. text file) |
117 * @param out buffer to write to |
124 * @param out buffer to write to |
123 writeLine(out,""); |
130 writeLine(out,""); |
124 writeLine(out, "STACK:"); |
131 writeLine(out, "STACK:"); |
125 writeLine(out, "--------"); |
132 writeLine(out, "--------"); |
126 writeLine(out, "Stack Type", stackType); |
133 writeLine(out, "Stack Type", stackType); |
127 writeLine(out, "Stack Range", stackRange); |
134 writeLine(out, "Stack Range", stackRange); |
|
135 writeLine(out, "Stack Hash", stackHash); |
128 |
136 |
129 if (stackData != null && !stackData.isEmpty()) { |
137 if (stackData != null && !stackData.isEmpty()) { |
130 writeLine(out, ""); |
138 writeLine(out, ""); |
131 writeLine(out, "**********************************************"); |
139 writeLine(out, "**********************************************"); |
132 for (int i = 0; i < stackData.size(); i++) { |
140 for (int i = 0; i < stackData.size(); i++) { |
205 // read range if exists (e.g. 00402000-00407000) |
213 // read range if exists (e.g. 00402000-00407000) |
206 String range = XmlUtils.getTextValue(elementThreadStack, TAG_RANGE); |
214 String range = XmlUtils.getTextValue(elementThreadStack, TAG_RANGE); |
207 if (range == null) |
215 if (range == null) |
208 range = ""; |
216 range = ""; |
209 |
217 |
|
218 // read defect hash if exists |
|
219 String hash = XmlUtils.getTextValue(elementThreadStack, TAG_HASH); |
|
220 if (hash == null) |
|
221 hash = ""; |
|
222 |
210 // read stack entries |
223 // read stack entries |
211 List<StackEntry> entries = null; |
224 List<StackEntry> entries = null; |
212 NodeList stackEntries = elementThreadStack.getElementsByTagName(TAG_STACK_ENTRY); |
225 NodeList stackEntries = elementThreadStack.getElementsByTagName(TAG_STACK_ENTRY); |
213 if (stackEntries != null && stackEntries.getLength() > 0) { |
226 if (stackEntries != null && stackEntries.getLength() > 0) { |
214 for (int i = 0; i < stackEntries.getLength(); i++) { |
227 for (int i = 0; i < stackEntries.getLength(); i++) { |
231 break; |
244 break; |
232 } |
245 } |
233 } |
246 } |
234 } |
247 } |
235 |
248 |
236 return new Stack(id, type, range, linkRegister, stackPointer, programCounter, |
249 return new Stack(id, type, range, hash, linkRegister, stackPointer, programCounter, |
237 containsAccurateStackEntries, entries, cpsrStack); |
250 containsAccurateStackEntries, entries, cpsrStack); |
238 } catch (Exception e) { |
251 } catch (Exception e) { |
239 return null; |
252 return null; |
240 } |
253 } |
241 } |
254 } |