summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/functionalities/recursion/TestValueObjectRecursion.py
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2019-12-11 11:43:35 -0800
committerJason Molenda <jmolenda@apple.com>2019-12-11 12:00:16 -0800
commit6d64162a2d0df2230faf02ff7ee677c448faf4af (patch)
tree450bb6426a77a249f7306ef377626c3220fc2b13 /lldb/packages/Python/lldbsuite/test/functionalities/recursion/TestValueObjectRecursion.py
parent881d877846e2904c731d616731969421ce8cc825 (diff)
downloadbcm5719-llvm-6d64162a2d0df2230faf02ff7ee677c448faf4af.tar.gz
bcm5719-llvm-6d64162a2d0df2230faf02ff7ee677c448faf4af.zip
return-object-by-reference ("non trivial") xfail on arm64 in TestTrivialABI.py
I don't think this test case can be handled correctly on AAPCS64. The ABI says that the caller passes the address of the return object in x8. x8 is a caller-spilled (aka "volatile") register, and the function is not required to preserve x8 or to copy the address back into x8 on function exit like the SysV x86_64 ABI does with rax. (from aapcs64: "there is no requirement for the callee to preserve the value stored in x8") From my quick reading of ABISysV_arm64, I worry that it may actually be using the value in x8 at function exit, assuming it still has the address of the return object - if (is_return_value) { // We are assuming we are decoding this immediately after returning from // a function call and that the address of the structure is in x8 reg_info = reg_ctx->GetRegisterInfoByName("x8", 0); This will work on trivial test programs / examples, but if the function does another function call, or overwrites x8 as a scratch register, lldb will provide incorrect values to the user. ABIMacOSX_arm64 doesn't do this, but it also doesn't flag the value as unavailable so we're providing incorrect values to the user all the time. I expect my fix will be to make ABIMacOSX_arm64 flag the return value as unretrievable, unless I've misread the ABI.
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/functionalities/recursion/TestValueObjectRecursion.py')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud