Skip to content

Commit d06e72a

Browse files
jbachorikclaude
andcommitted
Set clang frame layout as default for macOS aarch64
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent e279f4f commit d06e72a

3 files changed

Lines changed: 12 additions & 10 deletions

File tree

ddprof-lib/src/main/cpp/dwarf.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,14 @@ struct FrameDesc {
8383
static FrameDesc default_clang_frame;
8484
static FrameDesc no_dwarf_frame;
8585

86+
static const FrameDesc& default_native_frame() {
87+
#if defined(__APPLE__) && defined(__aarch64__)
88+
return default_clang_frame;
89+
#else
90+
return default_frame;
91+
#endif
92+
}
93+
8694
static int comparator(const void* p1, const void* p2) {
8795
FrameDesc* fd1 = (FrameDesc*)p1;
8896
FrameDesc* fd2 = (FrameDesc*)p2;

ddprof-lib/src/main/cpp/stackWalker.cpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -158,11 +158,7 @@ int StackWalker::walkDwarf(void* ucontext, const void** callchain, int max_depth
158158

159159
uintptr_t prev_sp = sp;
160160
CodeCache* cc = profiler->findLibraryByAddress(pc);
161-
#if defined(__APPLE__) && defined(__aarch64__)
162-
FrameDesc f = cc != NULL ? cc->findFrameDesc(pc) : FrameDesc::default_clang_frame;
163-
#else
164-
FrameDesc f = cc != NULL ? cc->findFrameDesc(pc) : FrameDesc::default_frame;
165-
#endif
161+
FrameDesc f = cc != NULL ? cc->findFrameDesc(pc) : FrameDesc::default_native_frame();
166162

167163
u8 cfa_reg = (u8)f.cfa;
168164
int cfa_off = f.cfa >> 8;
@@ -698,11 +694,7 @@ __attribute__((no_sanitize("address"))) int StackWalker::walkVM(void* ucontext,
698694
dwarf_unwind:
699695
uintptr_t prev_sp = sp;
700696
CodeCache* cc = profiler->findLibraryByAddress(pc);
701-
#if defined(__APPLE__) && defined(__aarch64__)
702-
FrameDesc f = cc != NULL ? cc->findFrameDesc(pc) : FrameDesc::default_clang_frame;
703-
#else
704-
FrameDesc f = cc != NULL ? cc->findFrameDesc(pc) : FrameDesc::default_frame;
705-
#endif
697+
FrameDesc f = cc != NULL ? cc->findFrameDesc(pc) : FrameDesc::default_native_frame();
706698

707699
u8 cfa_reg = (u8)f.cfa;
708700
int cfa_off = f.cfa >> 8;

ddprof-lib/src/main/cpp/symbols_macos.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <mach-o/loader.h>
1313
#include <mach-o/nlist.h>
1414
#include "symbols.h"
15+
#include "dwarf.h"
1516
#include "log.h"
1617

1718
UnloadProtection::UnloadProtection(const CodeCache *cc) {
@@ -212,6 +213,7 @@ void Symbols::parseLibraries(CodeCacheArray* array, bool kernel_symbols) {
212213
if (!parser.parse()) {
213214
Log::warn("Could not parse symbols from %s", path);
214215
}
216+
cc->setDwarfTable(NULL, 0, FrameDesc::default_native_frame());
215217
cc->sort();
216218
if (!array->add(cc)) {
217219
delete cc;

0 commit comments

Comments
 (0)