Project

General

Profile

Actions

Backport #7456

closed

Build failure with x64 mingw on Windows 8

Added by phasis68 (Heesob Park) over 11 years ago. Updated over 11 years ago.

Status:
Closed
[ruby-core:50258]

Description

I cannot build x64 mingw version of trunk on Windows 8.

$ make
CC = x86_64-w64-mingw32-gcc
LD = ld
LDSHARED = x86_64-w64-mingw32-gcc -shared
CFLAGS = -O3 -fno-omit-frame-pointer -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=implicit-function-declaration
XCFLAGS = -include ruby/config.h -include ruby/missing.h -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fvisibility=hidden -DRUBY_EXPORT
CPPFLAGS = -D_WIN32_WINNT=0x0501 -I. -I.ext/include/x64-mingw32 -I./include -I.
DLDFLAGS = -Wl,--enable-auto-image-base,--enable-auto-import -Wl,--out-implib=libx64-msvcrt-ruby200.dll.a x64-msvcrt-ruby200.def -Wl,--stack,0x00200000,--enable-auto-import
SOLIBS = x64-msvcrt-ruby200.res.o -lshell32 -lws2_32 -limagehlp -lshlwapi
compiling main.c
compiling dmydln.c
compiling dmyencoding.c
compiling version.c
compiling dmyversion.c
compiling miniprelude.c
copying dummy probes.h
compiling array.c
compiling bignum.c
compiling class.c
compiling compar.c
compiling complex.c
compiling dir.c
compiling dln_find.c
compiling enum.c
compiling enumerator.c
compiling error.c
compiling eval.c
compiling load.c
compiling proc.c
compiling file.c
compiling gc.c
compiling hash.c
compiling inits.c
compiling io.c
io.c: In function 'pipe_open':
io.c:5548:12: warning: variable 'envp' set but not used [-Wunused-but-set-variable]
compiling marshal.c
compiling math.c
compiling node.c
compiling numeric.c
compiling object.c
compiling pack.c
compiling parse.c
compiling process.c
process.c: In function 'p_uid_change_privilege':
process.c:5044:14: warning: variable 'uid' set but not used [-Wunused-but-set-variable]
process.c: In function 'p_gid_change_privilege':
process.c:5749:14: warning: variable 'gid' set but not used [-Wunused-but-set-variable]
compiling random.c
compiling range.c
compiling rational.c
compiling re.c
compiling regcomp.c
compiling regenc.c
compiling regerror.c
compiling regexec.c
compiling regparse.c
compiling regsyntax.c
compiling ruby.c
compiling safe.c
compiling signal.c
compiling sprintf.c
compiling st.c
compiling strftime.c
compiling string.c
compiling struct.c
compiling time.c
compiling transcode.c
compiling util.c
compiling variable.c
compiling compile.c
compiling debug.c
compiling iseq.c
compiling vm.c
compiling vm_dump.c
compiling vm_backtrace.c
compiling vm_trace.c
compiling thread.c
compiling cont.c
compiling ./enc/ascii.c
compiling ./enc/us_ascii.c
compiling ./enc/unicode.c
compiling ./enc/utf_8.c
compiling newline.c
compiling ./missing/langinfo.c
compiling ./missing/fileblocks.c
compiling ./missing/crypt.c
compiling ./missing/lgamma_r.c
compiling ./missing/strlcpy.c
compiling ./missing/strlcat.c
compiling ./missing/ffs.c
compiling ./missing/setproctitle.c
compiling win32/win32.c
compiling win32/file.c
compiling dmyext.c
linking miniruby.exe
./tool/mkconfig.rb:11: [BUG] Segmentation fault
ruby 2.0.0dev (2012-11-28 trunk 37906) [x64-mingw32]

-- Control frame information -----------------------------------------------
c:0003 p:---- s:0029 e:000028 CFUNC :require
c:0002 p:0100 s:0025 e:000770 EVAL ./tool/mkconfig.rb:11 [FINISH]
c:0001 p:0000 s:0002 e:002638 TOP [FINISH]

./tool/mkconfig.rb:11:in <main>' ./tool/mkconfig.rb:11:in require'

-- C level backtrace information -------------------------------------------
C:\WINDOWS\SYSTEM32\ntdll.dll(NtWaitForSingleObject+0xa) [0x000007FB60A62C2A]
C:\WINDOWS\system32\KERNELBASE.dll(WaitForSingleObjectEx+0x9a) [0x000007FB5DCD10
EA]
[0x000000000057F649]
[0x0000000000440F68]
[0x0000000000442035]
[0x00000000005075F8]
[0x00000000005A3545]
C:\WINDOWS\SYSTEM32\ntdll.dll(_C_specific_handler+0x8e) [0x000007FB60A84FEA]
C:\WINDOWS\SYSTEM32\ntdll.dll(RtlLookupFunctionEntry+0x26d) [0x000007FB60A8464D]

C:\WINDOWS\SYSTEM32\ntdll.dll(DbgPrint+0x47c) [0x000007FB60A8567C]
C:\WINDOWS\SYSTEM32\ntdll.dll(KiUserExceptionDispatcher+0x2e) [0x000007FB60A64BBA]
[0x000000000045D9C0]
[0x000000000045F7C2]
[0x000000000045FB41]
[0x000000000045FE24]
[0x0000000000461272]
[0x00000000004617C0]
[0x00000000004BF8FE]
[0x00000000004C17D4]
[0x000000000058314A]
[0x00000000004ADCC2]
[0x0000000000505044]
[0x0000000000449F4A]
[0x0000000000505C8E]
[0x000000000044AEBD]
[0x000000000044CA3E]
[0x000000000056BB16]
[0x000000000057A8FB]
[0x000000000056F5C2]
[0x0000000000573FF6]
[0x000000000057CA90]
[0x0000000000446FF2]
[0x00000000004496B1]
[0x00000000005A8A84]
[0x00000000004013D7]
[0x00000000004014F8]
C:\WINDOWS\system32\KERNEL32.DLL(BaseThreadInitThunk+0x1a) [0x000007FB5E03167E]

-- Other runtime information -----------------------------------------------

  • Loaded script: ./tool/mkconfig.rb

  • Loaded features:

    0 enumerator.so

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
make: *** [.rbconfig.time] Error 3

Whereas, Ruby 1.9.3p327 succeed to build with x64 mingw.
And Trunk build with VC 2012 64bit is also successful.

Updated by h.shirosaki (Hiroshi Shirosaki) over 11 years ago

When iseqv is 0 at ADD_CATCH_ENTRY in compile.c, invalid VALUE (higher bits over 32bit are non zero) is added to iseq->compile_data->catch_table_ary.
This causes Segmentation fault in GC mark phase.

Since rb_ary_new3() has variable arguments, proper cast of arguments would be needed.
I confirmed build completes with this patch on Win8 release preview running on VM, but I don't have Win8.

1.9.3 also have this code.
https://github.com/ruby/ruby/blob/ruby_1_9_3/compile.c#L254

diff --git a/compile.c b/compile.c
index ebb58bb..d81ca0c 100644
--- a/compile.c
+++ b/compile.c
@@ -249,7 +249,7 @@ r_value(VALUE value)
(rb_ary_push(iseq->compile_data->catch_table_ary,
rb_ary_new3(5, (type),
(VALUE)(ls) | 1, (VALUE)(le) | 1, \

  •                        (iseqv), (VALUE)(lc) | 1)))
    
  •                        (VALUE)(iseqv), (VALUE)(lc) | 1)))
    

/* compile node */
#define COMPILE(anchor, desc, node) \

Updated by phasis68 (Heesob Park) over 11 years ago

I confirmed the above patch works also on Windows 8.

Actions #3

Updated by Anonymous over 11 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r38095.
Heesob, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • compile.c (ADD_CATCH_ENTRY): add a cast to fix SEGV with x64 mingw
    on Windows 8. Without cast, 0 might be non zero value at higher bits
    in rb_ary_new3().
    [ruby-core:50258] [Bug #7456]
Actions #4

Updated by h.shirosaki (Hiroshi Shirosaki) over 11 years ago

  • Tracker changed from Bug to Backport
  • Project changed from Ruby master to Backport193
  • Status changed from Closed to Assigned
  • Assignee set to usa (Usaku NAKAMURA)

I think 1.9.3 also have possibility to cause this issue. Please backport r38095.

Actions #5

Updated by usa (Usaku NAKAMURA) over 11 years ago

  • Status changed from Assigned to Closed

This issue was solved with changeset r38500.
Heesob, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


merge revision(s) 38095: [Backport #7456]

* compile.c (ADD_CATCH_ENTRY): add a cast to fix SEGV with x64 mingw
  on Windows 8. Without cast, 0 might be non zero value at higher bits
  in rb_ary_new3().
  [ruby-core:50258] [Bug #7456]
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0