| Index: runtime/vm/native_entry.cc
|
| diff --git a/runtime/vm/native_entry.cc b/runtime/vm/native_entry.cc
|
| index a28a77960468e4057a9796e065f58092bc358b8a..a5c79d3731a4d6c63153b04bc5f34e0c02157606 100644
|
| --- a/runtime/vm/native_entry.cc
|
| +++ b/runtime/vm/native_entry.cc
|
| @@ -120,6 +120,12 @@ void NativeEntry::PropagateErrors(NativeArguments* arguments) {
|
| void NativeEntry::NativeCallWrapper(Dart_NativeArguments args,
|
| Dart_NativeFunction func) {
|
| CHECK_STACK_ALIGNMENT;
|
| + NativeCallWrapperNoStackCheck(args, func);
|
| +}
|
| +
|
| +
|
| +void NativeEntry::NativeCallWrapperNoStackCheck(Dart_NativeArguments args,
|
| + Dart_NativeFunction func) {
|
| VERIFY_ON_TRANSITION;
|
| NativeArguments* arguments = reinterpret_cast<NativeArguments*>(args);
|
| /* Tell MemorySanitizer 'arguments' is initialized by generated code. */
|
| @@ -281,7 +287,9 @@ void NativeEntry::LinkNativeCall(Dart_NativeArguments args) {
|
|
|
| // Tail-call resolved target.
|
| if (call_through_wrapper) {
|
| - NativeEntry::NativeCallWrapper(
|
| + // Because this call is within a compilation unit, Clang doesn't respect
|
| + // the ABI alignment here.
|
| + NativeEntry::NativeCallWrapperNoStackCheck(
|
| args, reinterpret_cast<Dart_NativeFunction>(target_function));
|
| } else {
|
| target_function(arguments);
|
|
|