* win32/file.c (replace_to_long_name): do not try to glob host
names and share names by FindFirstFile which is useless for that
purpose. [ruby-core:91656] [Bug #15633]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67163 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
as well. Follows up r66598.
https://bugs.ruby-lang.org/issues/15347#note-7 is saying __restrict
is supported on Visual Studio 2013.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66715 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Define major and minor version numbers only in the public
include/ruby/version.h header, as the API version numbers.
* Define only teeny version number in the private version.h
header.
* RUBY_VERSION moved to version.c.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66599 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* coroutine/win32/Context.asm: old ml version 9 needs CPU
directive before `.model` directive.
* win32/Makefile.sub: specify object directories to separate Win32
and Win64 targets. Win32 rule was overridden by Win64 rule and
just ignored.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66059 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
All normal Ruby IO methods (IO#read, IO#gets, IO#write, ...) are
all capable of appearing to be "blocking" when presented with a
file description with the O_NONBLOCK flag set; so there is
little risk of incompatibility within Ruby-using programs.
The biggest compatibility risk is when spawning external
programs. As a result, stdin, stdout, and stderr are now always
made blocking before exec-family calls.
This change will make an event-oriented MJIT usable if it is
waiting on pipes on POSIX_like platforms.
It is ALSO necessary to take advantage of (proposed lightweight
concurrency (aka "auto-Fiber") or any similar proposal for
network concurrency: https://bugs.ruby-lang.org/issues/13618
Named-pipe (FIFO) are NOT yet non-blocking by default since
they are rarely-used and may introduce compatibility problems
and extra syscall overhead for a common path.
Please revert this commit if there are problems and if I am afk
since I am afk a lot, lately.
[ruby-core:89950] [Bug #14968]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65922 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.ac: add --disable-fiber-coroutine option, and disable
it on x86-mingw32 for now.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65899 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Since `.revision.time` recipe needs `$(BASERUBY)`, it should not
try to get updated unconditionally, or tarballs fail to build on
environments where BASERUBY is not available.
All developers who build frequently use GNU make anyway, don't
you?
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65695 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub: add MJIT_SUPPORT macro for C codes
and variable for Makefile.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65232 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.ac: rename configure option `--disable-mjit` to
`--disable-mjit-support` because `--disable-mjit` is ambiguous that
runtime MJIT default enable option or supporting MJIT features.
`ENABLE_MJIT` is also renamed to `MJIT_SUPPORT`
* Makefile.in: catch up this fix.
* common.mk: ditto.
* test/ruby/test_jit.rb: ditto.
* win32/Makefile.sub: catch up this fix on mswin.
* tool/mkconfig.rb: fix to pass `MJIT_SUPPORT` key.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65217 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
and substitute INSTALL_MJIT_HEADER. This would be convenient as a workaround
for user if we found a platform that can't compile Ruby after Ruby 2.6.0 release.
common.mk: Install MJIT header only when INSTALL_MJIT_HEADER
Makefile.in: ditto
win32/Makefile.sub: ditto
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65171 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
worker. It's very likely to be thread-unsafe and so it's better to avoid
using in MJIT worker to prevent surprises by race condition.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65048 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
I'm simplifying the interface of ChildRecord as I'm going to complicate
it a little next.
I didn't drop hInput since leaving it would be more natural as its
interface.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65044 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Prior to this commit, some of parent process's output was unintentionally
suppressed. We couldn't suppress only child process's output with spawnvp.
Instead of that, this commit uses CreateProcess directly to redirect stdout
and stderr only for child process.
As it's dealing with HANDLE returned from CreateProcess, now waitpid macro
needs to CloseHandle it.
win32/win32.c: Introduce rb_w32_start_process which is designed for MJIT
worker. Other similar functions can't be used since they are using ALLOCV
that may trigger GC, which should be avoided on MJIT worker.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65033 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
in the MJIT-header-specific path, not default path like vc140.pdb.
mjit_worker.c: specify the MJIT-header-specific pdb path.
tool/rbinstall.rb: install MJIT header pdb as well.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65003 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
to prefix. This is a retry of r64947. So this doesn't still make mswin MJIT
on install directory succeed. One more step required.
tool/rbinstall.rb: This change is needed to install headers correctly since
the extensions are .obj and .pch, not .h
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65000 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Since `=` is considered as delimiter in `()` of `for`, having
`-DRUBY_DEVEL=1` in CPPFLAGS had resulted in:
#define MJIT_OPTFLAGS "-DMJIT_HEADER", \
"-DRUBY_DEVEL", \
"1", \
Even escaped `for %I in (... -DRUBY_DEVEL^=1)` does not yield an
expected result. This commit is a workaround for this issue.
After this commit, mjit_config.h will have:
#define MJIT_OPTFLAGS "-DMJIT_HEADER", \
"-DRUBY_DEVEL" MJIT_CONFIG_ESCAPED_EQ "1", \
And C macro resolves MJIT_CONFIG_ESCAPED_EQ to "=".
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64219 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This is needed to resolve:
"error LNK2011: precompiled object not linked in; image may not run"
win32/Makefile.sub: Use the same flags as ones for precompiled header.
This is needed to resolve:
"error C2855: command-line option '/Z7' inconsistent with precompiled header"
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64192 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
file name correctly. This allows to use the header installed by r64188.
win32/Makefile.sub: define prebuilt precompiled header path instead of
unused min header path
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
See the comment in win32/Makefile.sub.
Not only .pch, but also .obj needs to be installed and used on runtime.
.gitignore: ignore .pch that will be built by this.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64188 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
when $MJIT_SEARCH_BUILD_DIR is set.
If prefix path is owned by root, `make install` needs to be run by root.
But in general we don't want to run `make test-all`, and also running
`make test-all` currently fails due to permission tests of rdoc and rubygems.
Thus, prior to this commit, specifying a prefix like "/usr/local" could
mean there was no way to pass test-all.
So we should not depend on `make install` for `make test-all`. Thus I
reverted r64104 and r64103, and applied this workaround to pass `make
test-all` without `make install`.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64143 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (constat_parse): split long buffer and limit write
size on a console, as well as rb_w32_write.
[ruby-dev:50597] [Bug #14942]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64092 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Makefile.in: Clone benchmark-driver repository in benchmark/benchmark-driver
`make update-benchmark-driver`, like simplecov.
win32/Makefile.sub: Roughly do the same thing.
.gitignore: Ignore the cloned repository.
common.mk: Trigger `make update-benchmark-driver` to run `make benchmark`
and adjust arguments for benchmark_driver.gem.
benchmark/require.yml: renamed from benchmark/bm_require.rb, benchmark/prepare_require.rb
benchmark/require_thread.yml: renamed from benchmark/bm_require_thread.rb, benchmark/prepare_require_thread.rb
benchmark/so_count_words.yml: renamed from benchmark/bm_so_count_words.rb, benchmark/prepare_so_count_words.rb,
benchmark/wc.input.base
benchmark/so_k_nucleotide.yml: renamed from benchmark/bm_so_k_nucleotide.rb, benchmark/prepare_so_k_nucleotide.rb,
benchmark/make_fasta_output.rb
benchmark/so_reverse_complement.yml: renamed from benchmark/bm_so_reverse_complement.rb, benchmark/prepare_so_reverse_complement.rb,
benchmark/make_fasta_output.rb
I'm sorry but I made some duplications between benchmark/require.yml and benchmark/require_thread.yml,
and between benchmark/so_k_nucleotide.yml and benchmark/so_reverse_complement.yml.
If you're not comfortable with it, please combine these YAMLs to share
the same prelude. One YAML file can have multiple benchmark definitions
sharing prelude.
benchmark/driver.rb: Replace its core feature with benchmark_driver.gem.
Some old features are gone for now, but I'll add them again later.
[Misc #14902]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63888 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Partially revert r63820. mjit.c seems to have different idea of
"pid" type/size than the rest of Ruby on win32.
As noted in [ruby-core:87794], this seems to break Greg's build.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63856 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Reading win32/win32.c waitpid implementation, maybe waitpid(-1, ...)
on that platform will never conflict with mjit use of waitpid.
In any case, I've added WAITPID_USE_SIGCHLD macro to vm_core.h
so it can be easy for Linux/BSD users to test (hopefully!)
win32-compatible code.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63855 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
The change is unstable on Windows. Please re-commit it when it correctly
supports Windows.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63852 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* mjit.c (exec_prcess): use PRI_PIDT_PREFIX for pid.
* win32/Makefile.sub (PRI_PIDT_PREFIX): force to "I".
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63820 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.ac: removed DISABLE_RUBYGEMS macro from config.h, not
to rebuild everything when the flag changed.
* configure.ac, win32/configure.bat: make USE_RUBYGEMS lowercase.
* tool/mkconfig.rb: remove RUBYGEMS stuff from rbconfig.rb, not to
reconfigure and rebuild all extension libraries.
* Makefile.in (CPPFLAGS): enable/disable Rubygems by USE_RUBYGEMS.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63718 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (filetime_split, clock_gettime): keep the
precision as possible as the FILETIME format.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63636 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Makefile.in, win32/Makefile.sub (mjit_config.h): expand min
header name, including the version number and the suffix.
* mjit.c (init_header_filename): the version number and the suffix
are now included in the header name.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63279 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (constat_apply): CSI 'J' and 'K' are defaulted to
1, not 0. [ruby-core:86560] [Bug #14691]
* win32/win32.c (constat_apply): "delete before cursor" sequences
include the cursor position.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63187 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/file.c (IS_ABSOLUTE_PATH_P): home directory should not be
a relative path regardless a drive letter. PathIsRelativeW
returns FALSE on such path. [ruby-core:86356] [Bug #14638]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62952 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/README.win32: patch(1) is required, and running `make up` before
`make` is also required.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62840 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Makefile.in, win32/Makefile.sub: move CANONICALIZATION_FOR_MATHN
from config.h which affects all extension libraries to XCFLAGS
for the core only.
* configure.ac: added --disable-mathn option.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62705 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub (reconfig): phony target to force reconfigure
with previous options.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62659 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.in (MJIT_LDSHARED): define based on LDSHARED with
replacing CC with MJIT_CC.
* Makefile.in, win32/Makefile.sub (mjit_config.h): instead of the
default LDSHARED, use MJIT_LDSHARED to link mjit shared objects.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62644 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub: always link user32.lib which provides a lot
of very common library functions. [Bug #14422]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62629 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.ac (MAINLIBS): moved library options for main program
and static libruby, and append MAINLIBS to LIBRUBYARG_STATIC, as
these libraries are not needed for linking to shared libruby.
[ruby-core:85882] [Bug #14422]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62627 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Passing options to configure like as `configure MJIT_OPTFLAGS=-O
MJIT_DEBUGFLAGS=-g` overrides options to be used to compile JIT
code, separately from the default options to be used for ruby
itself.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62623 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Makefile.in, common.mk, win32/Makefile.sub: moved MJIT macros to
mjit_config.h from XCFLAGS.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Makefile.in, win32/Makefile.sub (LIBRUBY_A): link with extension
libraries if EXTSTATIC is set, so that static-ruby would work
too.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62448 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Makefie.in, win32/Makefile.sub: add more macros for compiler to
mjit_config.h.
* mjit.c: unification VC and GCC in progress.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62356 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub (CPPOUTFLAG, MJIT_HEADER_FLAGS): -Fi option
is available since VC 10. redirect stdout on older versions.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62352 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Makefie.in, win32/Makefile.sub: make mjit_config.h from
configured variables, including necessary options, e.g., `-m32`
for 32bit binary on 64bit platform.
* mjit.c: always use configured CC command. as config.h depends
on the compiler, different compilers cannot work.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62343 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub (MESSAGE_BEGIN, MESSAGE_END): group the whole
`for` command, to redirect all lines but not overwrite line by
line.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62331 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub (RUBY_VERSION_NAME): used in this file but not defined.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62324 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.ac: MJIT_HEADER_INSTALL_DIR to rubyarchhdrdir to
support multiarch.
* Makefile.in (MJIT_HEADER_INSTALL_DIR): configured by multiarch.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62320 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/ifchange.bat: added --color option for the compatibility
with tool/ifchange. do nothing right now.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62299 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub (LIBRUBYARG_SHARED): define for MJIT because it is used in
common.mk.
* mjit.c (make_pch): skip temporary for mswin.
* mjit.c (compile_c_to_so, init_header_filename, mjit_init): mswin support.
* mjig_compile.c (mjit_compile): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62267 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Makefile.in, win32/Makefile.sub (XCFLAGS): moved MJIT_CPPFLAGS
from CPPFLAGS. MJIT_CPPFLAGS is only for mjit.c, unused in
extension libraries.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (MJIT_CPPFLAGS): moved common definition flags for
mjit compilation.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62256 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (MJIT_HEADER, MJIT_MIN_HEADER): added hook to separate
intermediate headers per archs.
* defs/gmake.mk: build mjit headers per -arch options, and then
merge the headers with `#ifdef`s.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62245 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
so that MJIT can work if Ruby is distributed as prebuilt binary.
Now mjit_init() depends on the internal const TMP_RUBY_PREFIX which is
only available after ruby_init_loadpath_safe() (L1608) and before
ruby_init_prelude() (L1681). So the place of mjit_init() is moved.
Makefile.in: Removed static prefix from MJIT_HEADER_ISNTALL_DIR macro.
And this removes the unused LIBRUBY_LIBDIR macro as well.
win32/Makefile.sub: ditto.
Patch by: Lars Kanis <lars@greiz-reinsdorf.de>
[Bug #14445]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62238 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub: va_copy is available since VS12 (VC 18.00).
simple copy same as VC1 19.00.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62223 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (rb_mjit_header.h): use $(CPPOUTFLAG).
* win32/Makefile.sub (CPPOUTFLAG): needs -Fi to let cl.exe name
preprocessed file, instead of -Fo.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62208 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (rb_mjit_header.h): moved from Makefile.in and
win32/Makefile.sub.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62202 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub: split CFLAGS into CFLAGS_NO_ARCH and
ARCH_FLAG, as well as Makefile.in.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62201 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
which has been developed by Takashi Kokubun <takashikkbn@gmail> as
YARV-MJIT. Many of its bugs are fixed by wanabe <s.wanabe@gmail.com>.
This JIT compiler is designed to be a safe migration path to introduce
JIT compiler to MRI. So this commit does not include any bytecode
changes or dynamic instruction modifications, which are done in original
MJIT.
This commit even strips off some aggressive optimizations from
YARV-MJIT, and thus it's slower than YARV-MJIT too. But it's still
fairly faster than Ruby 2.5 in some benchmarks (attached below).
Note that this JIT compiler passes `make test`, `make test-all`, `make
test-spec` without JIT, and even with JIT. Not only it's perfectly safe
with JIT disabled because it does not replace VM instructions unlike
MJIT, but also with JIT enabled it stably runs Ruby applications
including Rails applications.
I'm expecting this version as just "initial" JIT compiler. I have many
optimization ideas which are skipped for initial merging, and you may
easily replace this JIT compiler with a faster one by just replacing
mjit_compile.c. `mjit_compile` interface is designed for the purpose.
common.mk: update dependencies for mjit_compile.c.
internal.h: declare `rb_vm_insn_addr2insn` for MJIT.
vm.c: exclude some definitions if `-DMJIT_HEADER` is provided to
compiler. This avoids to include some functions which take a long time
to compile, e.g. vm_exec_core. Some of the purpose is achieved in
transform_mjit_header.rb (see `IGNORED_FUNCTIONS`) but others are
manually resolved for now. Load mjit_helper.h for MJIT header.
mjit_helper.h: New. This is a file used only by JIT-ed code. I'll
refactor `mjit_call_cfunc` later.
vm_eval.c: add some #ifdef switches to skip compiling some functions
like Init_vm_eval.
win32/mkexports.rb: export thread/ec functions, which are used by MJIT.
include/ruby/defines.h: add MJIT_FUNC_EXPORTED macro alis to clarify
that a function is exported only for MJIT.
array.c: export a function used by MJIT.
bignum.c: ditto.
class.c: ditto.
compile.c: ditto.
error.c: ditto.
gc.c: ditto.
hash.c: ditto.
iseq.c: ditto.
numeric.c: ditto.
object.c: ditto.
proc.c: ditto.
re.c: ditto.
st.c: ditto.
string.c: ditto.
thread.c: ditto.
variable.c: ditto.
vm_backtrace.c: ditto.
vm_insnhelper.c: ditto.
vm_method.c: ditto.
I would like to improve maintainability of function exports, but I
believe this way is acceptable as initial merging if we clarify the
new exports are for MJIT (so that we can use them as TODO list to fix)
and add unit tests to detect unresolved symbols.
I'll add unit tests of JIT compilations in succeeding commits.
Author: Takashi Kokubun <takashikkbn@gmail.com>
Contributor: wanabe <s.wanabe@gmail.com>
Part of [Feature #14235]
---
* Known issues
* Code generated by gcc is faster than clang. The benchmark may be worse
in macOS. Following benchmark result is provided by gcc w/ Linux.
* Performance is decreased when Google Chrome is running
* JIT can work on MinGW, but it doesn't improve performance at least
in short running benchmark.
* Currently it doesn't perform well with Rails. We'll try to fix this
before release.
---
* Benchmark reslts
Benchmarked with:
Intel 4.0GHz i7-4790K with 16GB memory under x86-64 Ubuntu 8 Cores
- 2.0.0-p0: Ruby 2.0.0-p0
- r62186: Ruby trunk (early 2.6.0), before MJIT changes
- JIT off: On this commit, but without `--jit` option
- JIT on: On this commit, and with `--jit` option
** Optcarrot fps
Benchmark: https://github.com/mame/optcarrot
| |2.0.0-p0 |r62186 |JIT off |JIT on |
|:--------|:--------|:--------|:--------|:--------|
|fps |37.32 |51.46 |51.31 |58.88 |
|vs 2.0.0 |1.00x |1.38x |1.37x |1.58x |
** MJIT benchmarks
Benchmark: https://github.com/benchmark-driver/mjit-benchmarks
(Original: https://github.com/vnmakarov/ruby/tree/rtl_mjit_branch/MJIT-benchmarks)
| |2.0.0-p0 |r62186 |JIT off |JIT on |
|:----------|:--------|:--------|:--------|:--------|
|aread |1.00 |1.09 |1.07 |2.19 |
|aref |1.00 |1.13 |1.11 |2.22 |
|aset |1.00 |1.50 |1.45 |2.64 |
|awrite |1.00 |1.17 |1.13 |2.20 |
|call |1.00 |1.29 |1.26 |2.02 |
|const2 |1.00 |1.10 |1.10 |2.19 |
|const |1.00 |1.11 |1.10 |2.19 |
|fannk |1.00 |1.04 |1.02 |1.00 |
|fib |1.00 |1.32 |1.31 |1.84 |
|ivread |1.00 |1.13 |1.12 |2.43 |
|ivwrite |1.00 |1.23 |1.21 |2.40 |
|mandelbrot |1.00 |1.13 |1.16 |1.28 |
|meteor |1.00 |2.97 |2.92 |3.17 |
|nbody |1.00 |1.17 |1.15 |1.49 |
|nest-ntimes|1.00 |1.22 |1.20 |1.39 |
|nest-while |1.00 |1.10 |1.10 |1.37 |
|norm |1.00 |1.18 |1.16 |1.24 |
|nsvb |1.00 |1.16 |1.16 |1.17 |
|red-black |1.00 |1.02 |0.99 |1.12 |
|sieve |1.00 |1.30 |1.28 |1.62 |
|trees |1.00 |1.14 |1.13 |1.19 |
|while |1.00 |1.12 |1.11 |2.41 |
** Discourse's script/bench.rb
Benchmark: https://github.com/discourse/discourse/blob/v1.8.7/script/bench.rb
NOTE: Rails performance was somehow a little degraded with JIT for now.
We should fix this.
(At least I know opt_aref is performing badly in JIT and I have an idea
to fix it. Please wait for the fix.)
*** JIT off
Your Results: (note for timings- percentile is first, duration is second in millisecs)
categories_admin:
50: 17
75: 18
90: 22
99: 29
home_admin:
50: 21
75: 21
90: 27
99: 40
topic_admin:
50: 17
75: 18
90: 22
99: 32
categories:
50: 35
75: 41
90: 43
99: 77
home:
50: 39
75: 46
90: 49
99: 95
topic:
50: 46
75: 52
90: 56
99: 101
*** JIT on
Your Results: (note for timings- percentile is first, duration is second in millisecs)
categories_admin:
50: 19
75: 21
90: 25
99: 33
home_admin:
50: 24
75: 26
90: 30
99: 35
topic_admin:
50: 19
75: 20
90: 25
99: 30
categories:
50: 40
75: 44
90: 48
99: 76
home:
50: 42
75: 48
90: 51
99: 89
topic:
50: 49
75: 55
90: 58
99: 99
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62197 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk ($(MJIT_MIN_HEADER)): moved duplicate recipe from
Makefile.in and win32/Makefile.sub.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62195 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* Makefile.in, win32/Makefile.sub (rb_mjit_header.h): use ifchange
tool. cmp command is not available on Windows.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62194 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
that allows to JIT-compile Ruby methods by generating C code and
using C compiler. See the first comment of mjit.c to know what this
file does.
mjit.c is authored by Vladimir Makarov <vmakarov@redhat.com>.
After he invented great method JIT infrastructure for MRI as MJIT,
Lars Kanis <lars@greiz-reinsdorf.de> sent the patch to support MinGW
in MJIT. In addition to merging it, I ported pthread to Windows native
threads. Now this MJIT infrastructure can be compiled on Visual Studio.
This commit simplifies mjit.c to decrease code at initial merge. For
example, this commit does not provide multiple JIT threads support.
We can resurrect them later if we really want them, but I wanted to minimize
diff to make it easier to review this patch.
`/tmp/_mjitXXX` file is renamed to `/tmp/_ruby_mjitXXX` because non-Ruby
developers may not know the name "mjit" and the file name should make
sure it's from Ruby and not from some harmful programs. TODO: it may be
better to store this to some temporary directory which Ruby is already using
by Tempfile, if it's not bad for performance.
mjit.h: New. It has `mjit_exec` interface similar to `vm_exec`, which is
for triggering MJIT. This drops interface for AOT compared to the original
MJIT.
Makefile.in: define macros to let MJIT know the path of MJIT header.
Probably we can refactor this to reduce the number of macros (TODO).
win32/Makefile.sub: ditto.
common.mk: compile mjit.o and mjit_compile.o. Unlike original MJIT, this
commit separates MJIT infrastructure and JIT compiler code as independent
object files. As initial patch is NOT going to have ultra-fast JIT compiler,
it's likely to replace JIT compiler, e.g. original MJIT's compiler or some
future JIT impelementations which are not public now.
inits.c: define MJIT module. This is added because `MJIT.enabled?` was
necessary for testing.
test/lib/zombie_hunter.rb: skip if `MJIT.enabled?`. Obviously this
wouldn't work with current code when JIT is enabled.
test/ruby/test_io.rb: skip this too. This would make no sense with MJIT.
ruby.c: define MJIT CLI options. As major difference from original MJIT,
"-j:l"/"--jit:llvm" are renamed to "--jit-cc" because I want to support
not only gcc/clang but also cl.exe (Visual Studio) in the future. But it
takes only "--jit-cc=gcc", "--jit-cc=clang" for now. And only long "--jit"
options are allowed since some Ruby committers preferred it at Ruby
developers Meeting on January, and some of options are renamed.
This file also triggers to initialize MJIT thread and variables.
eval.c: finalize MJIT worker thread and variables.
test/ruby/test_rubyoptions.rb: fix number of CLI options for --jit.
thread_pthread.c: change for pthread abstraction in MJIT. Prefix rb_ for
functions which are used by other files.
thread_win32.c: ditto, for Windows. Those pthread porting is one of major
works that YARV-MJIT created, which is my fork of MJIT, in Feature 14235.
thread.c: follow rb_ prefix changes
vm.c: trigger MJIT call on VM invocation. Also trigger `mjit_mark` to avoid
SEGV by race between JIT and GC of ISeq. The improvement was provided by
wanabe <s.wanabe@gmail.com>.
In JIT compiler I created and am going to add in my next commit, I found
that having `mjit_exec` after `vm_loop_start:` is harmful because the
JIT-ed function doesn't proceed other ISeqs on RESTORE_REGS of leave insn.
Executing non-FINISH frame is unexpected for my JIT compiler and
`exception_handler` triggers executions of such ISeqs. So `mjit_exec`
here should be executed only when it directly comes from `vm_exec` call.
`RubyVM::MJIT` module and `.enabled?` method is added so that we can skip
some tests which don't expect JIT threads or compiler file descriptors.
vm_insnhelper.h: trigger MJIT on method calls during VM execution.
vm_core.h: add fields required for mjit.c. `bp` must be `cfp[6]` because
rb_control_frame_struct is likely to be casted to another struct. The
last position is the safest place to add the new field.
vm_insnhelper.c: save initial value of cfp->ep as cfp->bp. This is an
optimization which are done in both MJIT and YARV-MJIT. So this change
is added in this commit. Calculating bp from ep is a little heavy work,
so bp is kind of cache for it.
iseq.c: notify ISeq GC to MJIT. We should know which iseq in MJIT queue
is GCed to avoid SEGV. TODO: unload some GCed units in some safe way.
gc.c: add hooks so that MJIT can wait GC, and vice versa. Simultaneous
JIT and GC executions may cause SEGV and so we should synchronize them.
cont.c: save continuation information in MJIT worker. As MJIT shouldn't
unload JIT-ed code which is being used, MJIT wants to know full list of
saved execution contexts for continuation and detect ISeqs in use.
mjit_compile.c: added empty JIT compiler so that you can reuse this commit
to build your own JIT compiler. This commit tries to compile ISeqs but
all of them are considered as not supported in this commit. So you can't
use JIT compiler in this commit yet while we added --jit option now.
Patch author: Vladimir Makarov <vmakarov@redhat.com>.
Contributors:
Takashi Kokubun <takashikkbn@gmail.com>.
wanabe <s.wanabe@gmail.com>.
Lars Kanis <lars@greiz-reinsdorf.de>.
Part of Feature 12589 and 14235.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
compilation which is created by transforming a preprocessed vm.c.
This file will be used by JIT compiler's generated code which we are
going to have from succeeding commits.
Makefile.in: generate MJIT header for UNIX environments.
win32/Makefile.sub: generate MJIT header for mswin environments.
At initial merge, we're going to support only MinGW for Windows. So the
header installed by this file won't be used for short term, but we'll
add mswin support in a half year or so, for sure.
tool/transform_mjit_header.rb: New. This script was originally written as
minimize_mjit_header.rb by Vladimir N. Makarov <vmakarov@redhat.com> for
Feature 12589.
Then I refactored a little so that it can conform CodeClimate CI which is
currently set for Ruby's GitHub repository, and fixed some bugs and ported
it to work on Windows.
Also, as original minimize_mjit_header.rb takes too long time to run,
this is modified to skip minimization step because having *static*
unused definitions does not waste compilation time on -O2 since compiler
can skip to compile unused static functions. So this does no longer
"minimize" the header and is renamed.
This header installation does NOT include a header to automatically
export symbols used by MJIT. That's because original MJIT code was
failing to export symbols in the import header in macOS environment.
But I would like to have the functionality for maintainability in the
future. I'll manually export things but it would be just an intemediate
solution.
Patch by: Vladimir N. Makarov <vmakarov@redhat.com>
Part of: Feature 12589 and 14235.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62187 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (rb_w32_write): writing to closed pipe fails with
ERROR_NO_DATA but msvcrt maps it to EINVAL. map it to EPIPE.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62150 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/setup.mak: discard output from BASERUBY command, even if
it contains multiple commands.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62110 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Other places are using RT_VER. So I guess this is correct.
Currently AppVeyor CI is failing and I want to fix that.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62063 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* include/ruby/missing.h (nan): need to declare the prototype of nan() if
missing.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62061 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub (MISSING): nan() is available since msvcrr120.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61980 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
C11 and C++11 has this feature so why not use it when available.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61828 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
For instance array.c:rb_ary_product() uses RSTRING_PTR() as an
array of int. So to avoid misaligned memory access RSTRING_PTR()
must at least be sizeof(int)-aligned. However the type of
RSTRING_PTR() is char*, which of course can expect alignment as
much as 1. This is a problem.
The reality is, there is no misaligned memory access because the
memory region behind RSTRING_PTR() is allocated using malloc().
Memory regions returned from malloc() are always aligned
appropriately. So let's tell the compiler about this information.
It seems GCC, clang, and MSVC have such feature.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61827 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Previous commit changed insns.def format. Now is the time for its
generators. In doing so I chose to modernize the system, not just
patch. My attempt includes
- extensive use of Onigumo regular expressions
- split from one big file (instruction.rb) into separated MVC
- partial view
Also, let me take this opportunity to kill old unused features
such as
- stack caching
- minsns / yasmdata which are never seriously used
- yarvarch document generation (moved to doc/)
- vast majority of unused arguments to insns2vm.rb
This commit generates VM source codes that cleanly compile, and
the generated binary passes tests. At least for me.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61784 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Previous commit changed insns.def format. Now is the time for its
generators. In doing so I chose to modernize the system, not just
patch. My attempt includes
- extensive use of Onigumo regular expressions
- split from one big file (instruction.rb) into separated MVC
- partial view
Also, let me take this opportunity to kill old unused features
such as
- stack caching
- minsns / yasmdata which are never seriously used
- yarvarch document generation (moved to doc/)
- vast majority of unused arguments to insns2vm.rb
This commit generates VM source codes that cleanly compile, and
the generated binary passes tests. At least for me.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61733 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (w32_io_info, rb_w32_file_identical_p): fallback
to GetFileInformationByHandle if GetFileInformationByHandleEx
failed. it seems not working on network drives.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61067 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Support nanosec file timestamp on Windows 8 or later.
Original patches are written by kubo (Kubo Takehiro).
Windows 7 and earlier also supports nanosec file timestamp, but it's too
accurate than system time. so, this feature is disabled on such versions.
[Feature #13726]
this change also includes [Misc #13702]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61013 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (FILE_ID_128): it's not defined in SDK with VC10, but seems to
be defined in SDK with VC12.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61007 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/setup.mak (-basic-vars-): moved BASERUBY and HAVE_BASERUBY
definition to make Makefile stable when they have been defaulted.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60985 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (vm_exit_handler): separate exit handler for
resources which must be released at exit of Ruby VM.
* win32/win32.c (socklist_insert, constat_handle): install the VM
exit handler.
* gc.c (ENABLE_VM_OBJSPACE): no longer needs process global object
space on Windows too.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60856 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (test-bundled-gems): moved from Makefile.in so it
might work on nmake too.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60435 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/etc/etc.c (etc_sysconfdir): mentioned special case on
Windows. [ruby-core:43110] [Bug #6121]
* ext/etc/extconf.rb: define SYSCONFDIR only if sysconfdir is set
in RbConfig::CONFIG and not empty.
* win32/Makefile.sub (config.status): sysconfdir is not used on
Windows.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60402 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/etc/etc.c (etc_sysconfdir): mentioned special case on
Windows. [ruby-core:43110] [Bug #6121]
* win32/Makefile.sub (config.status): sysconfdir is not used on
Windows.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60279 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (gettiemeofday, wutime): use GetSystemTimePreciseAsFileTime
instead of GetSystemTimeAsFileTime if it is available.
This patch is based on Takehiro Kubo <kubo@jiubao.org> 's one (change only
the name of wrapper function). Thanks! and sorry to late
[ruby-dev:50167] [Feature #13732]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60240 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.ac (LIBRUBY_SONAME): add new variable for the name of
the library name with compatibility version.
[ruby-core:83208] [Bug #14002]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60180 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.in, win32/Makefile.sub: set LIBPATHENV to PATH on
Windows, for extra DLLs.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59868 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.in (-DRUBY_DEVEL): moved from debugflags to XCFLAGS.
this flags should be applied to the ruby core only.
* configure.in (-fno-fast-math): moved from optflags to CFLAGS.
this flag is not for optimization.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59778 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (rb_w32_set_thread_description): fix the condition
if the API function pointer is found.
[ruby-core:82494] [Bug #13845]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59678 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (rb_w32_set_thread_description_str): return the
result when name is nil.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59661 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/configure.bat (--help): should show the entity of $PATH_SEPARATOR.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59478 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.in: define RUBY_DEVEL only in the trunk.
* gc.c: enable runtime rgengc debug if RUBY_DEVEL
* ruby.c (debug_option): enable RUBY_DEBUG in --debug option only
if RUBY_DEVEL.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59131 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (rb_dir_getwd_ospath): Windows implementation
moved from dir.c. get rid of freeing malloced memory by xfree.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59061 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (skipspace, w32_cmdvector): get rid of iswspace(),
which is locale dependent.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59019 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/setup.mak: seems to be forgotten to commit at r58295.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58520 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub (enc/jis/props.h): build it in not builddir,
but in srcdir.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58455 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
It is never used. We don't need it anyway as it's part of C89 which is
our current minimum requirement.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58430 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.in, win32/configure.bat: add --with-git option to
tell git command to use, or not to use git.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58295 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (clean-ext): separate clean-up of makefiles and
timestamps, and clean-up of subdirectories under ext and gems.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57748 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub (config.h): define ULL_TO_DOUBLE for
conversion from unsigned __int64 to double, which is not
implemented in till Visual Studio.NET 2003, aka VC7.1.
* bignum.c (estimate_initial_sqrt): use ULL_TO_DOUBLE if defined.
* numeric.c (BDIGIT_DBL_TO_DOUBLE): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57740 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* ext/configure-ext.mk: configure each directories underneath ext
in parallel.
* template/exts.mk.tmpl: then collect the results.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57401 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/Makefile.sub (config.status): check configured target by
reading from config.status, and remove version dependent values
from config.h.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57188 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (winnt_stat): the return value of `get_final_path` is the
expected buffer length, not the actuall filled length.
* win32/win32.c (winnt_stat): `finalname` may be accessed in the outer block of
its definition via `path`.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57135 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/mkexports.rb (Exports::Mswin#each_exports): should ignore `vsprintf_s_l`
and the like just like `vsprintf_l`.
[ruby-dev:49899] [Bug #13033]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57079 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/file.c (rb_default_home_dir): should not be marked as const.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57007 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* file.c (rb_default_home_dir): resolve home directory from the
system database when HOME is not set. [Feature #12695]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56902 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (rb_w32_home_dir): move from win32/file.c to try
special folders.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56901 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/file.c (append_wstr): remove a codepage argument, and use
INVALID_CODE_PAGE for conversion by econv.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56006 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/file.c (append_wstr): exclude the terminator from the
result length when input len == -1.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56004 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (StartSockets): rb_fatal does not need a newline
at the end.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55971 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
win32/stub.c only works with malloced argv as win32/win32.c, to
realloc it.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55969 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (getifaddrs, rb_w32_getppid): initialize the API
pointers with an impossible value not to try everytime on old
platforms.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55817 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (rb_w32_inet_ntop, rb_w32_inet_): make the
API pointers static not to get the address everytime.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55816 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (get_final_path): initialize this pointer without
further comparisons.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55815 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
the position of pioinfo of VC14, and also support debug library of it.
patched by davispuh AT gmail.com
[ruby-core:76644] [Bug #12644]
this fixes also [Bug #12631]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55792 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* common.mk (INCFLAGS): move from Makefile.in.
* win32/Makefile.sub (XCFLAGS): missing directory is not
neccessary as an include path.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55698 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (GetSystemWindowsDirectoryW): use
GetWindowsDirectoryW for VC6.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55535 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (get_special_folder): fix calling convention of
SHGetPathFromIDListEx, which should be WINAPI. pointed out by
@arton at http://twitter.com/arton/status/744884064277016576
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55473 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/ifchange.bat: drop support for command.com used on old
systems.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55336 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c: unify MAX_PATH, _MAX_PATH, and MAXPATHLEN to
PATH_MAX, except for MAX_PATH in get_special_folder for an API
limit.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55270 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (get_special_folder): fail before getting
ITEMIDLIST if the buffer is less than 260 word which
SHGetPathFromIDListW requires.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55269 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (get_special_folder): use SHGetPathFromIDListEx if
available instead of old SHGetPathFromIDListW, to check the
buffer size.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55261 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* configure.in: revert r55237. replace crypt, not crypt_r, and
check if crypt is broken more.
* missing/crypt.c: move crypt_r.c
* string.c (rb_str_crypt): use crypt_r if provided by the system.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55245 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (RUBY_CRITICAL): removed the argument but make
just a block which does nothing, so that debuggers can step into
the block.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55200 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012 or later, because VS2010 seems to causes a SEGV in
test/ruby/test_enum.rb.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54980 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* util.c (ruby_qsort): use qsort_s if available, for Microsoft
Visual Studio 2005 (msvcr80.dll) and mingw.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/file.c (replace_to_long_name): fix reallocation threshold.
dereferenced size of a pointer is not same as the buffer size.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54807 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/file.c (replace_to_long_name): remove unnecessary backward
scan for the last directory separator.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54806 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Search _pioinfo which is not exported after MSVC14.
[Bug #12014] [GH-884]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54737 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/file.c (rb_file_expand_path_internal): should free wpath,
but not xfree, corresponding to rb_w32_mbstr_to_wstr which
allocates by malloc.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54526 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (open_dir_handle): reuse the fullpath buffer
instead of allocating another buffer for copy.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53716 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (w32_wopendir): remove filename parameter, and
check the drive letter in wpath instead. rename from
opendir_internal.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53710 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (rb_w32_read_reparse_point): name the prefix
length to be dropped.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53706 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/win32.c (opendir_internal): defer counting the length just
before the loop where it is used.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53703 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* win32/file.c (rb_readlink): drop garbage after the substitute
name, as rb_w32_read_reparse_point returns the expected buffer
size but "\??\" prefix is dropped from the result.
* win32/win32.c (w32_readlink): ditto, including NUL-terminator.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53689 b2dd03c8-39d4-4d8f-98ff-823fe69b080e