Backport #7456

Build failure with x64 mingw on Windows 8

Added by Heesob Park over 2 years ago. Updated about 2 years ago.

[ruby-core:50258]
Status:Closed
Priority:Normal
Assignee:Usaku NAKAMURA

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.

Associated revisions

Revision 38095
Added by shirosaki over 2 years ago

  • 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(). [Bug #7456]

Revision 38500
Added by Usaku NAKAMURA about 2 years ago

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().
   [Bug #7456]

History

#1 Updated by Hiroshi Shirosaki over 2 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) \

#2 Updated by Heesob Park over 2 years ago

I confirmed the above patch works also on Windows 8.

#3 Updated by Anonymous over 2 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(). [Bug #7456]

#4 Updated by Hiroshi Shirosaki over 2 years ago

  • Status changed from Closed to Assigned
  • Tracker changed from Bug to Backport
  • Project changed from Ruby trunk to Backport193
  • Assignee set to Usaku NAKAMURA

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

#5 Updated by Usaku NAKAMURA about 2 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().
   [Bug #7456]

Also available in: Atom PDF