aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/tools/llvm-profgen/Inputs/fs-discriminator.perfbin
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2025-10-09 19:10:07 -0700
committerJason Molenda <jmolenda@apple.com>2025-10-09 19:10:42 -0700
commit47d3c5f3cb159fd261ab5c3efa55afae246c5e0d (patch)
tree5e41c13ac3af334502f7d4540b14d9983a73f3a3 /llvm/test/tools/llvm-profgen/Inputs/fs-discriminator.perfbin
parent37aa3473983a3c463d09749ab13fc2182db9328e (diff)
downloadllvm-main.zip
llvm-main.tar.gz
llvm-main.tar.bz2
[lldb] Cortex-M exception unwind API test cleanupHEADmain
This test, with a corefile created via yaml2macho-core plus an ObjectFileJSON binary with symbol addresses and ranges, was failing on some machines/CI because the wrong ABI was being picked. The bytes of the functions were not included in the yaml or .json binary. The unwind falls back to using the ABI plugin default unwind plans. We have two armv7 ABIs - the Darwin ABI that always uses r7 as the frame pointer, and the AAPCS ABI which uses r11 code. In reality, armv7 code uses r11 in arm mode, r7 in thumb code. But the ABI ArchDefaultUnwindPlan doesn't have any access to the Target's ArchSpec or Process register state, to determine the correct processor state (arm or thumb). And in fact, on Cortex-M targets, the instructions are always thumb, so the arch default unwind plan (hardcoded r11) is always wrong. The corefile doesn't specify a vendor/os, only a cpu. The object file json specifies the armv7m-apple-* triple, which will select the correct ABI plugin, and the test runs. In some cases, it looks like the Process ABI was fetched after opening the corefile, but before the binary.json was loaded and corrected the Target's ArchSpec. And we never re-evaluate the ABI once it is set, in a Process. When we picked the AAPCS armv7 ABI, we would try to use r11 as frame pointer, and the unwind would stop after one stack frame. I'm stepping around this problem by (1) adding the register bytes of the prologues of every test function in the backtrace, and (2) shortening the function ranges (in binary.json) to specify that the functions are all just long enough for the prologue where execution is stopped. The instruction emulation plugin will fail if it can't get all of the bytes from the function instructions, so I hacked the function sizes in the .json to cover the prologue plus one and changed the addresses in the backtrace to fit within those ranges. [ updated this commit to keep the @skipIfRemote on the API test because two remote CI bots are failing for reasons I don't quite see. ]
Diffstat (limited to 'llvm/test/tools/llvm-profgen/Inputs/fs-discriminator.perfbin')
0 files changed, 0 insertions, 0 deletions