Backport #7456

Build failure with x64 mingw on Windows 8

Added by Heesob Park over 1 year ago. Updated over 1 year 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 = x8664-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 -DFORTIFYSOURCE=2 -fno-strict-overflow -fvisibility=hidden -DRUBYEXPORT
CPPFLAGS = -D
WIN32WINNT=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 dlnfind.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 'puidchangeprivilege':
process.c:5044:14: warning: variable 'uid' set but not used [-Wunused-but-set-variable]
process.c: In function 'p
gidchangeprivilege':
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 vmdump.c
compiling vm
backtrace.c
compiling vmtrace.c
compiling thread.c
compiling cont.c
compiling ./enc/ascii.c
compiling ./enc/us
ascii.c
compiling ./enc/unicode.c
compiling ./enc/utf8.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(Cspecific_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 38500
Added by Usaku NAKAMURA over 1 year 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 1 year ago

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

Since rbarynew3() 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 @@ rvalue(VALUE value)
(rb
arypush(iseq->compiledata->catchtableary, \
rbarynew3(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 1 year ago

I confirmed the above patch works also on Windows 8.

#3 Updated by Anonymous over 1 year 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 (ADDCATCHENTRY): add a cast to fix SEGV with x64 mingw on Windows 8. Without cast, 0 might be non zero value at higher bits in rbarynew3(). [Bug #7456]

#4 Updated by Hiroshi Shirosaki over 1 year ago

  • Tracker changed from Bug to Backport
  • Project changed from ruby-trunk to Backport93
  • Status changed from Closed to Assigned
  • 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 over 1 year 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