OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/external-reference-table.h" | 5 #include "src/external-reference-table.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
9 #include "src/builtins/builtins.h" | 9 #include "src/builtins/builtins.h" |
10 #include "src/counters.h" | 10 #include "src/counters.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 ExternalReferenceTable* external_reference_table = | 24 ExternalReferenceTable* external_reference_table = |
25 isolate->external_reference_table(); | 25 isolate->external_reference_table(); |
26 if (external_reference_table == NULL) { | 26 if (external_reference_table == NULL) { |
27 external_reference_table = new ExternalReferenceTable(isolate); | 27 external_reference_table = new ExternalReferenceTable(isolate); |
28 isolate->set_external_reference_table(external_reference_table); | 28 isolate->set_external_reference_table(external_reference_table); |
29 } | 29 } |
30 return external_reference_table; | 30 return external_reference_table; |
31 } | 31 } |
32 | 32 |
33 ExternalReferenceTable::ExternalReferenceTable(Isolate* isolate) { | 33 ExternalReferenceTable::ExternalReferenceTable(Isolate* isolate) { |
| 34 // nullptr is preserved through serialization/deserialization. |
| 35 Add(nullptr, "nullptr"); |
34 AddReferences(isolate); | 36 AddReferences(isolate); |
35 AddBuiltins(isolate); | 37 AddBuiltins(isolate); |
36 AddRuntimeFunctions(isolate); | 38 AddRuntimeFunctions(isolate); |
37 AddStatCounters(isolate); | |
38 AddIsolateAddresses(isolate); | 39 AddIsolateAddresses(isolate); |
39 AddAccessors(isolate); | 40 AddAccessors(isolate); |
40 AddStubCache(isolate); | 41 AddStubCache(isolate); |
41 AddDeoptEntries(isolate); | 42 AddDeoptEntries(isolate); |
42 AddApiReferences(isolate); | 43 AddApiReferences(isolate); |
43 } | 44 } |
44 | 45 |
45 void ExternalReferenceTable::AddReferences(Isolate* isolate) { | 46 void ExternalReferenceTable::AddReferences(Isolate* isolate) { |
46 // Miscellaneous | 47 // Miscellaneous |
47 Add(ExternalReference::roots_array_start(isolate).address(), | 48 Add(ExternalReference::roots_array_start(isolate).address(), |
(...skipping 18 matching lines...) Expand all Loading... |
66 "Deoptimizer::New()"); | 67 "Deoptimizer::New()"); |
67 Add(ExternalReference::compute_output_frames_function(isolate).address(), | 68 Add(ExternalReference::compute_output_frames_function(isolate).address(), |
68 "Deoptimizer::ComputeOutputFrames()"); | 69 "Deoptimizer::ComputeOutputFrames()"); |
69 Add(ExternalReference::address_of_min_int().address(), | 70 Add(ExternalReference::address_of_min_int().address(), |
70 "LDoubleConstant::min_int"); | 71 "LDoubleConstant::min_int"); |
71 Add(ExternalReference::address_of_one_half().address(), | 72 Add(ExternalReference::address_of_one_half().address(), |
72 "LDoubleConstant::one_half"); | 73 "LDoubleConstant::one_half"); |
73 Add(ExternalReference::isolate_address(isolate).address(), "isolate"); | 74 Add(ExternalReference::isolate_address(isolate).address(), "isolate"); |
74 Add(ExternalReference::interpreter_dispatch_table_address(isolate).address(), | 75 Add(ExternalReference::interpreter_dispatch_table_address(isolate).address(), |
75 "Interpreter::dispatch_table_address"); | 76 "Interpreter::dispatch_table_address"); |
76 Add(ExternalReference::interpreter_dispatch_counters(isolate).address(), | |
77 "Interpreter::interpreter_dispatch_counters"); | |
78 Add(ExternalReference::address_of_negative_infinity().address(), | 77 Add(ExternalReference::address_of_negative_infinity().address(), |
79 "LDoubleConstant::negative_infinity"); | 78 "LDoubleConstant::negative_infinity"); |
80 Add(ExternalReference::power_double_double_function(isolate).address(), | 79 Add(ExternalReference::power_double_double_function(isolate).address(), |
81 "power_double_double_function"); | 80 "power_double_double_function"); |
82 Add(ExternalReference::ieee754_acos_function(isolate).address(), | 81 Add(ExternalReference::ieee754_acos_function(isolate).address(), |
83 "base::ieee754::acos"); | 82 "base::ieee754::acos"); |
84 Add(ExternalReference::ieee754_acosh_function(isolate).address(), | 83 Add(ExternalReference::ieee754_acosh_function(isolate).address(), |
85 "base::ieee754::acosh"); | 84 "base::ieee754::acosh"); |
86 Add(ExternalReference::ieee754_asin_function(isolate).address(), | 85 Add(ExternalReference::ieee754_asin_function(isolate).address(), |
87 "base::ieee754::asin"); | 86 "base::ieee754::asin"); |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 FOR_EACH_INTRINSIC(RUNTIME_ENTRY) | 307 FOR_EACH_INTRINSIC(RUNTIME_ENTRY) |
309 #undef RUNTIME_ENTRY | 308 #undef RUNTIME_ENTRY |
310 }; | 309 }; |
311 | 310 |
312 for (unsigned i = 0; i < arraysize(runtime_functions); ++i) { | 311 for (unsigned i = 0; i < arraysize(runtime_functions); ++i) { |
313 ExternalReference ref(runtime_functions[i].id, isolate); | 312 ExternalReference ref(runtime_functions[i].id, isolate); |
314 Add(ref.address(), runtime_functions[i].name); | 313 Add(ref.address(), runtime_functions[i].name); |
315 } | 314 } |
316 } | 315 } |
317 | 316 |
318 void ExternalReferenceTable::AddStatCounters(Isolate* isolate) { | |
319 // Stat counters | |
320 struct StatsRefTableEntry { | |
321 StatsCounter* (Counters::*counter)(); | |
322 const char* name; | |
323 }; | |
324 | |
325 static const StatsRefTableEntry stats_ref_table[] = { | |
326 #define COUNTER_ENTRY(name, caption) {&Counters::name, "Counters::" #name}, | |
327 STATS_COUNTER_LIST_1(COUNTER_ENTRY) STATS_COUNTER_LIST_2(COUNTER_ENTRY) | |
328 #undef COUNTER_ENTRY | |
329 }; | |
330 | |
331 Counters* counters = isolate->counters(); | |
332 for (unsigned i = 0; i < arraysize(stats_ref_table); ++i) { | |
333 // To make sure the indices are not dependent on whether counters are | |
334 // enabled, use a dummy address as filler. | |
335 Address address = NotAvailable(); | |
336 StatsCounter* counter = (counters->*(stats_ref_table[i].counter))(); | |
337 if (counter->Enabled()) { | |
338 address = reinterpret_cast<Address>(counter->GetInternalPointer()); | |
339 } | |
340 Add(address, stats_ref_table[i].name); | |
341 } | |
342 } | |
343 | |
344 void ExternalReferenceTable::AddIsolateAddresses(Isolate* isolate) { | 317 void ExternalReferenceTable::AddIsolateAddresses(Isolate* isolate) { |
345 // Top addresses | 318 // Top addresses |
346 static const char* address_names[] = { | 319 static const char* address_names[] = { |
347 #define BUILD_NAME_LITERAL(Name, name) "Isolate::" #name "_address", | 320 #define BUILD_NAME_LITERAL(Name, name) "Isolate::" #name "_address", |
348 FOR_EACH_ISOLATE_ADDRESS_NAME(BUILD_NAME_LITERAL) NULL | 321 FOR_EACH_ISOLATE_ADDRESS_NAME(BUILD_NAME_LITERAL) NULL |
349 #undef BUILD_NAME_LITERAL | 322 #undef BUILD_NAME_LITERAL |
350 }; | 323 }; |
351 | 324 |
352 for (int i = 0; i < Isolate::kIsolateAddressCount; ++i) { | 325 for (int i = 0; i < Isolate::kIsolateAddressCount; ++i) { |
353 Add(isolate->get_address_from_id(static_cast<Isolate::AddressId>(i)), | 326 Add(isolate->get_address_from_id(static_cast<Isolate::AddressId>(i)), |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 if (api_external_references != nullptr) { | 413 if (api_external_references != nullptr) { |
441 while (*api_external_references != 0) { | 414 while (*api_external_references != 0) { |
442 Add(reinterpret_cast<Address>(*api_external_references), "<embedder>"); | 415 Add(reinterpret_cast<Address>(*api_external_references), "<embedder>"); |
443 api_external_references++; | 416 api_external_references++; |
444 } | 417 } |
445 } | 418 } |
446 } | 419 } |
447 | 420 |
448 } // namespace internal | 421 } // namespace internal |
449 } // namespace v8 | 422 } // namespace v8 |
OLD | NEW |