[macruby-changes] [3381] MacRuby/branches/0.5/vm.cpp
source_changes at macosforge.org
source_changes at macosforge.org
Sun Jan 31 14:40:47 PST 2010
Revision: 3381
http://trac.macosforge.org/projects/ruby/changeset/3381
Author: lsansonetti at apple.com
Date: 2010-01-31 14:40:44 -0800 (Sun, 31 Jan 2010)
Log Message:
-----------
backporting symbolication fixes from trunk
Modified Paths:
--------------
MacRuby/branches/0.5/vm.cpp
Modified: MacRuby/branches/0.5/vm.cpp
===================================================================
--- MacRuby/branches/0.5/vm.cpp 2010-01-31 05:57:38 UTC (rev 3380)
+++ MacRuby/branches/0.5/vm.cpp 2010-01-31 22:40:44 UTC (rev 3381)
@@ -569,37 +569,40 @@
*startp = start;
}
- if (name != NULL || path != NULL || ln != NULL) {
- std::map<IMP, rb_vm_method_node_t *>::iterator iter =
- ruby_imps.find((IMP)start);
- if (iter == ruby_imps.end()) {
- // TODO symbolize objc selectors
- return false;
- }
-
- rb_vm_method_node_t *node = iter->second;
+ if (f != NULL) {
if (ln != NULL) {
*ln = 0;
- if (f != NULL) {
- for (std::vector<RoxorFunction::Line>::iterator iter =
- f->lines.begin(); iter != f->lines.end(); ++iter) {
- if ((*iter).address == (uintptr_t)addr) {
- *ln = (*iter).line;
- break;
- }
+ for (std::vector<RoxorFunction::Line>::iterator iter =
+ f->lines.begin(); iter != f->lines.end(); ++iter) {
+ *ln = (*iter).line;
+ if ((*iter).address <= (uintptr_t)addr) {
+ break;
}
}
}
if (path != NULL) {
- if (f != NULL && f->file.size() > 0) {
- strncpy(path, f->file.c_str(), path_len);
+ strncpy(path, f->file.c_str(), path_len);
+ }
+ if (name != NULL) {
+ std::map<IMP, rb_vm_method_node_t *>::iterator iter =
+ ruby_imps.find((IMP)start);
+ if (iter == ruby_imps.end()) {
+ strncpy(name, "block", name_len);
}
else {
- strncpy(path, "core", path_len);
+ strncpy(name, sel_getName(iter->second->sel), name_len);
}
}
+ }
+ else {
+ if (ln != NULL) {
+ *ln = 0;
+ }
+ if (path != NULL) {
+ strncpy(path, "core", path_len);
+ }
if (name != NULL) {
- strncpy(name, sel_getName(node->sel), name_len);
+ name[0] = '\0';
}
}
@@ -3531,8 +3534,11 @@
char name[100];
unsigned long ln = 0;
+ path[0] = name[0] = '\0';
+
if (GET_CORE()->symbolize_call_address(callstack[i], NULL,
- path, sizeof path, &ln, name, sizeof name)) {
+ path, sizeof path, &ln, name, sizeof name)
+ && path[0] != '\0' && name[0] != '\0') {
char entry[PATH_MAX];
if (ln == 0) {
snprintf(entry, sizeof entry, "%s:in `%s'",
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100131/fa825972/attachment.html>
More information about the macruby-changes
mailing list