OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 1195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1206 { | 1206 { |
1207 w->WriteULEB128(current_abbreviation++); | 1207 w->WriteULEB128(current_abbreviation++); |
1208 w->WriteString("__context"); | 1208 w->WriteString("__context"); |
1209 w->Write<uint32_t>(ty_offset); | 1209 w->Write<uint32_t>(ty_offset); |
1210 Writer::Slot<uint32_t> block_size = w->CreateSlotHere<uint32_t>(); | 1210 Writer::Slot<uint32_t> block_size = w->CreateSlotHere<uint32_t>(); |
1211 uintptr_t block_start = w->position(); | 1211 uintptr_t block_start = w->position(); |
1212 w->Write<uint8_t>(DW_OP_fbreg); | 1212 w->Write<uint8_t>(DW_OP_fbreg); |
1213 w->WriteSLEB128(StandardFrameConstants::kContextOffset); | 1213 w->WriteSLEB128(StandardFrameConstants::kContextOffset); |
1214 block_size.set(static_cast<uint32_t>(w->position() - block_start)); | 1214 block_size.set(static_cast<uint32_t>(w->position() - block_start)); |
1215 } | 1215 } |
| 1216 |
| 1217 w->WriteULEB128(0); // Terminate the sub program. |
1216 } | 1218 } |
1217 | 1219 |
| 1220 w->WriteULEB128(0); // Terminate the compile unit. |
1218 size.set(static_cast<uint32_t>(w->position() - start)); | 1221 size.set(static_cast<uint32_t>(w->position() - start)); |
1219 return true; | 1222 return true; |
1220 } | 1223 } |
1221 | 1224 |
1222 private: | 1225 private: |
1223 CodeDescription* desc_; | 1226 CodeDescription* desc_; |
1224 }; | 1227 }; |
1225 | 1228 |
1226 | 1229 |
1227 class DebugAbbrevSection : public DebugSection { | 1230 class DebugAbbrevSection : public DebugSection { |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1317 w->WriteULEB128(0); | 1320 w->WriteULEB128(0); |
1318 | 1321 |
1319 if (extra_info) { | 1322 if (extra_info) { |
1320 Scope* scope = desc_->info()->scope(); | 1323 Scope* scope = desc_->info()->scope(); |
1321 int params = scope->num_parameters(); | 1324 int params = scope->num_parameters(); |
1322 int slots = scope->num_stack_slots(); | 1325 int slots = scope->num_stack_slots(); |
1323 int context_slots = scope->ContextLocalCount(); | 1326 int context_slots = scope->ContextLocalCount(); |
1324 // The real slot ID is internal_slots + context_slot_id. | 1327 // The real slot ID is internal_slots + context_slot_id. |
1325 int internal_slots = Context::MIN_CONTEXT_SLOTS; | 1328 int internal_slots = Context::MIN_CONTEXT_SLOTS; |
1326 int locals = scope->StackLocalCount(); | 1329 int locals = scope->StackLocalCount(); |
1327 int total_children = | 1330 // Total children is params + slots + context_slots + internal_slots + |
1328 params + slots + context_slots + internal_slots + locals + 2; | 1331 // locals + 2 (__function and __context). |
1329 | 1332 |
1330 // The extra duplication below seems to be necessary to keep | 1333 // The extra duplication below seems to be necessary to keep |
1331 // gdb from getting upset on OSX. | 1334 // gdb from getting upset on OSX. |
1332 w->WriteULEB128(current_abbreviation++); // Abbreviation code. | 1335 w->WriteULEB128(current_abbreviation++); // Abbreviation code. |
1333 w->WriteULEB128(DW_TAG_SUBPROGRAM); | 1336 w->WriteULEB128(DW_TAG_SUBPROGRAM); |
1334 w->Write<uint8_t>( | 1337 w->Write<uint8_t>(DW_CHILDREN_YES); |
1335 total_children != 0 ? DW_CHILDREN_YES : DW_CHILDREN_NO); | |
1336 w->WriteULEB128(DW_AT_NAME); | 1338 w->WriteULEB128(DW_AT_NAME); |
1337 w->WriteULEB128(DW_FORM_STRING); | 1339 w->WriteULEB128(DW_FORM_STRING); |
1338 w->WriteULEB128(DW_AT_LOW_PC); | 1340 w->WriteULEB128(DW_AT_LOW_PC); |
1339 w->WriteULEB128(DW_FORM_ADDR); | 1341 w->WriteULEB128(DW_FORM_ADDR); |
1340 w->WriteULEB128(DW_AT_HIGH_PC); | 1342 w->WriteULEB128(DW_AT_HIGH_PC); |
1341 w->WriteULEB128(DW_FORM_ADDR); | 1343 w->WriteULEB128(DW_FORM_ADDR); |
1342 w->WriteULEB128(DW_AT_FRAME_BASE); | 1344 w->WriteULEB128(DW_AT_FRAME_BASE); |
1343 w->WriteULEB128(DW_FORM_BLOCK4); | 1345 w->WriteULEB128(DW_FORM_BLOCK4); |
1344 w->WriteULEB128(0); | 1346 w->WriteULEB128(0); |
1345 w->WriteULEB128(0); | 1347 w->WriteULEB128(0); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1377 for (int local = 0; local < locals; ++local) { | 1379 for (int local = 0; local < locals; ++local) { |
1378 WriteVariableAbbreviation(w, current_abbreviation++, true, false); | 1380 WriteVariableAbbreviation(w, current_abbreviation++, true, false); |
1379 } | 1381 } |
1380 | 1382 |
1381 // The function. | 1383 // The function. |
1382 WriteVariableAbbreviation(w, current_abbreviation++, true, false); | 1384 WriteVariableAbbreviation(w, current_abbreviation++, true, false); |
1383 | 1385 |
1384 // The context. | 1386 // The context. |
1385 WriteVariableAbbreviation(w, current_abbreviation++, true, false); | 1387 WriteVariableAbbreviation(w, current_abbreviation++, true, false); |
1386 | 1388 |
1387 if (total_children != 0) { | 1389 w->WriteULEB128(0); // Terminate the sibling list. |
1388 w->WriteULEB128(0); // Terminate the sibling list. | |
1389 } | |
1390 } | 1390 } |
1391 | 1391 |
1392 w->WriteULEB128(0); // Terminate the table. | 1392 w->WriteULEB128(0); // Terminate the table. |
1393 return true; | 1393 return true; |
1394 } | 1394 } |
1395 | 1395 |
1396 private: | 1396 private: |
1397 CodeDescription* desc_; | 1397 CodeDescription* desc_; |
1398 }; | 1398 }; |
1399 | 1399 |
(...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2169 ScopedLock lock(mutex.Pointer()); | 2169 ScopedLock lock(mutex.Pointer()); |
2170 ASSERT(!IsLineInfoTagged(line_info)); | 2170 ASSERT(!IsLineInfoTagged(line_info)); |
2171 HashMap::Entry* e = GetEntries()->Lookup(code, HashForCodeObject(code), true); | 2171 HashMap::Entry* e = GetEntries()->Lookup(code, HashForCodeObject(code), true); |
2172 ASSERT(e->value == NULL); | 2172 ASSERT(e->value == NULL); |
2173 e->value = TagLineInfo(line_info); | 2173 e->value = TagLineInfo(line_info); |
2174 } | 2174 } |
2175 | 2175 |
2176 | 2176 |
2177 } } // namespace v8::internal | 2177 } } // namespace v8::internal |
2178 #endif | 2178 #endif |
OLD | NEW |