I just get this error right away:
root@digi:/opt/router-scripts-openwrt# git pull
Already up-to-date.
root@digi:/opt/router-scripts-openwrt# npm install
node[20027]: ../src/node_platform.cc:262:std::shared_ptr<node::PerIsolatePlatformData> node::NodePlatform::ForIsolate(v8::Isolate*): Assertion `data' failed.
Aborted
root@digi:/opt/router-scripts-openwrt# ^C
root@digi:/opt/router-scripts-openwrt# no
bash: no: command not found
root@digi:/opt/router-scripts-openwrt# node
node[20172]: ../src/node_platform.cc:262:std::shared_ptr<node::PerIsolatePlatformData> node::NodePlatform::ForIsolate(v8::Isolate*): Assertion `data' failed.
Aborted
root@digi:/opt/router-scripts-openwrt# yarn
bash: yarn: command not found
root@digi:/opt/router-scripts-openwrt# yarnpkg -v
bash: yarnpkg: command not found
root@digi:/opt/router-scripts-openwrt# yarnpkg --v
bash: yarnpkg: command not found
root@digi:/opt/router-scripts-openwrt# yarnpkg --version
bash: yarnpkg: command not found
root@digi:/opt/router-scripts-openwrt# npm -v
node[20181]: ../src/node_platform.cc:262:std::shared_ptr<node::PerIsolatePlatformData> node::NodePlatform::ForIsolate(v8::Isolate*): Assertion `data' failed.
Aborted
root@digi:/opt/router-scripts-openwrt# node -v
v10.5.0
root@digi:/opt/router-scripts-openwrt#
REF: https://github.com/nxhack/openwrt-node-packages/issues/329
@addaleax do you know why it happens?
@addaleax here is the error
https://github.com/nodejs/node/blob/v10.5.0/src/node_platform.cc#L262
Some asserting.
@p3x-robot Are you using the builds from https://nodejs.org/en/ ? Can you get a stack trace or similar for that assertion (e.g. using gdb)?
I do not have gbp , i am on a router. but it is only since the new threads.
I tried DEBUG=*, but not working.
i build from here:
https://github.com/nxhack/openwrt-node-packages/tree/master/node
i get this error here:
https://github.com/nodejs/node/blob/v10.5.0/src/node_platform.cc#L262
@p3x-robot You might still be able to get a core dump in some way, even if you’re on a router?
@addaleax I could come up like this:
https://cdn.corifeus.com/archive/node.1530108405.24874.6.core
can it help?
@addaleax Here is some info:
https://github.com/nxhack/openwrt-node-packages/issues/329#issuecomment-400919289
Hi @p3x-robot
I do not know if this information is useful. This is the place I can do for now.
$ ~/openwrt/staging_dir/toolchain-arm_cortex-a9+vfpv3_gcc-7.3.0_musl_eabi/bin/arm-openwrt-linux-gdb ./out/Release/node ~/node.1530108405.24874.6.core
GNU gdb (GDB) 8.0.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-pc-linux-gnu --target=arm-openwrt-linux-muslgnueabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./out/Release/node...done.
warning: exec file is newer than core file.
[New LWP 24874]
[New LWP 24875]
[New LWP 24877]
[New LWP 24876]
[New LWP 24878]
Core was generated by `node'.
Program terminated with signal SIGABRT, Aborted.
#0 0xb6fbed5c in ?? ()
[Current thread is 1 (LWP 24874)]
(gdb) list
1 #include <features.h>
2
3 #define START "_start"
4
5 #include "crt_arch.h"
6
7 int main();
8 void _init() __attribute__((weak));
9 void _fini() __attribute__((weak));
10 _Noreturn int __libc_start_main(int (*)(), int, char **,
(gdb) t 2
[Switching to thread 2 (LWP 24875)]
#0 0x007c1c0c in v8::internal::ICStats::End() ()
(gdb) t 3
[Switching to thread 3 (LWP 24877)]
#0 0xb6fca2c8 in ?? ()
(gdb) t 4
[Switching to thread 4 (LWP 24876)]
#0 0xb6fca2c8 in ?? ()
(gdb) t 5
[Switching to thread 5 (LWP 24878)]
#0 0xb6fca2c8 in ?? ()
(gdb)
warning: exec file is newer than core file.
@p3x-robot The executable you passed to gdb should match the one used to generate the core dump – is that the case here? If yes, the information in there is not all that useful, sorry … thread apply all bt might give a bit more. But my gut feeling is that that warning is helpful here, and you want to generate a new core dump with exactly that executable first.
how can i create a core dump?
@p3x-robot the way you did it before, you run the executable and wait for the crash to happen
@addaleax i got this:
docker@4d82cb762091:/build/source$ ./staging_dir/toolchain-arm_cortex-a9+vfpv3_gcc-5.4.0_musl-1.1.16_eabi/bin/arm-openwrt-linux-gdb ./wo
rk/node ./work/node.4309.6.1530167810.core
GNU gdb (GDB) 8.0.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-linux-gnu --target=arm-openwrt-linux-muslgnueabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./work/node...(no debugging symbols found)...done.
[New LWP 4309]
[New LWP 4310]
[New LWP 4312]
[New LWP 4311]
[New LWP 4313]
Core was generated by `node'.
Program terminated with signal SIGABRT, Aborted.
#0 0xb6f2bd5c in ?? ()
[Current thread is 1 (LWP 4309)]
(gdb) list
No symbol table is loaded. Use the "file" command.
(gdb)
i check if i can careat a a debug build.
@addaleax ok building a debug version and then give you the core dump gdb info.
i cannot build a debug nodejs on arm . damn it.
trying hacking.
It was the same issue for OpenWrt x86_64.
# ./Release/node --version
v10.5.0
# ./Release/node /usr/bin/npm --version
./Release/node[6009]: ../src/node_platform.cc:262:std::shared_ptr<node::PerIsolatePlatformData> node::NodePlatform::ForIsolate(v8::Isolate*): Assertion `data' failed.
Aborted
# ./Debug/node g /usr/bin/npm --version
#
# Fatal error in ../deps/v8/src/allocation.cc, line 237
# Debug check failed: result.
#
#
#
#FailureMessage Object: 0x7fff6746e458Illegal instruction
# gdb --args ./Debug/node g /usr/bin/npm --version
GNU gdb (GDB) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-openwrt-linux".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./Debug/node...done.
(gdb) b ../deps/v8/src/allocation.cc:237
Breakpoint 1 at 0x9ce640: file ../deps/v8/src/allocation.cc, line 237.
(gdb) r
Starting program: /mnt/node-v10.5.0/out/Debug/node g /usr/bin/npm --version
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
[New LWP 6244]
[New LWP 6245]
[New LWP 6246]
[New LWP 6247]
Thread 1 "node" hit Breakpoint 1, v8::internal::VirtualMemory::SetPermissions (this=this@entry=0x7fffffffe630,
address=address@entry=0x3e0f75c80000, size=size@entry=524288,
access=access@entry=v8::PageAllocator::kReadWrite) at ../deps/v8/src/allocation.cc:237
237 DCHECK(result);
(gdb) c
Continuing.
Thread 1 "node" hit Breakpoint 1, v8::internal::VirtualMemory::SetPermissions (this=this@entry=0x7fffffffe630,
address=address@entry=0x2f49eff80000, size=size@entry=524288,
access=access@entry=v8::PageAllocator::kReadWrite) at ../deps/v8/src/allocation.cc:237
237 DCHECK(result);
<cut>
(gdb) c
Continuing.
Thread 1 "node" hit Breakpoint 1, v8::internal::VirtualMemory::SetPermissions (this=this@entry=0x1b00628,
address=address@entry=0x2bd19eb03000, size=size@entry=4096,
access=access@entry=v8::PageAllocator::kNoAccess) at ../deps/v8/src/allocation.cc:237
237 DCHECK(result);
(gdb) c
Continuing.
#
# Fatal error in ../deps/v8/src/allocation.cc, line 237
# Debug check failed: result.
#
#
#
#FailureMessage Object: 0x7fffffffd288
Thread 1 "node" received signal SIGILL, Illegal instruction.
v8::base::OS::Abort () at ../deps/v8/src/base/platform/platform-posix.cc:381
381 V8_IMMEDIATE_CRASH();
# gdb --args ./Debug/node g /usr/bin/npm --version
GNU gdb (GDB) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-openwrt-linux".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./Debug/node...done.
(gdb) b ../deps/v8/src/allocation.cc:233
Breakpoint 1 at 0x9ce61a: file ../deps/v8/src/allocation.cc, line 233.
(gdb) r
Starting program: /mnt/node-v10.5.0/out/Debug/node g /usr/bin/npm --version
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
[New LWP 7805]
[New LWP 7806]
[New LWP 7807]
[New LWP 7808]
Thread 1 "node" hit Breakpoint 1, v8::internal::VirtualMemory::SetPermissions (this=this@entry=0x7fffffffe630,
address=address@entry=0x21faf7880000, size=size@entry=524288,
access=access@entry=v8::PageAllocator::kReadWrite) at ../deps/v8/src/allocation.cc:234
234 PageAllocator::Permission access) {
(gdb) c
Continuing.
Thread 1 "node" hit Breakpoint 1, v8::internal::VirtualMemory::SetPermissions (this=this@entry=0x7fffffffe630,
address=address@entry=0x3e5b11680000, size=size@entry=524288,
access=access@entry=v8::PageAllocator::kReadWrite) at ../deps/v8/src/allocation.cc:234
234 PageAllocator::Permission access) {
(gdb) c
Continuing.
cThread 1 "node" hit Breakpoint 1, v8::internal::VirtualMemory::SetPermissions (this=this@entry=0x7fffffffe770,
address=0x2ec8e38d4000, size=size@entry=32768, access=access@entry=v8::PageAllocator::kReadWrite)
at ../deps/v8/src/allocation.cc:234
234 PageAllocator::Permission access) {
(gdb) c
Continuing.
Thread 1 "node" hit Breakpoint 1, v8::internal::VirtualMemory::SetPermissions (this=this@entry=0x7fffffffe4b0,
address=address@entry=0x372fc0380000, size=size@entry=524288,
access=access@entry=v8::PageAllocator::kReadWrite) at ../deps/v8/src/allocation.cc:234
234 PageAllocator::Permission access) {
(gdb) c
Continuing.
Thread 1 "node" hit Breakpoint 1, v8::internal::VirtualMemory::SetPermissions (this=this@entry=0x7fffffffe4b0,
address=address@entry=0x3b06e0180000, size=size@entry=524288,
access=access@entry=v8::PageAllocator::kReadWrite) at ../deps/v8/src/allocation.cc:234
234 PageAllocator::Permission access) {
(gdb) c
Continuing.
Thread 1 "node" hit Breakpoint 1, v8::internal::VirtualMemory::SetPermissions (this=this@entry=0x1b00628,
address=address@entry=0x5723b500000, size=size@entry=12288,
access=access@entry=v8::PageAllocator::kReadWrite) at ../deps/v8/src/allocation.cc:234
234 PageAllocator::Permission access) {
(gdb) c
Continuing.
Thread 1 "node" hit Breakpoint 1, v8::internal::VirtualMemory::SetPermissions (this=this@entry=0x1b00628,
address=address@entry=0x5723b503000, size=size@entry=4096,
access=access@entry=v8::PageAllocator::kNoAccess) at ../deps/v8/src/allocation.cc:234
234 PageAllocator::Permission access) {
(gdb) s
235 CHECK(InVM(address, size));
(gdb) s
v8::internal::VirtualMemory::InVM (size=<optimized out>, address=<optimized out>, this=<optimized out>)
at ../deps/v8/src/allocation.h:203
203 return (reinterpret_cast<uintptr_t>(address_) <=
(gdb) s
v8::internal::VirtualMemory::SetPermissions (this=this@entry=0x1b00628, address=address@entry=0x5723b503000,
size=size@entry=4096, access=access@entry=v8::PageAllocator::kNoAccess) at ../deps/v8/src/allocation.cc:234
234 PageAllocator::Permission access) {
(gdb) s
235 CHECK(InVM(address, size));
(gdb) s
v8::internal::VirtualMemory::InVM (size=4096, address=0x5723b503000, this=0x1b00628)
at ../deps/v8/src/allocation.h:204
204 reinterpret_cast<uintptr_t>(address)) &&
(gdb) s
205 ((reinterpret_cast<uintptr_t>(address_) + size_) >=
(gdb) s
206 (reinterpret_cast<uintptr_t>(address) + size));
(gdb) s
204 reinterpret_cast<uintptr_t>(address)) &&
(gdb) s
v8::internal::VirtualMemory::SetPermissions (this=this@entry=0x1b00628, address=address@entry=0x5723b503000,
size=size@entry=4096, access=access@entry=v8::PageAllocator::kNoAccess) at ../deps/v8/src/allocation.cc:236
236 bool result = v8::internal::SetPermissions(address, size, access);
(gdb) s
v8::internal::SetPermissions (address=0x5723b503000, size=4096, access=v8::PageAllocator::kNoAccess)
at ../deps/v8/src/allocation.cc:188
188 PageAllocator::Permission access) {
(gdb) s
189 return GetPageAllocator()->SetPermissions(address, size, access);
(gdb) s
v8::internal::(anonymous namespace)::GetPageAllocator () at ../deps/v8/src/allocation.cc:61
61 v8::PageAllocator* GetPageAllocator() { return page_allocator.Get(); }
(gdb) s
v8::base::LazyInstanceImpl<v8::PageAllocator*, v8::base::StaticallyAllocatedInstanceTrait<v8::PageAllocator*>, v8::internal::(anonymous namespace)::InitializePageAllocator, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::PageAllocator*> >::Get (this=0x1a72500 <v8::internal::(anonymous namespace)::page_allocator>)
at ../deps/v8/src/allocation.cc:61
61 v8::PageAllocator* GetPageAllocator() { return page_allocator.Get(); }
(gdb) s
v8::base::LazyInstanceImpl<v8::PageAllocator*, v8::base::StaticallyAllocatedInstanceTrait<v8::PageAllocator*>, v8::internal::(anonymous namespace)::InitializePageAllocator, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::PageAllocator*> >::Init (this=0x1a72500 <v8::internal::(anonymous namespace)::page_allocator>)
at ../deps/v8/src/allocation.cc:61
61 v8::PageAllocator* GetPageAllocator() { return page_allocator.Get(); }
(gdb) s
v8::base::ThreadSafeInitOnceTrait::Init<void (*)(void*), void*> (
storage=0x1a72508 <v8::internal::(anonymous namespace)::page_allocator+8>,
function=0x9ce1c3 <v8::base::LazyInstanceImpl<v8::PageAllocator*, v8::base::StaticallyAllocatedInstanceTrait<v8::PageAllocator*>, v8::internal::(anonymous namespace)::InitializePageAllocator, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::PageAllocator*> >::InitInstance(void*)>,
once=0x1a72500 <v8::internal::(anonymous namespace)::page_allocator>) at ../deps/v8/src/allocation.cc:61
61 v8::PageAllocator* GetPageAllocator() { return page_allocator.Get(); }
(gdb) s
v8::base::CallOnce<void> (arg=0x1a72508 <v8::internal::(anonymous namespace)::page_allocator+8>,
init_func=0x9ce1c3 <v8::base::LazyInstanceImpl<v8::PageAllocator*, v8::base::StaticallyAllocatedInstanceTrait<v8::PageAllocator*>, v8::internal::(anonymous namespace)::InitializePageAllocator, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::PageAllocator*> >::InitInstance(void*)>,
once=0x1a72500 <v8::internal::(anonymous namespace)::page_allocator>) at ../deps/v8/src/allocation.cc:61
61 v8::PageAllocator* GetPageAllocator() { return page_allocator.Get(); }
(gdb) s
v8::base::Acquire_Load (ptr=0x1a72500 <v8::internal::(anonymous namespace)::page_allocator>)
at ../deps/v8/src/base/atomicops_internals_portable.h:172
172 return __atomic_load_n(ptr, __ATOMIC_ACQUIRE);
(gdb) s
v8::base::CallOnce<void> (arg=0x1a72508 <v8::internal::(anonymous namespace)::page_allocator+8>,
init_func=0x9ce1c3 <v8::base::LazyInstanceImpl<v8::PageAllocator*, v8::base::StaticallyAllocatedInstanceTrait<v8::PageAllocator*>, v8::internal::(anonymous namespace)::InitializePageAllocator, v8::base::ThreadSafeInitOnceTrait, v8::base::LeakyInstanceTrait<v8::PageAllocator*> >::InitInstance(void*)>,
once=0x1a72500 <v8::internal::(anonymous namespace)::page_allocator>) at ../deps/v8/src/base/once.h:97
97 if (Acquire_Load(once) != ONCE_STATE_DONE) {
(gdb) s
v8::internal::(anonymous namespace)::GetPageAllocator () at ../deps/v8/src/allocation.cc:61
61 v8::PageAllocator* GetPageAllocator() { return page_allocator.Get(); }
(gdb) s
v8::internal::SetPermissions (address=0x5723b503000, size=4096, access=v8::PageAllocator::kNoAccess)
at ../deps/v8/src/allocation.cc:190
190 }
(gdb) s
189 return GetPageAllocator()->SetPermissions(address, size, access);
(gdb) s
190 }
(gdb) s
189 return GetPageAllocator()->SetPermissions(address, size, access);
(gdb) s
v8::base::PageAllocator::SetPermissions (
this=0x1a59fa8 <v8::internal::(anonymous namespace)::InitializePageAllocator::Construct(void*)::default_allocator>, address=0x5723b503000, size=4096, access=v8::PageAllocator::kNoAccess)
at ../deps/v8/src/base/page-allocator.cc:58
58 PageAllocator::Permission access) {
(gdb) s
60 address, size, static_cast<base::OS::MemoryPermission>(access));
(gdb) s
v8::base::OS::SetPermissions (address=0x5723b503000, size=4096,
access=v8::base::OS::MemoryPermission::kNoAccess) at ../deps/v8/src/base/platform/platform-posix.cc:346
346 bool OS::SetPermissions(void* address, size_t size, MemoryPermission access) {
(gdb)
please @addaleax let us know if this is good for you to understand what is going on:
https://github.com/nodejs/node/issues/21562#issuecomment-402031003
@addaleax do you think 10.6 is fixing this update?
@nxhack This does not look like the same crash reported originally here? Also, for your bug, running the code under strace might give more helpful information if that’s possible, or stepping through a call that contains an actual crash
@addaleax
Since v10.6.0 was released, first I verified with OpenWrt HEAD. It is working well.
root@OpenWrt:~# uname -a
Linux OpenWrt 4.14.53 #0 SMP Thu Jul 5 14:17:06 2018 x86_64 GNU/Linux
root@OpenWrt:~# node --version
v10.6.0
root@OpenWrt:~# npm --version
6.1.0
root@OpenWrt:~# npm install yarn
npm info it worked if it ends with ok
npm info using [email protected]
npm info using [email protected]
npm http fetch GET 304 https://registry.npmjs.org/yarn 207ms (from cache)
<SNIP>
+ [email protected]
updated 1 package and audited 1 package in 1.528s
found 0 vulnerabilities
npm timing npm Completed in 2063ms
npm info ok
I will test v10.6.0 on LEDE(openwrt)-17.01.x environment. It will take some time. please wait a moment.
@addaleax fwiw i recently ran into a similar issue in my own runtime where v8 was calling into the platform (specifically GetBackgroundTaskRunner) before Isolate::New returns, and therefore before the isolate can be registered with the platform. my solution was to auto-register an isolate with my platform if it doesn't exist when isolate data is needed.
it might be that LEDE will not be supported on NodeJs 10.5 or above, it is to much hassle and OpenWrt is almost opening the stable doors.
@devsnek Are you by any chance using a V8 version that is newer than Node’s? You’d be interested in something like https://github.com/v8/node/pull/71 for your runtime then (but it doesn’t have anything to do with this bug, I think)
@addaleax
An error occurred with LEDE - 17.01.4 and v10.6.0.
(LEDE Reboot 17.01.4 r3560-79f57e422d x86/64)
root@LEDE:~# uname -a
Linux LEDE 4.4.92 #0 SMP Tue Oct 17 17:46:20 2017 x86_64 GNU/Linux
root@LEDE:~# /usr/bin/node --version
v10.6.0
root@LEDE:~# /usr/bin/node /usr/bin/npm --version
/usr/bin/node[2778]: ../src/node_platform.cc:262:std::shared_ptr<node::PerIsolatePlatformData> node::NodePlatform::ForIsolate(v8::Isolate*): Assertion `data' failed.
Aborted
root@LEDE:~# strace -tt /usr/bin/node /usr/bin/npm --version
02:10:30.074514 execve("/usr/bin/node", ["/usr/bin/node", "/usr/bin/npm", "--version"], [/* 12 vars */]) = 0
02:10:30.075709 arch_prctl(ARCH_SET_FS, 0x7f25a2372b48) = 0
02:10:30.076520 set_tid_address(0x7f25a2372b80) = 2797
02:10:30.077213 open("/etc/ld-musl-x86_64.path", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
02:10:30.077864 open("/lib/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
02:10:30.078509 open("/usr/local/lib/libz.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
02:10:30.079121 open("/usr/lib/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
02:10:30.079317 fcntl(3, F_SETFD, FD_CLOEXEC) = 0
02:10:30.079376 fstat(3, {st_mode=S_IFREG|0755, st_size=73731, ...}) = 0
02:10:30.079452 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0e\33\0\0\0\0\0\0"..., 960) = 960
02:10:30.079513 mmap(NULL, 2174976, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x7f25a1ef4000
02:10:30.079571 mmap(0x7f25a2105000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x11000) = 0x7f25a2105000
02:10:30.079648 close(3) = 0
02:10:30.079700 open("/lib/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
02:10:30.079757 open("/usr/local/lib/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
02:10:30.080305 open("/usr/lib/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = 3
02:10:30.080423 fcntl(3, F_SETFD, FD_CLOEXEC) = 0
02:10:30.080499 fstat(3, {st_mode=S_IFREG|0755, st_size=1229203, ...}) = 0
02:10:30.080602 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\244\10\0\0\0\0\0"..., 960) = 960
02:10:30.080687 mmap(NULL, 3342336, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x7f25a1bc4000
02:10:30.080779 mmap(0x7f25a1ee3000, 69632, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x11f000) = 0x7f25a1ee3000
02:10:30.080886 mmap(0x7f25a1ef1000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f25a1ef1000
02:10:30.081000 close(3) = 0
02:10:30.081080 open("/lib/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3
02:10:30.081160 fcntl(3, F_SETFD, FD_CLOEXEC) = 0
02:10:30.081233 fstat(3, {st_mode=S_IFREG|0644, st_size=69672, ...}) = 0
02:10:30.081333 read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\335'\0\0\0\0\0\0"..., 960) = 960
02:10:30.081414 mmap(NULL, 2170880, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x7f25a19b2000
02:10:30.081507 mmap(0x7f25a1bc2000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x10000) = 0x7f25a1bc2000
02:10:30.081622 close(3) = 0
02:10:30.082057 mprotect(0x7f25a2105000, 4096, PROT_READ) = 0
02:10:30.087314 mprotect(0x7f25a1ee3000, 53248, PROT_READ) = 0
02:10:30.088280 mprotect(0x7f25a1bc2000, 4096, PROT_READ) = 0
02:10:30.088981 mprotect(0x7f25a236f000, 4096, PROT_READ) = 0
02:10:30.090149 mprotect(0x1797000, 8192, PROT_READ) = 0
02:10:30.090976 brk(NULL) = 0x2ecc000
02:10:30.091487 brk(0x2ede000) = 0x2ede000
02:10:30.092387 fstat(0, {st_mode=S_IFCHR|0622, st_rdev=makedev(136, 0), ...}) = 0
02:10:30.093027 fstat(1, {st_mode=S_IFCHR|0622, st_rdev=makedev(136, 0), ...}) = 0
02:10:30.093896 fstat(2, {st_mode=S_IFCHR|0622, st_rdev=makedev(136, 0), ...}) = 0
02:10:30.094586 rt_sigaction(SIGHUP, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.095449 rt_sigaction(SIGINT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.096166 rt_sigaction(SIGQUIT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.096412 rt_sigaction(SIGILL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.096764 rt_sigaction(SIGTRAP, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097076 rt_sigaction(SIGABRT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097172 rt_sigaction(SIGBUS, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097235 rt_sigaction(SIGFPE, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097294 rt_sigaction(SIGUSR1, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097352 rt_sigaction(SIGSEGV, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097401 rt_sigaction(SIGUSR2, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097449 rt_sigaction(SIGPIPE, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097496 rt_sigaction(SIGALRM, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097545 rt_sigaction(SIGTERM, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097593 rt_sigaction(SIGSTKFLT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097640 rt_sigaction(SIGCHLD, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097688 rt_sigaction(SIGCONT, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097736 rt_sigaction(SIGTSTP, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097783 rt_sigaction(SIGTTIN, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097831 rt_sigaction(SIGTTOU, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097879 rt_sigaction(SIGURG, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097927 rt_sigaction(SIGXCPU, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.097974 rt_sigaction(SIGXFSZ, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.098022 rt_sigaction(SIGVTALRM, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.098070 rt_sigaction(SIGPROF, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.098118 rt_sigaction(SIGWINCH, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.098166 rt_sigaction(SIGIO, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.098214 rt_sigaction(SIGPWR, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.098262 rt_sigaction(SIGSYS, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.098311 rt_sigprocmask(SIG_UNBLOCK, [RT_1 RT_2], NULL, 8) = 0
02:10:30.098348 rt_sigaction(SIGINT, {sa_handler=0x8832d1, sa_mask=~[RTMIN RT_1 RT_2], sa_flags=SA_RESTORER|SA_RESETHAND, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.098400 rt_sigaction(SIGTERM, {sa_handler=0x8832d1, sa_mask=~[RTMIN RT_1 RT_2], sa_flags=SA_RESTORER|SA_RESETHAND, sa_restorer=0x7f25a214bb86}, NULL, 8) = 0
02:10:30.098452 prlimit64(0, RLIMIT_NOFILE, NULL, {rlim_cur=1024, rlim_max=4*1024}) = 0
02:10:30.098491 rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1 RT_2], [], 8) = 0
02:10:30.098527 rt_sigprocmask(SIG_BLOCK, ~[], NULL, 8) = 0
02:10:30.098560 prlimit64(0, RLIMIT_NOFILE, {rlim_cur=4*1024, rlim_max=4*1024}, NULL) = 0
02:10:30.098597 futex(0x7f25a2373048, FUTEX_WAKE_PRIVATE, 2147483647) = 0
02:10:30.098629 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
02:10:30.098666 clock_getres(CLOCK_MONOTONIC_COARSE, {tv_sec=0, tv_nsec=10000000}) = 0
02:10:30.098711 epoll_create1(EPOLL_CLOEXEC) = 3
02:10:30.098744 pipe2([4, 5], O_CLOEXEC) = 0
02:10:30.099597 write(5, "*", 1) = 1
02:10:30.099675 pipe2([6, 7], O_NONBLOCK|O_CLOEXEC) = 0
02:10:30.099887 eventfd2(0, EFD_CLOEXEC|EFD_NONBLOCK) = 8
02:10:30.099997 ioctl(0, FIOCLEX) = 0
02:10:30.100035 ioctl(1, FIOCLEX) = 0
02:10:30.100067 ioctl(2, FIOCLEX) = 0
02:10:30.100097 ioctl(3, FIOCLEX) = 0
02:10:30.100127 ioctl(4, FIOCLEX) = 0
02:10:30.100268 ioctl(5, FIOCLEX) = 0
02:10:30.100312 ioctl(6, FIOCLEX) = 0
02:10:30.100343 ioctl(7, FIOCLEX) = 0
02:10:30.100374 ioctl(8, FIOCLEX) = 0
02:10:30.100404 ioctl(9, FIOCLEX) = -1 EBADF (Bad file descriptor)
02:10:30.100436 ioctl(10, FIOCLEX) = -1 EBADF (Bad file descriptor)
02:10:30.100468 ioctl(11, FIOCLEX) = -1 EBADF (Bad file descriptor)
02:10:30.100499 ioctl(12, FIOCLEX) = -1 EBADF (Bad file descriptor)
02:10:30.100531 ioctl(13, FIOCLEX) = -1 EBADF (Bad file descriptor)
02:10:30.100562 ioctl(14, FIOCLEX) = -1 EBADF (Bad file descriptor)
02:10:30.100592 ioctl(15, FIOCLEX) = -1 EBADF (Bad file descriptor)
02:10:30.100623 ioctl(16, FIOCLEX) = -1 EBADF (Bad file descriptor)
02:10:30.100655 getuid() = 0
02:10:30.100681 geteuid() = 0
02:10:30.100707 getgid() = 0
02:10:30.100732 getegid() = 0
02:10:30.100759 getuid() = 0
02:10:30.100785 geteuid() = 0
02:10:30.100810 getgid() = 0
02:10:30.100835 getegid() = 0
02:10:30.100861 getuid() = 0
02:10:30.100886 geteuid() = 0
02:10:30.100912 getgid() = 0
02:10:30.100937 getegid() = 0
02:10:30.100962 getuid() = 0
02:10:30.100988 geteuid() = 0
02:10:30.101013 getgid() = 0
02:10:30.101038 getegid() = 0
02:10:30.101408 getuid() = 0
02:10:30.101482 geteuid() = 0
02:10:30.102197 getgid() = 0
02:10:30.102314 getegid() = 0
02:10:30.102373 getuid() = 0
02:10:30.102402 geteuid() = 0
02:10:30.102428 getgid() = 0
02:10:30.102454 getegid() = 0
02:10:30.102631 getuid() = 0
02:10:30.103230 geteuid() = 0
02:10:30.103918 getgid() = 0
02:10:30.104019 getegid() = 0
02:10:30.104098 prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
02:10:30.104144 rt_sigprocmask(SIG_UNBLOCK, [RT_1 RT_2], NULL, 8) = 0
02:10:30.104189 mmap(NULL, 8396800, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f25a11b0000
02:10:30.104233 mprotect(0x7f25a11b1000, 8392704, PROT_READ|PROT_WRITE) = 0
02:10:30.104544 clone(child_stack=0x7f25a19b1a88, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID|0x400000, parent_tidptr=0x7f25a19b1b20, tls=0x7f25a19b1ae8, child_tidptr=0x7f25a19b1b20) = 2798
02:10:30.104939 prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
02:10:30.105555 mmap(NULL, 8396800, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f25a09ae000
02:10:30.105631 mprotect(0x7f25a09af000, 8392704, PROT_READ|PROT_WRITE) = 0
02:10:30.105674 clone(child_stack=0x7f25a11afa88, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID|0x400000, parent_tidptr=0x7f25a11afb20, tls=0x7f25a11afae8, child_tidptr=0x7f25a11afb20) = 2799
02:10:30.105748 prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
02:10:30.105789 mmap(NULL, 8396800, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f25a01ac000
02:10:30.105830 mprotect(0x7f25a01ad000, 8392704, PROT_READ|PROT_WRITE) = 0
02:10:30.105865 clone(child_stack=0x7f25a09ada88, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID|0x400000, parent_tidptr=0x7f25a09adb20, tls=0x7f25a09adae8, child_tidptr=0x7f25a09adb20) = 2800
02:10:30.106210 prlimit64(0, RLIMIT_STACK, NULL, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
02:10:30.106270 mmap(NULL, 8396800, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f259f9aa000
02:10:30.106320 mprotect(0x7f259f9ab000, 8392704, PROT_READ|PROT_WRITE) = 0
02:10:30.106642 clone(child_stack=0x7f25a01aba88, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID|0x400000, parent_tidptr=0x7f25a01abb20, tls=0x7f25a01abae8, child_tidptr=0x7f25a01abb20) = 2801
02:10:30.106884 brk(0x2ee9000) = 0x2ee9000
02:10:30.106955 brk(0x2ef5000) = 0x2ef5000
02:10:30.107293 brk(0x2ef6000) = 0x2ef6000
02:10:30.107346 brk(0x2f01000) = 0x2f01000
02:10:30.107402 brk(0x2f11000) = 0x2f11000
02:10:30.107441 brk(0x2f21000) = 0x2f21000
02:10:30.107769 brk(0x2f23000) = 0x2f23000
02:10:30.107889 brk(0x2f24000) = 0x2f24000
02:10:30.108347 brk(0x2f25000) = 0x2f25000
02:10:30.108552 brk(0x2f26000) = 0x2f26000
02:10:30.108798 brk(0x2f27000) = 0x2f27000
02:10:30.109274 brk(0x2f28000) = 0x2f28000
02:10:30.109361 brk(0x2f29000) = 0x2f29000
02:10:30.109777 brk(0x2f2a000) = 0x2f2a000
02:10:30.109939 brk(0x2f2b000) = 0x2f2b000
02:10:30.110216 brk(0x2f2c000) = 0x2f2c000
02:10:30.110287 brk(0x2f2e000) = 0x2f2e000
02:10:30.110761 brk(0x2f2f000) = 0x2f2f000
02:10:30.111091 brk(0x2f30000) = 0x2f30000
02:10:30.111215 brk(0x2f31000) = 0x2f31000
02:10:30.111425 brk(0x2f32000) = 0x2f32000
02:10:30.113836 brk(0x2f33000) = 0x2f33000
02:10:30.116297 brk(0x2f34000) = 0x2f34000
02:10:30.116789 brk(0x2f37000) = 0x2f37000
02:10:30.119342 brk(0x2f38000) = 0x2f38000
02:10:30.122012 brk(0x2f39000) = 0x2f39000
02:10:30.122188 brk(0x2f3a000) = 0x2f3a000
02:10:30.122282 brk(0x2f3b000) = 0x2f3b000
02:10:30.122376 brk(0x2f3c000) = 0x2f3c000
02:10:30.122457 brk(0x2f3d000) = 0x2f3d000
02:10:30.122617 brk(0x2f3e000) = 0x2f3e000
02:10:30.122714 brk(0x2f3f000) = 0x2f3f000
02:10:30.123582 brk(0x2f40000) = 0x2f40000
02:10:30.123942 brk(0x2f41000) = 0x2f41000
02:10:30.124078 brk(0x2f42000) = 0x2f42000
02:10:30.124180 brk(0x2f43000) = 0x2f43000
02:10:30.124279 brk(0x2f44000) = 0x2f44000
02:10:30.124667 brk(0x2f45000) = 0x2f45000
02:10:30.125143 open("/usr/bin/node", O_RDONLY|O_CLOEXEC) = 9
02:10:30.125598 fcntl(9, F_SETFD, FD_CLOEXEC) = 0
02:10:30.125932 fstat(9, {st_mode=S_IFREG|0755, st_size=25202920, ...}) = 0
02:10:30.126044 read(9, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\2\0>\0\1\0\0\0\265L\206\0\0\0\0\0"..., 960) = 960
02:10:30.126122 mmap(0x400000, 20738048, PROT_READ|PROT_EXEC, MAP_PRIVATE, 9, 0) = 0x7f259e5e3000
02:10:30.126208 munmap(0x7f259e5e3000, 20738048) = 0
02:10:30.126476 close(9) = 0
02:10:30.126560 getpid() = 2797
02:10:30.126615 open("/dev/urandom", O_RDONLY|O_NOCTTY|O_NONBLOCK) = 9
02:10:30.126686 fstat(9, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 9), ...}) = 0
02:10:30.127175 poll([{fd=9, events=POLLIN}], 1, 10) = 1 ([{fd=9, revents=POLLIN}])
02:10:30.127394 read(9, "\5\2364\305m\347\235K\341K\264\4\326S\235\177\240\376\302E\257\215/_\375v\v\263i7\31\371", 32) = 32
02:10:30.127506 close(9) = 0
02:10:30.127826 getuid() = 0
02:10:30.127925 getpid() = 2797
02:10:30.128313 brk(0x2f46000) = 0x2f46000
02:10:30.128402 mmap(0x71b1c2f2000, 536870912, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x71b1c2f2000
02:10:30.128889 brk(0x2f48000) = 0x2f48000
02:10:30.129096 brk(0x2f49000) = 0x2f49000
02:10:30.129145 brk(0x2f4a000) = 0x2f4a000
02:10:30.129184 brk(0x2f4b000) = 0x2f4b000
02:10:30.129223 brk(0x2f4c000) = 0x2f4c000
02:10:30.129259 brk(0x2f4d000) = 0x2f4d000
02:10:30.129296 brk(0x2f4e000) = 0x2f4e000
02:10:30.129718 brk(0x2f4f000) = 0x2f4f000
02:10:30.129782 brk(0x2f50000) = 0x2f50000
02:10:30.129823 brk(0x2f51000) = 0x2f51000
02:10:30.129861 brk(0x2f52000) = 0x2f52000
02:10:30.129898 brk(0x2f53000) = 0x2f53000
02:10:30.130050 brk(0x2f54000) = 0x2f54000
02:10:30.130116 brk(0x2f55000) = 0x2f55000
02:10:30.130581 brk(0x2f56000) = 0x2f56000
02:10:30.130659 brk(0x2f57000) = 0x2f57000
02:10:30.130722 brk(0x2f58000) = 0x2f58000
02:10:30.130786 brk(0x2f59000) = 0x2f59000
02:10:30.130850 brk(0x2f5a000) = 0x2f5a000
02:10:30.130916 brk(0x2f5b000) = 0x2f5b000
02:10:30.130983 mmap(0x17d488a00000, 1044480, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x17d488a00000
02:10:30.131067 munmap(0x17d488a80000, 520192) = 0
02:10:30.131314 mprotect(0x17d488a00000, 524288, PROT_READ|PROT_WRITE) = 0
02:10:30.131826 mmap(0x187052780000, 1044480, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x187052780000
02:10:30.131924 munmap(0x187052800000, 520192) = 0
02:10:30.131984 mprotect(0x187052780000, 524288, PROT_READ|PROT_WRITE) = 0
02:10:30.132066 brk(0x2f5c000) = 0x2f5c000
02:10:30.132130 brk(0x2f5f000) = 0x2f5f000
02:10:30.132199 getpid() = 2797
02:10:30.132553 mmap(0x260808fad000, 49152, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x260808fad000
02:10:30.132650 mprotect(0x260808fb0000, 32768, PROT_READ|PROT_WRITE) = 0
02:10:30.132788 brk(0x2f60000) = 0x2f60000
02:10:30.133222 brk(0x2f61000) = 0x2f61000
02:10:30.133344 mmap(0xd43e2b80000, 1044480, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0xd43e2b80000
02:10:30.133430 munmap(0xd43e2c00000, 520192) = 0
02:10:30.133486 mprotect(0xd43e2b80000, 524288, PROT_READ|PROT_WRITE) = 0
02:10:30.133581 mmap(0x307d33580000, 1044480, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x307d33580000
02:10:30.133861 munmap(0x307d33600000, 520192) = 0
02:10:30.134272 mprotect(0x307d33580000, 524288, PROT_READ|PROT_WRITE) = 0
02:10:30.134368 brk(0x2f62000) = 0x2f62000
02:10:30.134495 brk(0x2f65000) = 0x2f65000
02:10:30.135070 brk(0x2f66000) = 0x2f66000
02:10:30.135316 brk(0x2f68000) = 0x2f68000
02:10:30.135824 brk(0x2f6c000) = 0x2f6c000
02:10:30.135934 brk(0x2f73000) = 0x2f73000
02:10:30.136073 mprotect(0x71b1c300000, 12288, PROT_READ|PROT_WRITE) = 0
02:10:30.136152 mprotect(0x71b1c303000, 4096, PROT_NONE) = 0
02:10:30.136443 madvise(0x71b1c303000, 4096, MADV_FREE) = -1 ENOSYS (Function not implemented)
02:10:30.141336 mprotect(0x71b1c300000, 12288, PROT_NONE) = 0
02:10:30.143468 madvise(0x71b1c300000, 12288, MADV_FREE) = -1 ENOSYS (Function not implemented)
02:10:30.143639 mmap(0x135c5b400000, 1044480, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x135c5b400000
02:10:30.143761 munmap(0x135c5b480000, 520192) = 0
02:10:30.143839 mprotect(0x135c5b400000, 524288, PROT_READ|PROT_WRITE) = 0
02:10:30.143942 mmap(0x33db71800000, 1044480, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x33db71800000
02:10:30.144472 munmap(0x33db71880000, 520192) = 0
02:10:30.144769 mprotect(0x33db71800000, 524288, PROT_READ|PROT_WRITE) = 0
02:10:30.148305 futex(0x7f25a09ad9b4, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.148675 futex(0x7f25a1bc3c6c, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.149292 futex(0x7f25a19b19b4, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.149741 futex(0x7f25a1bc3c6c, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.151396 futex(0x7f25a01ab9b4, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.151909 futex(0x7f25a1bc3c6c, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.152340 futex(0x7f25a11af9b4, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.152629 futex(0x7f25a1bc3c6c, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.152913 futex(0x2f5a414, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.155748 futex(0x7f25a09ad9b4, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.155857 futex(0x7f25a1bc3c6c, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.155947 futex(0x7f25a19b19b4, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.156016 futex(0x7f25a1bc3c6c, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.156094 futex(0x7f25a01ab9b4, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.156158 futex(0x7f25a1bc3c6c, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.156232 futex(0x7f25a11af9b4, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.156299 futex(0x7f25a1bc3c6c, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.156437 futex(0x7f25a09ad9b4, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.156502 futex(0x7f25a1bc3c6c, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.156570 futex(0x7f25a19b19b4, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.156633 futex(0x7f25a1bc3c6c, FUTEX_WAKE_PRIVATE, 1) = 1
02:10:30.156707 getpid() = 2797
02:10:30.156771 writev(2, [{iov_base="/usr/bin/node[2797]: ../src/node"..., iov_len=49}, {iov_base="std::shared_ptr<node::PerIsolate"..., iov_len=90}], 2/usr/bin/node[2797]: ../src/node_platform.cc:262:std::shared_ptr<node::PerIsolatePlatformData> node::NodePlatform::ForIsolate(v8::Isolate*)) = 139
02:10:30.156967 writev(2, [{iov_base=": Assertion `data' failed.\n", iov_len=27}, {iov_base=NULL, iov_len=0}], 2: Assertion `data' failed.
) = 27
02:10:30.157072 rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1 RT_2], [], 8) = 0
02:10:30.157148 gettid() = 2797
02:10:30.157196 tkill(2797, SIGABRT) = 0
02:10:30.157250 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
02:10:30.157317 --- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=2797, si_uid=0} ---
02:10:30.157750 +++ killed by SIGABRT +++
Aborted
root@LEDE:~#
02:10:30.136443 madvise(0x71b1c303000, 4096, MADV_FREE) = -1 ENOSYS (Function not implemented)
# CONFIG_ADVISE_SYSCALLS is not set
OK, I will verify.
@addaleax
LEDE-17.01.4 with CONFIG_ADVISE_SYSCALLS kernel option enabled.
root@LEDE:~# uname -a
Linux LEDE 4.4.92 #0 SMP Tue Oct 17 17:46:20 2017 x86_64 GNU/Linux
root@LEDE:~# node --version
v10.6.0
root@LEDE:~# npm --version
6.1.0
root@LEDE:~# npm install yarn
npm info it worked if it ends with ok
npm info using [email protected]
npm info using [email protected]
npm http fetch GET 200 https://registry.npmjs.org/yarn 341ms
npm http fetch GET 200 https://registry.npmjs.org/yarn/-/yarn-1.7.0.tgz 593ms
<SNIP>
npm http fetch POST 200 https://registry.npmjs.org/-/npm/v1/security/audits/quick 791ms
npm timing audit body Completed in 9ms
+ [email protected]
added 1 package and audited 1 package in 3.025s
found 0 vulnerabilities
npm timing npm Completed in 5552ms
npm info ok
root@LEDE:~#
In conclusion, Enable the CONFIG_ADVISE_SYSCALLS kernel option when using node.js v10.x on Linux.
@p3x-robot
make kernel_menuconfig
General setup --->
[*] Enable madvise/fadvise syscalls
@nxhack do i have to use the newer gcc and binutils or CONFIG_ADVISE_SYSCALLS=yes is enough?
@p3x-robot @nxhack I’m surprised that the lack of madvise is a real issue here. Can you try to confirm that the call site is ReclaimInaccessibleMemory in deps/v8/src/base/platform/platform-posix.cc? If so, what happens if you comment out the function body and replace it with return 0;?
@addaleax
OK. I will test it. Please give me a time.
@addaleax
ReclaimInaccessibleMemory has been called.
root@LEDE:/mnt/node-v10.6.0/out# gdb --args ./Debug/node /usr/bin/npm --version
GNU gdb (GDB) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-openwrt-linux".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./Debug/node...done.
(gdb) b ../deps/v8/src/base/platform/platform-posix.cc:146
Breakpoint 1 at 0x11153b8: file ../deps/v8/src/base/platform/platform-posix.cc, line 146.
(gdb) r
Starting program: /mnt/node-v10.6.0/out/Debug/node /usr/bin/npm --version
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
[New LWP 2294]
[New LWP 2295]
[New LWP 2296]
[New LWP 2297]
Thread 1 "node" hit Breakpoint 1, v8::base::OS::SetPermissions (address=0xd1d93d83000, size=4096,
access=v8::base::OS::MemoryPermission::kNoAccess) at ../deps/v8/src/base/platform/platform-posix.cc:353
353 ret = ReclaimInaccessibleMemory(address, size);
(gdb) c
Continuing.
#
# Fatal error in ../deps/v8/src/allocation.cc, line 237
# Debug check failed: result.
#
#
#
#FailureMessage Object: 0x7fffffffd298
Thread 1 "node" received signal SIGILL, Illegal instruction.
v8::base::OS::Abort () at ../deps/v8/src/base/platform/platform-posix.cc:381
381 V8_IMMEDIATE_CRASH();
(gdb)
@addaleax
ReclaimInaccessibleMemory function changed. worked.
root@LEDE:/mnt/node-v10.6.0-TEST/out# ./Release/node --version
v10.6.0
root@LEDE:/mnt/node-v10.6.0-TEST/out# ./Release/node /usr/bin/npm --version
6.1.0
root@LEDE:/mnt/node-v10.6.0-TEST/out# ./Release/node /usr/bin/npm install yarn
npm info it worked if it ends with ok
npm info using [email protected]
npm info using [email protected]
npm http fetch GET 200 https://registry.npmjs.org/yarn 372ms
<SNIP>
npm timing audit submit Completed in 888ms
npm http fetch POST 200 https://registry.npmjs.org/-/npm/v1/security/audits/quick 889ms
npm timing audit body Completed in 4ms
+ [email protected]
added 1 package and audited 1 package in 3.011s
found 0 vulnerabilities
npm timing npm Completed in 5326ms
npm info ok
@nxhack Can you check that this works too? If so, I’d suggest that either you or me will try to patch V8 with it:
diff --git a/deps/v8/src/base/platform/platform-posix.cc b/deps/v8/src/base/platform/platform-posix.cc
index fee67589b6b4..ce8b1d2ce573 100644
--- a/deps/v8/src/base/platform/platform-posix.cc
+++ b/deps/v8/src/base/platform/platform-posix.cc
@@ -154,6 +154,8 @@ int ReclaimInaccessibleMemory(void* address, size_t size) {
#else
int ret = madvise(address, size, MADV_FREE);
#endif
+ if (ret != 0 && errno == ENOSYS)
+ return 0; // madvise is not available on all platforms.
if (ret != 0 && errno == EINVAL) {
// MADV_FREE only works on Linux 4.5+ . If request failed, retry with older
// MADV_DONTNEED . Note that MADV_FREE being defined at compile time doesn't
@addaleax @nxhack does it mean we will not need any in the kernel? like newer gcc, binutils and the Enable madvise/fadvise syscalls settings? That would be totally perfect.
i suggest if @nxhack can hack it, then maybe we could put it into nodejs, is that possible?
@p3x-robot Yes, that would mean that we work around the kernel’s lack of madvise. I don’t think this should be a real issue, but we may just need for the V8 CL in that case.
Edit, V8 CL: https://chromium-review.googlesource.com/c/v8/v8/+/1131943
@addaleax @nxhack, when is rested, can best do it.
but, if too much patching for V8 :-1: , I will do it myself, to add to the kernel. dunno, which is the best, maybe @nxhack can give more options, how we should do it.
@addaleax
Edit, V8 CL: https://chromium-review.googlesource.com/c/v8/v8/+/1131943
Worked. LGTM
(vanilla) LEDE-17.01.4 (x86_64)
root@LEDE:/mnt/node-v10.6.0-v8-test/out# ./Release/node --version
v10.6.0
root@LEDE:/mnt/node-v10.6.0-v8-test/out# ./Release/node /usr/bin/npm --version
6.1.0
root@LEDE:/mnt/node-v10.6.0-v8-test/out# ./Release/node /usr/bin/npm install yarn
npm info it worked if it ends with ok
npm info using [email protected]
npm info using [email protected]
npm http fetch GET 200 https://registry.npmjs.org/yarn 260ms
npm http fetch GET 200 https://registry.npmjs.org/yarn/-/yarn-1.7.0.tgz 426ms
<SNIP>
+ [email protected]
added 1 package and audited 1 package in 2.695s
found 0 vulnerabilities
npm timing npm Completed in 4983ms
npm info ok
@p3x-robot
It applied to my openwrt custom node.js package repository. Please test.
@nxhack ok, building. No change, as i understand, the patch is in v8, not kernel, thanks, let you know the results, 15 hours
Linksys 3200ACM is working.
Testing D-LINK DIR860L B1, MIPS...
Testing D-LINK DIR860L B1, MIPS is confirmed working 10.6, we have threads in nodejs on a small router :) :1st_place_medal:
@addaleax should i close this? from the mips and arm is working perfectly.
@p3x-robot @nxhack If you want, we can backport that patch to the “official” Node.js 10 repository. But since you’re maintaining your own set of patches on top of Node anyway, that’s unnecessary, right?
@addaleax
I hope you will backport this patch.
Thank you.
guys, should i close this issue? looks like they do not backport this patch.
@p3x-robot It is taken in v11.0.0.
awesome, closed... thanks...
Most helpful comment
@addaleax
I hope you will backport this patch.
Thank you.