[macruby-changes] [3126] MacRuby/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Wed Dec 16 18:37:06 PST 2009
Revision: 3126
http://trac.macosforge.org/projects/ruby/changeset/3126
Author: lsansonetti at apple.com
Date: 2009-12-16 18:37:03 -0800 (Wed, 16 Dec 2009)
Log Message:
-----------
support LLVM's ToT, do not emit buggy subprogram dwarf entries, make sure basename and dirname fields of dwarf compile unit entries are good
Modified Paths:
--------------
MacRuby/trunk/compiler.cpp
MacRuby/trunk/vm.cpp
Modified: MacRuby/trunk/compiler.cpp
===================================================================
--- MacRuby/trunk/compiler.cpp 2009-12-16 22:40:49 UTC (rev 3125)
+++ MacRuby/trunk/compiler.cpp 2009-12-17 02:37:03 UTC (rev 3126)
@@ -3115,11 +3115,16 @@
bb = BasicBlock::Create(context, "MainBlock", f);
DISubprogram old_debug_subprogram = debug_subprogram;
+#if 0
+ // This is not the right way to emit subprogram DWARF entries,
+ // llc emits some assembly that doesn't compile because some
+ // symbols are duplicated.
debug_subprogram = debug_info->CreateSubprogram(
debug_compile_unit, f->getName(), f->getName(),
f->getName(), debug_compile_unit, nd_line(node),
DIType(), f->hasInternalLinkage(), true);
debug_info->InsertSubprogramStart(debug_subprogram, bb);
+#endif
std::map<ID, Value *> old_lvars = lvars;
lvars.clear();
@@ -5311,6 +5316,8 @@
return NULL;
}
+#include <libgen.h>
+
void
RoxorCompiler::set_fname(const char *_fname)
{
@@ -5318,8 +5325,29 @@
fname = _fname;
if (fname != NULL) {
+ // Compute complete path.
+ char path[PATH_MAX];
+ if (*_fname == '/') {
+ strncpy(path, _fname, sizeof path);
+ }
+ else {
+ char cwd[PATH_MAX];
+ getcwd(cwd, sizeof cwd);
+ snprintf(path, sizeof path, "%s/%s", cwd, _fname);
+ }
+
+ // Split the path into 2 parts: the directory and the base.
+ char *dir = dirname(path);
+ char *base = basename(path);
+
+ // LLVM (llc) really doesn't like when you pass empty strings for
+ // these values and might later throw a cryptic C++ exception that
+ // will take hours to investigate. How fun.
+ assert(strlen(dir) > 0);
+ assert(strlen(base) > 0);
+
debug_compile_unit = debug_info->CreateCompileUnit(DW_LANG_Ruby,
- fname, "", RUBY_DESCRIPTION, false, false, "");
+ base, dir, RUBY_DESCRIPTION, false, false, "");
}
}
}
Modified: MacRuby/trunk/vm.cpp
===================================================================
--- MacRuby/trunk/vm.cpp 2009-12-16 22:40:49 UTC (rev 3125)
+++ MacRuby/trunk/vm.cpp 2009-12-17 02:37:03 UTC (rev 3126)
@@ -242,8 +242,13 @@
for (std::vector<EmittedFunctionDetails::LineStart>::const_iterator iter = Details.LineStarts.begin(); iter != Details.LineStarts.end(); ++iter) {
DebugLocTuple dlt = Details.MF->getDebugLocTuple(iter->Loc);
if (file.size() == 0) {
+#if LLVM_TOT
+ DICompileUnit unit(dlt.Scope);
+ file.append(unit.getFilename());
+#else
DICompileUnit unit(dlt.CompileUnit);
unit.getFilename(file);
+#endif
assert(file.size() != 0);
}
@@ -3797,7 +3802,6 @@
RoxorCompiler::shared->set_fname(RSTRING_PTR(rb_progname));
Function *f = RoxorCompiler::shared->compile_main_function(node);
f->setName(RSTRING_PTR(ruby_aot_init_func));
- GET_CORE()->optimize(f);
// Force a module verification.
if (verifyModule(*RoxorCompiler::module, PrintMessageAction)) {
@@ -3805,6 +3809,9 @@
exit(1);
}
+ // Optimize the IR.
+ GET_CORE()->optimize(f);
+
// Dump the bitcode.
std::string err;
const char *output = RSTRING_PTR(ruby_aot_compile);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20091216/446e3801/attachment.html>
More information about the macruby-changes
mailing list