This flag consumes a time in seconds and calculates the correct capacity
for the sample buffer so it can contain at least that many seconds worth
of samples based on the maximum number of samples that can be chained to
represent a stack and the sampling rate.
Providing a value to this flag will likely greatly increase memory
consumption, so a warning message is printed which contains the
information used to calculate the buffer capacity as well as the size of
the resulting buffer in bytes. Example output:
** WARNING ** Custom sample buffer size provided via --sample-buffer-duration
The sample buffer can hold at least 120s worth of samples with stacks depths of up to 128, collected at a sample rate of 20000Hz.
The resulting sample buffer size is 3532800000 bytes.
Fixes https://github.com/dart-lang/sdk/issues/37924
Change-Id: I58aff6da268b9a6b02258021d2be8bf4f80ae999
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117208
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
This change fixes the following problems:
* In precompiler, all PcDescriptor entries which do not have
try_index are ignored, so try_index should be always set when building
PcDescriptors for bytecode try-blocks.
* Precompiler should use more general binary_declaration_offset()
instead of kernel_offset() as a hashcode for a Field.
* Querying of PrecodueAttributesMetadata should not try to use
kernel AST if function/field is declared in bytecode.
Also, added printing of operands for LoadUntagged IL instruction to
simplify debugging, and excluded precompiler.{h,cc} from
DART_PRECOMPILED_RUNTIME.
Change-Id: I563b81a0b31b5b268709b1b7b0c3bea4e76813d8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/118120
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Rationale:
Some processors may support just popcnt and, in theory,
some just lzcnt. This change makes the test more
specific. The bsf/bsr tests are never skipped anymore.
Change-Id: I0e7b8772789473ce238f0c5c93378c06c39c695b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117940
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
In bytecode we have enough information to "finalize" type parameters
immediately while reading bytecode. Finalization of a type parameter is
just calculating its index in type arguments vector.
Change-Id: I6f47821b6ddb44441b3ca8c682262a38c454eeb7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117773
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Fixes the changes to assembly snapshot writer in SIMARM_X64 mode. This unfortunately can't be tested until the ELF loader is available.
Take 2 is in patchset 1.
Change-Id: Ib8b067dd4f09dcba3b142705e9cb4dfbf4e3eb53
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117726
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
When installing new code, we need to ensure the mutator is stopped for a
variety of reasons.
Right now we only need to distuinguish mutator and background compiler
when installing code: The mutator can install code without any
synchronization whereas the bg compiler needs to get the mutator to a safepoint.
Yet once all isolates within one isolate group share a heap, a mutator
might need to stop all other mutators before installing code (since they
operate on pages on which we flip page protection bits)
This CL adds IsolateGroup::RunWithStoppedMutators which will get other
mutators to a safepoint (if there are multiple or we are on a bg
compiler thread).
Along with this we add a read-write lock and use it for the protection
of the IsolateGroup::isolate_: While we make assumptions about the
number of isolates in a group we force all pending additions of new
isolates to wait. Later on this will also be used to allow iterating the
list of isolates during GC and prevent new isolates from being added at
the same time.
Issue https://github.com/dart-lang/sdk/issues/36097
Change-Id: I6e761fa51d36b2f2b4b67995cac954898ce7fd69
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-android-release-arm-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-bare-linux-release-x64-try,vm-kernel-precomp-mac-debug-simarm_x64-try,vm-kernel-precomp-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116767
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Hot reload finds all KernelProgramInfo objects and resets object table
in the bytecode component (BytecodeReader::ResetObjectTable). This involves
reading of object offsets from kernel binary.
In case of expression evaluation, kernel binary is temporary and it is
deallocated immediately after expression evaluation is finished.
This change prevents patching of object table of bytecode components
created for expression evaluation, after expression evaluation is finished.
Fixes service/simple_reload_test with bytecode in dartk-asan-linux-release-x64
configuration.
Change-Id: I240dfa2a79030ae2924721e67d2ce7476e8da6fe
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117600
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
This change fixes assertion in Environment::DropArguments which was checking
if locations_ was set by register allocator. However, register allocator
doesn't call set_locations() if Environment is empty (see
FlowGraphAllocator::ProcessEnvironmentUses).
Fixes several tests with bytecode in dartk-mac-debug-simdbc64 configuration,
including language_2/await_future_test, language_2/deferred_optimized_test etc.
Change-Id: I6509987e91906e53615b5e693d6ac78f383646b6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117583
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Print more information after detecting a fatal context mismatch in the debugger.
When generating the line start of a script, first resolve scripts marked for
'lazy lookup' before looking up dart:* scripts.
Delete redundant ifdef/endif pair.
Change-Id: Icd7bd44bf8367fbc306b298246783e22e526be38
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117380
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
Lazy lookup of source and line starts for scripts loaded from bytecode
(implemented in https://dart-review.googlesource.com/c/sdk/+/112680)
relied on source == Symbols::Empty() as an indication that lazy lookup is
needed. However, when Script object is written into app-jit snapshot,
its source is set to null which disables lazy lookup.
This change introduces 'LazyLookupSourceAndLineStarts' flag in Script
objects to avoid relying on value of 'source'.
Fixes service/valid_source_locations_test with bytecode in app-jit mode.
Change-Id: I38174a13d745a1ad9fecad466df745b1df527878
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117214
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Introduced a new code path to load declaration of a referenced class when
loading bytecode, if referenced class is from the same binary. In such case
it's possible to reuse current BytecodeReaderHelper.
Also, AlternativeReadingScope is simplified to save/restore only reader
offset (which is needed in most cases), while saving/restoring data is
still available in AlternativeReadingScopeWithNewData.
This change fixes stack overflow while reading deep class hierarchies in the
tests co19_2/Language/Types/Interface_Types/subtype_t27 and
co19_2/Language/Types/Interface_Types/subtype_t28 with bytecode in
vm-kernel-linux-debug-ia32 configuration.
Change-Id: Iffb1678286c6926926fab465f70251992d451241
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117204
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
In configurations like simdbc, where interpreter is not available
creation of bytecode CodeBreakPoint causes crash when Interpreter::Current() is
called from CodeBreakpoint::SetBytecodeBreakpoint().
This change fixes vm/cc/FunctionWithBreakpointNotInlined with bytecode in
dartk-reload-mac-release-simdbc64 configuration.
Change-Id: I776d4b93d78fcb38cbefab66629afa528e904d54
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117206
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
This is a reland of https://dart-review.googlesource.com/c/sdk/+/113123
after stack overflow in the interpreter was fixed in https://dart-review.googlesource.com/c/sdk/+/117061
Original change's description:
Temporary setting of FLAG_enable_interpreter is avoided in the VM unit tests as
this flag is global and used by kernel service isolate while running tests.
Flipping this flag causes assertion failures in kernel isolate's background compiler
or infinite loop between LazyCompile stub and CompileFunction as AttachBytecode
doesn't set entry point to InterpretCall.
The less intrusive way to ensure compilation of functions in unit tests is to set
FLAG_compilation_counter_threshold to 0.
Change-Id: Ibbcf4b5bb0df558851c80cfa40a9a54f949dd187
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117122
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Rationale:
Leaving a push argument on the stack in slightly more
complex flow graphs (try-catch, loop back, conditinals)
required a bit more bookkeeping. This CL also introduces
more integrity checks to make sure the stack is as
expected at each block and instruction.
Note:
Fuzzer is regression test for new feature.
https://github.com/dart-lang/sdk/issues/38231
Change-Id: I8f7e605937d76c1a429df601e69380111737dd94
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116545
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
This reduces the frame size of Interpreter::Call on Clang x64 from 3544 to 216, and so fixes the stack overflow errors in the kernel service when compiling tests/language_2/deep_nesting_*. Unlike gcc, Clang would give each local NativeArguments a separate spill slot even though they have disjoint lifetimes.
Change-Id: Ib8a1168544f6a590703ba2ea627fcd8452503eab
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117061
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Remove this unnecessary field. Both ExceptionHandlerList and ExceptionHandlers not use token position. TokenPosition passed from CatchBlockEntryInstr() is always NoSource.
Change-Id: I3857ff3d1f9217f565c2d159fa980350ebd4bc47
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117040
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Zichang Guo <zichangguo@google.com>
Before this change, there were 2 ways of getting target of dynamic invocation
forwarder: Function::GetTargetOfDynamicInvocationForwarder() which looks up
using the name, and Function::ForwardingTarget() which returns a target saved
when dynamic invocation forwarder was created.
Apparently we should use Function::ForwardingTarget() when compiling dynamic
invocation forwarder, as we might find a different function after hot reload.
It was the last use of GetTargetOfDynamicInvocationForwarder(), so cleaned it up.
Fixes language_2/flatten_test/01 with bytecode in hot reload mode.
Change-Id: Ibe3117c16509fe5d94fcdd1a2a2b12f2049efad2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117014
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Adds support for:
AssignAssertable
BooleanNegate
LoadClassId
NativeCallInstr
Throw
Results from compiling hello world program:
* Early round trip:
* Contains unhandled instructions: 1565
* Failed during deserialization: 10
* Successful round trips: 2696
* Late round trip:
* Contains unhandled instructions: 2404
* Failed during deserialization: 12
* Successful round trips: 1755
Deserialization failure reasons:
* Early round trip:
* no handling for local functions: 10
* Late round trip:
* no handling for local functions: 7
* out of range index for pushed argument: 5
(see https://github.com/dart-lang/sdk/issues/38354)
Bug: https://github.com/dart-lang/sdk/issues/36882
Change-Id: I56f875a68876b4d94ac1256be207df8b98ba0ea0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116320
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
Adds support for:
AssertBoolean
InstanceCall
Also handles deserializing of TypeRefs and
serialization/deserialization of non-megamorphic
ICData.
Results from compiling hello world program:
* Early round trip:
* Contains unhandled instructions: 2469
* Failed during deserialization: 9
* Successful round trips: 1772
* Late round trip:
* Contains unhandled instructions: 2892
* Failed during deserialization: 11
* Successful round trips: 1268
Deserialization failure reasons:
* Early round trip:
* no handling for local functions: 9
* Late round trip:
* no handling for local functions: 6
* out of range index for pushed argument: 5
(see https://github.com/dart-lang/sdk/issues/38354)
Bug: https://github.com/dart-lang/sdk/issues/36882
Change-Id: I7a3731d4cc3df0bfa1e270adbdfc2faddd110af0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115219
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Breakpoints are still set in compiled bytecode.
When the interpreter is used, breakpoints are set in both interpreted and
compiled bytecode, as before.
This fixes service/breakpoint_async_break_test in app-jit mode.
Change-Id: Ia60f6f99497821b476b664fe8b86ee4aa15748a6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116840
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Previously, BytecodeLocalVariablesIterator::IsDone() returned true
when iterator was standing at the last entry.
As a result, if the last entry is a scope without variables, then it was
ignored and bytecode flow graph builder would not get a correct context
level for that scope.
The fix is for IsDone() to return true only after stepping past the last
entry.
Fixes service/async_generator_breakpoint_test/1 with bytecode.
Change-Id: I768eec9a0e43342cc0f155a6c35cb3de50f3d14a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116880
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Fix an AOT call specialization that broke this relationship.
When printing environments in the FlowGraphPrinter, also print the
underlying value for any PushArguments.
Change-Id: I39803b7d995abac720702ea4b9d6a78fcbc45d4c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115981
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
In interpreteted bytecode mode, _AsyncAwaitCompleterStart does not use
_ClosureCall to invoke the async_op function. Adjust expectations in debugger
when collecting async stack trace.
Refactor computation of try_index in interpreted mode.
Fixes service/pause_on_unhandled_async_exceptions_test in interpreted mode.
Change-Id: Id13c36e2616e55911f77eb4db2591861d337d24a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116556
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Régis Crelier <regis@google.com>