[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Libunwind-devel] unw_getcontext on Mac OS X 10.6
From: |
Marc Paterno |
Subject: |
[Libunwind-devel] unw_getcontext on Mac OS X 10.6 |
Date: |
Wed, 24 Feb 2010 10:36:59 -0600 |
Hello,
I am using the version of libunwind that ships with Mac OS X 10.6.
The documentation for unw_getcontext() says that it returns only 0 or -1.
However, in a simple test program, I find that unw_getcontext is always
returning the value 2440 (0x988). The source of the program is appended below.
If I ignore the return value, it would seem that unw_getcontext() has
succeeded; at least the unw_context_t struct that it has initialized is
acceptable for use in getting a cursor with unw_init_local.
Is the apparent failure of unw_getcontext() spurious in that it is OK to use
the resulting unw_context_t struct?
What does the status code of 0x988 mean?
Any guidance would be most appreciated.
best regards,
Dr. Marc Paterno
Fermi National Accelerator Laboratory
-----
#include <iostream>
// Define UNW_LOCAL_ONLY before including libunwind.h to use the fast version
// of the unwinding (faster than the version that supports remote unwinding).
#define UNW_LOCAL_ONLY
#include "libunwind.h"
int work() {
// Get the current machine state.
unw_context_t uc;
int rc;
rc = unw_getcontext(&uc);
if (rc != 0) {
std::cerr << "unw_getcontext failed: rc = " << rc << "; proceeding
anyway\n";
}
// Initialize curser for local unwinding.
unw_cursor_t cursor;
rc = unw_init_local(&cursor, &uc);
if (rc != 0) {
std::cerr << "unw_init_local failed: rc = " << rc << "; proceeding
anyway\n";
}
// Step through the stack frames and print out the information as you go.
// When unw_step() is 0, the end of chain has been reached.
while (unw_step(&cursor) > 0) {
// Read ip register.
unw_word_t ip;
rc = unw_get_reg(&cursor, UNW_REG_IP, &ip);
if (rc != 0) {
std::cerr << "unw_get_reg failed: rc = " << rc << "; stopping unwind\n";
break;
}
void* address = (char *) ip - 4;
std::cerr << "Got address: " << address << std::endl;
}
std::cerr << "Done\n";
return 0;
}
int main() {
int rc = work();
return rc;
}
- [Libunwind-devel] unw_getcontext on Mac OS X 10.6,
Marc Paterno <=