Notable changes:
* C++ API: Fedor Indutny contributed a feature to V8 which has been
backported to the V8 bundled in io.js. SealHandleScope allows a C++
add-on author to seal a HandleScope to prevent further, unintended
allocations within it. Currently only enabled for debug builds of
io.js. This feature helped detect the leak in #1075 and is now
activated on the root HandleScope in io.js. (Fedor Indutny) #1395.
* ARM: This release includes significant work to improve the state of
ARM support for builds and tests. The io.js CI cluster's ARMv6,
ARMv7 and ARMv8 build servers are now all (mostly) reporting passing
builds and tests.
- ARMv8 64-bit (AARCH64) is now properly supported, including a
backported fix in libuv that was mistakenly detecting the
existence of `epoll_wait()`. (Ben Noordhuis) #1365.
- ARMv6: #1376 reported a problem with Math.exp() on ARMv6 (incl
Raspberry Pi). The culprit is erroneous codegen for ARMv6 when
using the "fast math" feature of V8. --nofast_math has been turned
on for all ARMv6 variants by default to avoid this, fast math can
be turned back on with --fast_math. (Ben Noordhuis) #1398.
- Tests: timeouts have been tuned specifically for slower platforms,
detected as ARMv6 and ARMv7. (Roman Reiss) #1366.
* npm: Upgrade npm to 2.7.6. See the release notes
(https://github.com/npm/npm/releases/tag/v2.7.6) for details.
Some variables like dest arch or os are now validated to avoid
build issues. Move defaults to optparse default while at it.
PR-URL: https://github.com/iojs/io.js/pull/1335
Reviewed-By: Rod Vagg <rod@vagg.org>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Original commit message:
api: introduce SealHandleScope
When debugging Handle leaks in io.js we found it very convenient to be
able to Seal some specific (root in our case) scope to prevent Handle
allocations in it, and easily find leakage.
R=yangguo
BUG=
Review URL: https://codereview.chromium.org/1079713002
Cr-Commit-Position: refs/heads/master@{#27766}
Should help us identify and fix Handle leaks in core and user-space code.
NOTE: Works only in Debug build now, but is still better than nothing.
PR-URL: https://github.com/iojs/io.js/pull/1395
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Don't disable fast math on ARMv7, only ARMv6. I hope I got all the
v6 subarchs.
PR-URL: https://github.com/iojs/io.js/pull/1398
Reviewed-By: Roman Reiss <me@silverwind.io>
One static library could not be bundled into another, that's why
it's necessary to skip `-force_load` and `--whole-archive` linker
options to build io.js itself as a static library.
`node_target_type` variable has been added to node.gyp, along
with `--enable-static` option in configure script.
Fixes: https://github.com/iojs/io.js/issues/686
PR-URL: https://github.com/iojs/io.js/pull/1341
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
On Windows, when node or io.js attempts to dynamically load a compiled
addon, the compiled addon tries to load node.exe or iojs.exe again -
depending on which import library the module used when it was linked.
This causes many compiled addons to break when node.exe or iojs.exe are
renamed, because when the binary has been renamed the addon DLL can't
find the (right) .exe file to load its imports from.
This patch gives compiled addon developers an option to overcome this
restriction by compiling a delay-load hook into their binary. The
delay-load hook ensures that whenever a module tries to load imports
from node.exe/iojs.exe, it'll just look at the process image, thereby
making the addon work regardless of what name the node/iojs binary has.
To enable this feature, the addon developer must set the
'win_delay_load_hook' option to 'true' in their binding.gyp file, like
this:
```
{
'targets': [
{
'target_name': 'ernie',
'win_delay_load_hook': 'true',
...
```
Bug: https://github.com/iojs/io.js/issues/751
Bug: https://github.com/iojs/io.js/issues/965
Upstream PR: https://github.com/TooTallNate/node-gyp/pull/599
PR-URL: https://github.com/iojs/io.js/pull/1251
Reviewed-By: Rod Vagg <rod@vagg.org>
PR-URL: https://github.com/iojs/io.js/pull/1266
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Every npm version bump requires a few patches to be floated on
node-gyp for io.js compatibility. These patches are found in
03d199276e,
5de334c230, and
da730c76e9. This commit squashes
them into a single commit.
PR-URL: https://github.com/iojs/io.js/pull/990
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Previously, we detected options object based on amount of arguments
supplied. But if we're calling readline without new operator,
constructor gets re-called and will always have 4 arguments.
PR-URL: https://github.com/iojs/io.js/pull/1385
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This Makefile executes ../openssl/Configure {target} and copy
generated `../openssl/crypto/opensslconf.h` into
`archs/{target}/opensslconf.h`. with the target list that is defined
in ARCS. Several files are copied for backup and cleared so as not to
change the files in `../openssl`.
This also applies four fixes as below by using perl script so as to
meet iojs build requirements.
- all architectures
Remove define of OPENSSL_CPUID_OBJ because it is defined in
openssl.gypi so as to avoid build error with --openssl-no-asm
- VC-WIN32 and VC-WIN64A
OPENSSL_NO_DYNAMIC_ENGINE is needed for building static
library. OPENSSL_NO_CAPIENG is needed to avoid build errors on
Win. See the comments in `deps/openssl/openssl/engines/e_capi.c` for
detail.
- linux-x32
This fix was made by comparing define values of opensslconf.h which
was generated `Configure linux-x32' in openssl-1.0.2a
- darwin64-x86_64-cc
The current openssl release does not use RC4 asm since it explicitly
specified as `$asm=~s/rc4\-[^:]+//;` in
https://github.com/openssl/openssl/blob/OpenSSL_1_0_1-stable/Configure#L584
But iojs has used RC4 asm on MacOS for long time. Fix type of RC4_INT
into `unsigned int` in opensslconf.h of darwin64-x86_64-cc to work on
the RC4 asm.
PR-URL: https://github.com/iojs/io.js/pull/1377
Reviewed-By: Fedor Indutny <fedor@indutny.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
In OpenSSL, opensslconf.h was generated by Configure script with
specifying a target argument, where it includes several defines that
depend on OS and architecture platform.
In iojs, we statically mapped --dest-os and --dest-cpu options in
configure to the target of Configure in OpenSSL and make
`deps/openssl/conf/openssconf.h` so as to include each file
according to its target by checking pre-defined compiler macros.
Included opnesslconf.h files for supported target architectures can
be generated by `Makefile` and stored under
`archs/{target}/opensslconf.h`. The Makefile alos fixes several
defines to meet iojs build requirements.
Here is a map table of configure options in iojs, target arch of
Configure in OpenSSL and CI support.
| --dest-os | --dest-cpu | OpenSSL target arch | CI |
| --------- | ---------- | -------------------- | --- |
| linux | ia32 | linux-elf | o |
| linux | x32 | patched linux-x86_64 | - |
| linux | x64 | linux-x86_64 | o |
| linux | arm | linux-armv4 | o |
| linux | arm64 | N/A | - |
| mac | ia32 | darwin-i386-cc | o |
| mac | x64 | darwin64-x86-cc | o |
| win | ia32 | VC-WIN32 | - |
| win | x64 | VC-WIN64A | o |
| solaris | ia32 | solaris-x86-gcc | o |
| solaris | x64 | solaris64-x86_64-gcc | o |
| freebsd | ia32 | BSD-x86 | o |
| freebsd | x64 | BSD-x86_64 | o |
| openbsd | ia32 | BSD-x86 | - |
| openbsd | x64 | BSD-x86_64 | - |
| others | others | linux-elf | - |
--dest-os and --dest-cpu are mapped to pre-defined macros.
| --dest-os | pre-defined macro |
| ------------------ | ------------------------- |
| win | _WIN32 |
| win(64bit) | _WIN64 |
| mac | __APPLE__ && __MACH__ |
| solaris | __sun |
| freebsd | __FreeBSD__ |
| openbsd | __OpenBSD__ |
| linux (not andorid)| __linux__ && !__ANDROID__ |
| android | __ANDROID__ |
| --dest-cpu | pre-defined macro |
| ---------- | ----------------- |
| arm | __arm__ |
| arm64 | __aarch64__ |
| ia32 | __i386__ |
| ia32(win) | _M_IX86 |
| mips | __mips__ |
| mipsel | __MIPSEL__ |
| x32 | __ILP32__ |
| x64 | __x86_64__ |
| x64(win) | _M_X64 |
These are the list which is not implemented yet.
| --dest-os | --dest-cpu | OpenSSL target arch | CI |
| --------- | ---------- | -------------------- | --- |
| linux | mips | linux-mips32,linux-mips64,linux64-mips64? | --- |
| linux | mipsel | ? | --- |
| android | ia32 | android-x86 | --- |
| android | arm | android-armv7 | --- |
| android | mips | android-mips | --- |
| android | mipsel | ? | --- |
Supported target arch list in OpenSSL can be obtained by typing
`deps/openssl/openssl/Configure LIST`.
This also contains to add two new defines for all platform in the
bottom for GOST and Padlock engines are not included in iojs.
PR-URL: https://github.com/iojs/io.js/pull/1377
Reviewed-By: Fedor Indutny <fedor@indutny.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit better handles calls to process.binding() in lib/ by
no longer lazy loading the bindings (the load times themselves are
rather miniscule compared to the load time of V8) and never reloading
the bindings (which is 172 times slower than referencing a variable with
the same value).
PR-URL: https://github.com/iojs/io.js/pull/1367
Reviewed-By: Brian White <mscdex@mscdex.net>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
This commit introduces platform-specific test timeouts for the ARM
architectures. ARMv6 is notoriously slow so gets very large timeouts on
both the timeout value for each test, as well as certain problematic
individual tests. ARMv7 and ARMv8 also get slightly increased headroom.
PR-URL: https://github.com/iojs/io.js/pull/1366
Fixes: https://github.com/iojs/io.js/issues/1343
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
When running a non-http benchmark, there is no need the check for the
wrk tool so move the wrk check into the http method.
PR-URL: https://github.com/iojs/io.js/pull/1368
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
* Correct link to current collaborator list
* Correct link to Rust CoC
PR-URL: https://github.com/iojs/io.js/pull/1380
Reviewed-By: Roman Reiss <me@silverwind.io>
The memory that was allocated outside of the `smalloc.cc` should not be
tracked using `AdjustAmountOfExternalAllocatedMemory`. There are no
potential issues except triggering V8's GC way too often.
In fact, `heap.js` is creating a buffer out of the pointer, and since it
doesn't know the size of the pointer - it just creates the maximum
possible `Buffer` instance with a no-op free callback and no hint.
PR-URL: https://github.com/iojs/io.js/pull/1375
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
arm64 doesn't have a epoll_wait() system call but a logic error stopped
libuv from falling back to epoll_pwait().
This bug was introduced in commit libuv/libuv@67bb2b5 ("linux: fix
epoll_pwait() regression with < 2.6.19") which sadly exchanged one
regression for another.
This commit is a back-port of libuv/libuv@1d8332f and should help
get the ARMv8 buildbot in better shape.
Original-PR-URL: https://github.com/libuv/libuv/pull/308
PR-URL: https://github.com/iojs/io.js/pull/1365
Reviewed-By: Fedor Indutny <fedor@indutny.com>
The ARM buildbots are notoriously slow. Update the test runner to
double the per-test time limit when it's running on one of them.
PR-URL: https://github.com/iojs/io.js/pull/1357
Reviewed-By: Roman Reiss <me@silverwind.io>
In zlib module, a dozen constants were exported to user land,
If user change the constant, maybe lead unexcepted error.
Make them readonly and freezon.
PR-URL: https://github.com/iojs/io.js/pull/1361
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Johan Bergström <bugs@bergstroem.nu>
Reviewed-By: Shigeki Ohtsu <ohtsu@iij.ad.jp>
This action is to encourage packagers to not build against a
shared V8 library since even minor bumps of V8 can create issues.
PR-URL: https://github.com/iojs/io.js/pull/1331
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Notable changes:
* npm: upgrade npm to 2.7.5. See the npm CHANGELOG.md for details.
Includes two important security fixes.
https://github.com/npm/npm/blob/master/CHANGELOG.md#v275-2015-03-26
* openssl: preliminary work has been done for an upcoming upgrade to
OpenSSL 1.0.2a #1325 (Shigeki Ohtsu). See #589 for additional details.
* timers: a minor memory leak when timers are unreferenced was fixed,
alongside some related timers issues #1330 (Fedor Indutny). This
appears to have fixed the remaining leak reported in #1075.
* android: it is now possible to compile io.js for Android and related
devices #1307 (Giovanny Andres Gongora Granada).
This part is broken for a very long time. We noticed the problem while
using jxcore native interface with embedded openssl. I've also sent a
pull request to node.js repo. The problem may affect a native addon
using builtin openssl. `opensslconf.h` is overwritten with
`deps/openssl/conf/opensslconf.h`
PR-URL: https://github.com/iojs/io.js/pull/1354
Reviewed-By: Shigeki Ohtsu <ohtsu@iij.ad.jp>
gyp tests are not performed in iojs and it's size about 8M bytes. We
can check gyp tests outside of iojs and reduce the size of the
repository by removing them.
PR-URL: https://github.com/iojs/io.js/pull/1350
Reviewed-By: Johan Bergström <bugs@bergstroem.nu>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Reviewed-By: Rod Vagg <rod@vagg.org>
A new `Docker` working group is added to `WORKING_GROUPS.md`.
Also, removed the Docker images responsibility from the `Build`
group's description.
PR-URL: https://github.com/iojs/io.js/pull/1134
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-by: Chris Dickinson <christopher.s.dickinson@gmail.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>