Please sign in to comment.
AArch64 Fix getFrameRegs assertion during indirect fixup
Summary: On AA4ch64 plaforms when calling getFrameRegs() and an indirect fixup is found, the RIP needs to be present at the correct offset. It was not, because the destructor was compiled with a tail-call. It needs to have a standard stack frame. By disabling the tail-call via the compiler flag on all destructors in g_destructors, we can ensure that all destructors for AArch64 are walked correctly. This bug occurred sometimes in OSS Mediawiki after a few minutes. We tried to create a simplified unit test but were unsuccessful. This patch introduces no new unit test failures for either DebugOpt or Release build types on AArch64 platforms and doesn't affect x64 or PPC64 destructors. Closes #7912 Differential Revision: D5466807 Pulled By: mxw fbshipit-source-id: 68f3f53c6e76a52025f67583d0013f6303970b93
- Loading branch information...
Showing with 31 additions and 3 deletions.
- +2 −1 hphp/runtime/base/array-data-defs.h
- +1 −0 hphp/runtime/base/mixed-array.cpp
- +5 −1 hphp/runtime/base/object-data.cpp
- +1 −0 hphp/runtime/base/packed-array.cpp
- +2 −0 hphp/runtime/base/ref-data.h
- +1 −0 hphp/runtime/base/resource-data.h
- +1 −0 hphp/runtime/base/set-array.cpp
- +6 −1 hphp/runtime/base/string-data.cpp
- +12 −0 hphp/util/portability.h