Commit graph

233 commits

Author SHA1 Message Date
卜部昌平
cdd75d4e7f support C++ std::nullptr_t
C++ keyword `nullptr` represents a null pointer (note also that NULL is
an integer in C++ due to its design flaw).  Its type is `std::nullptr_t`,
defined in <cstddef> standard header.  Why not support it when the
backend implementation can take a null pointer as an argument.
2020-01-31 13:01:52 +09:00
卜部昌平
13064fe5db avoid undefined behaviour when n==0
ISO/IEC 9899:1999 section 6.5.7 states that "If the value of the right
operand is negative or is greater than or equal to the width of the
promoted left operand, the behavior is undefined".  So we have to take
care of such situations.

This has not been a problem because contemporary C compilers are
extraordinary smart to compile the series of shifts into a single
ROTLQ/ROTRQ machine instruction.  In contrast to what C says those
instructions have fully defined behaviour for all possible inputs.
Hence it has been quite difficult to observe the undefined-ness of such
situations.  But undefined is undefined.  We should not rely on such
target-specific assumptions.

We are fixing the situation by carefully avoiding shifts with out-of-
range values.  At least GCC since 4.6.3 and Clang since 8.0 can issue
the exact same instructions like before the changeset.

Also in case of Intel processors, there supposedly be intrinsics named
_rotr/_rotl that do exactly what we need.  They, in practice, are absent
on Clang before 9.x so we cannot blindly use.  But we can at least save
MSVC.

See also:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57157
https://bugs.llvm.org/show_bug.cgi?id=17332
2020-01-10 21:17:15 +09:00
Koichi Sasada
6f5ee1f092 modify MJIT_CC only on RUBY_DEBUG=ci
Modify MJIT_CC (27fae1d4ad) only on CI environment.
2020-01-03 04:39:34 +09:00
Koichi Sasada
27fae1d4ad disable ccache if $CC is in /usr/lib/ccache/$CC.
MJIT with ccache has a problem on docker environment, so
we need to use original CC (/usr/bin/gcc, for example).
Ubuntu system provides /usr/lib/ccache/gcc and so on to use
gcc with ccache. It is easy to setup ccache by adding
/usr/lib/ccache to $PATH. However we need to use /usr/bin/gcc
(and so on) for MJIT_CC. We can specify MJIT_CC option at
configure, but specifying them is troublesome.

This patch choose original $CC (/usr/bin/gcc, for example)
if $CC is /usr/lib/ccache/$CC.
2020-01-03 02:07:21 +09:00
Jeremy Evans
a04c535967 Use __func__ as rb_cv_function_name_string on OpenBSD
The use of RUBY_WERROR_FLAG causes this test to fail on OpenBSD
platforms that use the binutils linker (ld.bfd) instead of the
llvm linker (ld.lld), due to warnings added to the binutils linker
in OpenBSD.

Removing the RUBY_WERROR_FLAG would probably also fix it, but that
would affect other platforms.

This should also be backported to Ruby 2.7.

Analysis and similar fix recommended by George Koehler.
2019-12-28 14:13:05 -08:00
卜部昌平
0958e19ffb add several __has_something macro
With these macros implemented we can write codes just like we can assume
the compiler being clang.  MSC_VERSION_SINCE is defined to implement
those macros, but turned out to be handy for other places.  The -fdeclspec
compiler flag is necessary for clang to properly handle __has_declspec().
2019-12-26 20:45:12 +09:00
Matt Valentine-House
1140625cd3
Allow more than one major version number in target_os 2019-12-13 08:58:42 +09:00
Koichi Sasada
40026a408d support cross-compilation.
On cross-compilation, compiled binary can no be created because
compiled binary should be created by same interpreter (on cross-
compilation, host ruby is used to build ruby (BASERUBY)).
So that cross-compilation system loads required scripts in text.
It is same as miniruby.
2019-12-11 11:24:42 +09:00
Nobuyoshi Nakada
e42d9d8df8
Fixed the inverted condition 2019-12-03 14:51:14 +09:00
Nobuyoshi Nakada
9165fcdfa3
Wrap statements in AS_IF properly 2019-12-03 14:46:54 +09:00
Nobuyoshi Nakada
a7b9f085ff
Disable _FORTIFY_SOURCE on mingw for now
It causes a link error due to some `__*_chk` functions on mingw.
2019-12-02 13:20:00 +09:00
Mark Abraham
07f2062c8f Improve string literal concatenation for C++11
Downstream C++ projects that compile with C++11 or newer and include
the generated config.h file issue compiler warnings. Both C and C++
compilers do string-literal token pasting regardless of whitespace
between the tokens to paste. C++ compilers since C++11 require such
spaces, to avoid ambiguity with the new style of string literals
introduced then. This change fixes such projects without affecting
core Ruby.
2019-11-06 00:31:52 +09:00
Nobuyoshi Nakada
ad4da86669
Check for nonnull attribute in configure 2019-10-29 16:38:15 +09:00
卜部昌平
9195ed18ca Revert "Check for nonnull attribute in configure"
This reverts commit 54eb51d72b.

Windows build failure. See also 278718805
2019-10-29 16:05:39 +09:00
Nobuyoshi Nakada
54eb51d72b
Check for nonnull attribute in configure 2019-10-29 12:12:07 +09:00
Koichi Sasada
9e07dfd253 show BASERUBY version at configure. 2019-10-20 16:16:54 +09:00
卜部昌平
487d290044 oops
Silly typo.
2019-09-10 16:04:17 +09:00
卜部昌平
20e428ec40 fix CentOS 6 compile error
See also 20190910T003005Z.fail.html.gz
2019-09-10 12:25:36 +09:00
Jeremy Evans
8d3db4f26c Default to cc/c++ instead of gcc/g++ on OpenBSD 2019-09-09 18:11:52 -07:00
Nobuyoshi Nakada
733aa2f8b5
Stop setting same flags as cflags to cxxflags 2019-09-06 18:43:41 +09:00
Nobuyoshi Nakada
dd26c9f333
Check clang++ as CXX when CXX is bare clang without suffix 2019-09-06 18:43:41 +09:00
Kazuhiro NISHIYAMA
76abd79629
Fix the appropriate C++ compiler in OS X selection
Merge space and slash to character class and add missing `CXX=` before `=g++-4.2`
at 5e10cb04e8
2019-08-27 10:43:37 +09:00
Nobuyoshi Nakada
5e10cb04e8
Refined the appropriate C++ compiler in OS X selection
Allows CC to be prefixed another path or command, e.g., ccache.
2019-08-26 11:07:34 +09:00
Yusuke Endoh
365e5b38a9 configure.ac: Improve icc_version guessing for non-icc environment
icc_version was wrongly defined as "__ICC" on non-icc C compiler, which
caused a warning:

```
./configure: line 8211: test: __ICC: integer expression expected
```

This change adds a sed commend to delete "__ICC".
2019-08-25 23:08:13 +09:00
Yusuke Endoh
11f7c30fa7 configure.ac: fix the guess of icc_version
The icc_version guessing was accidentally disabled because of
61885c9b7c; `AC_PROG_CC_C99` changes
CC like "icc -std=c99", and `AS_CASE(["x$CC"], [xicc],` does not match.

The variable `icc_version` is eventually defined, so the `AS_CASE` is
not needed.  This change removes the `AS_CASE`.
2019-08-25 22:16:26 +09:00
Nobuyoshi Nakada
19b0161b85
Check whether syscall(2) is deprecated by actual warnings 2019-08-20 02:14:28 +09:00
Nobuyoshi Nakada
588b74e8d8
Check for minimum required OSX version earlier 2019-08-20 02:14:28 +09:00
Nobuyoshi Nakada
9ee770a2ce
Bail out if unsupported old MacOSX is required 2019-08-20 02:14:28 +09:00
Nobuyoshi Nakada
af2c8d2836
Fixed the check for OSX version
Should compare minimum required version, and with the particular
macro defined for each version.  Also made the error messages
consistent.
2019-08-20 02:14:28 +09:00
David CARLIER
6dd9736c3a crash report on mac little update
displaying vm info as Linux and FreeBSD.
checking libproc as it is present only from 10.5 version.

https://github.com/ruby/ruby/pull/2384
2019-08-19 17:36:28 +09:00
David CARLIER
28267cea08 NetBSD native support of explicit_bzero's like feature (#2145) 2019-08-17 14:17:30 +09:00
Nobuyoshi Nakada
03958a0c0d
Relaxed target_os matching
When target_alias is not empty, `-gnu` suffixed is not stripped.

[Bug #16015]
2019-07-23 18:22:25 +09:00
Samuel Williams
7291fef55c
Improve build process and coroutine implementation selection. 2019-07-18 20:54:54 +12:00
Lars Kanis
68e5804022
Add coroutine context switch for i386-mingw32
It's essentially a translation of Context.asm from Intel
to AT&T syntax.
2019-07-07 21:33:47 +12:00
Jeremy Evans
11c311e36f Use realpath(3) instead of custom realpath implementation if available
This approach is simpler than the previous approach which tries to
emulate realpath(3).  It also performs much better on both Linux and
OpenBSD on the included benchmarks.

By using realpath(3), we can better integrate with system security
features such as OpenBSD's unveil(2) system call.

This does not use realpath(3) on Windows even if it exists, as the
approach for checking for absolute paths does not work for drive
letters.  This can be fixed without too much difficultly, though until
Windows defines realpath(3), there is no need to do so.

For File.realdirpath, where the last element of the path is not
required to exist, fallback to the previous approach, as realpath(3)
on most operating systems requires the whole path be valid (per POSIX),
and the operating systems where this isn't true either plan to conform
to POSIX or may change to conform to POSIX in the future.

glibc realpath(3) does not handle /path/to/file.rb/../other_file.rb
paths, returning ENOTDIR in that case.  Fallback to the previous code
if realpath(3) returns ENOTDIR.

glibc doesn't like realpath(3) usage for paths like /dev/fd/5,
returning ENOENT even though the path may appear to exist in the
filesystem.  If ENOENT is returned and the path exists, then fall
back to the default approach.
2019-07-01 11:46:30 -07:00
Jeremy Evans
81fe82be4e Enable native fiber coroutines on i386-openbsd 2019-07-01 11:44:12 -07:00
Jeremy Evans
7172ab0ec5 Use native coroutine implementation on OpenBSD-amd64
When using native fibers, do not load ucontext, as it isn't needed.
2019-06-26 16:23:11 -07:00
Jeremy Evans
d004989ac6 Do not attempt to use ucontext for fibers on OpenBSD
OpenBSD does not support ucontext.

There may be a more generic way to handle this, using the result
of AC_CHECK_HEADERS(ucontext.h).
2019-06-26 07:53:54 -07:00
Samuel Williams
acb67472c7 Restore updated implementation of arm32 coroutine code, but prefer ucontext. 2019-06-26 22:02:28 +12:00
Yusuke Endoh
28eeaed8a9 Revert "coroutine/arm32/Context.S: save/restore the registers via stack"
This reverts commit 6df1814c08.

It caused a SEGV again:
20190626T051707Z.fail.html.gz
2019-06-26 17:23:00 +09:00
Samuel Williams
6c6bf9ffcb Add ucontext coroutine implementation for generic fallback. 2019-06-26 20:19:53 +12:00
Yusuke Endoh
6df1814c08 coroutine/arm32/Context.S: save/restore the registers via stack
Retry of 518adcca0a and dbe232e24e
2019-06-26 14:08:10 +09:00
Yusuke Endoh
730aeb2523 Revert 518adcca0a and dbe232e24e
518adcca0a: "Try using arm32 implementation for fibers."
dbe232e24e: "Order of arguments might be incorrect in arm32 coroutine implementation."

It seems to cause SEGV consistently on Ubuntu armv7l eabihf:

20190625T081710Z.fail.html.gz
20190625T111708Z.fail.html.gz
2019-06-25 23:32:26 +09:00
Samuel Williams
518adcca0a Try using arm32 implementation for fibers. 2019-06-24 19:09:27 +12:00
Samuel Williams
0e6396d2ac Try using arm64 implementation for fibers. 2019-06-24 15:13:17 +12:00
Samuel Williams
abdbfebad1 Use spaces for indentation in configure.ac. 2019-06-24 15:13:17 +12:00
Samuel Williams
d17344cfc5 Remove IA64 support. 2019-06-19 23:30:04 +12:00
Nobuyoshi Nakada
c7477c3e1f
Moved Makefile.in under template 2019-06-07 09:09:58 +09:00
Nobuyoshi Nakada
200c840b95
Revert "Moved Makefile.in under template"
This reverts commits:
* 6f9d5fafe0
* bb3c89b643

And remove the dependency of Makefile on Makefile.in
transitionally.
2019-06-07 09:03:25 +09:00
Nobuyoshi Nakada
6f9d5fafe0
Moved Makefile.in under template 2019-06-07 08:44:37 +09:00