[macruby-changes] [4140] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Mon May 24 01:41:50 PDT 2010


Revision: 4140
          http://trac.macosforge.org/projects/ruby/changeset/4140
Author:   lsansonetti at apple.com
Date:     2010-05-24 01:41:48 -0700 (Mon, 24 May 2010)
Log Message:
-----------
make sure there is a null byte at end of the kernel bitcode since it's required by earlier versions of MemoryBuffer::getMemBuffer (patch by Thibault)

Modified Paths:
--------------
    MacRuby/trunk/rakelib/builder.rake
    MacRuby/trunk/vm.cpp

Modified: MacRuby/trunk/rakelib/builder.rake
===================================================================
--- MacRuby/trunk/rakelib/builder.rake	2010-05-24 05:12:10 UTC (rev 4139)
+++ MacRuby/trunk/rakelib/builder.rake	2010-05-24 08:41:48 UTC (rev 4140)
@@ -42,8 +42,12 @@
     includes = CFLAGS.scan(/-I[^\s]+/).join(' ')
     ARCHS.each do |x| 
       output = "kernel-#{x}.bc"
+      # Compile the IR for the kernel.c source file & optimize it.
       sh "#{llvm_gcc} -arch #{x} -fexceptions #{includes} --emit-llvm -c kernel.c -o #{output}"
       sh "#{opt} -O3 #{output} -o=#{output}"
+      # Convert the bitcode into a C static array. We append a null byte to the bitcode file because
+      # xxd doesn't, and it's needed by the bitcode reader later at runtime.
+      sh "/bin/dd if=/dev/zero count=1 bs=1 conv=notrunc >> #{output} 2>/dev/null"
       sh "/usr/bin/xxd -i #{output} >> kernel_data.c"
       sh "/bin/rm #{output}"
     end

Modified: MacRuby/trunk/vm.cpp
===================================================================
--- MacRuby/trunk/vm.cpp	2010-05-24 05:12:10 UTC (rev 4139)
+++ MacRuby/trunk/vm.cpp	2010-05-24 08:41:48 UTC (rev 4140)
@@ -4621,14 +4621,16 @@
     // To not corrupt stack pointer (essential for backtracing).
     llvm::NoFramePointerElim = true;
 
+    // Retrieve the kernel bitcode for the right architecture. We substract
+    // 1 to the length because it's NULL terminated.
     const char *kernel_beg;
     const char *kernel_end;
 #if __LP64__
     kernel_beg = (const char *)kernel_x86_64_bc;
-    kernel_end = kernel_beg + kernel_x86_64_bc_len;
+    kernel_end = kernel_beg + kernel_x86_64_bc_len - 1;
 #else
     kernel_beg = (const char *)kernel_i386_bc;
-    kernel_end = kernel_beg + kernel_i386_bc_len;
+    kernel_end = kernel_beg + kernel_i386_bc_len - 1;
 #endif
 
     MemoryBuffer *mbuf = MemoryBuffer::getMemBuffer(kernel_beg, kernel_end);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20100524/593c0133/attachment.html>


More information about the macruby-changes mailing list