Skip to content

Commit

Permalink
Merge pull request #12329 from JuliaLang/kf/unwinddifferently
Browse files Browse the repository at this point in the history
[OSX] Register Julia frames with both our and the system unwinder [Using a different method]
  • Loading branch information
Keno committed Jul 28, 2015
2 parents 23bb555 + d742367 commit 88bb2e9
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions src/debuginfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -892,16 +892,31 @@ class RTDyldMemoryManagerOSX : public SectionMemoryManager
extern "C" void __register_frame(void*);
extern "C" void __deregister_frame(void*);

static void (*libc_register_frame)(void*) = NULL;
static void (*libc_deregister_frame)(void*) = NULL;

static const char *processFDE(const char *Entry, bool isDeregister) {
const char *P = Entry;
uint32_t Length = *((const uint32_t *)P);
P += 4;
uint32_t Offset = *((const uint32_t *)P);
if (Offset != 0) {
if (isDeregister)
if (isDeregister) {
if (!libc_deregister_frame) {
libc_deregister_frame = (void(*)(void*))dlsym(RTLD_NEXT,"__deregister_frame");
}
assert(libc_deregister_frame);
libc_deregister_frame(const_cast<char *>(Entry));
__deregister_frame(const_cast<char *>(Entry));
else
}
else {
if (!libc_register_frame) {
libc_register_frame = (void(*)(void*))dlsym(RTLD_NEXT,"__register_frame");
}
assert(libc_register_frame);
libc_register_frame(const_cast<char *>(Entry));
__register_frame(const_cast<char *>(Entry));
}
}
return P + Length;
}
Expand Down

0 comments on commit 88bb2e9

Please sign in to comment.