-
-
Notifications
You must be signed in to change notification settings - Fork 15
Closed as not planned
Labels
Description
objcopy --add-section
works on Linux - https://man7.org/linux/man-pages/man1/objcopy.1.html.
After https://reviews.llvm.org/D66283 landed, llvm-objcopy
on macOS too started supporting this feature: https://llvm.org/docs/CommandGuide/llvm-objcopy.html#cmdoption-llvm-objcopy-add-section
This demo is using the Node.js binary that has been built from nodejs/node#45038 on macOS:
$ ls
index.js node
$ cat index.js
console.log('Hello, world!');
$ /usr/local/opt/llvm/bin/llvm-objcopy --add-section __POSTJECT,__NODE_JS_CODE=index.js node sea
$ ./sea
Hello, world!
Advantages:
- We can avoid maintaining any complex code that adds a new section into a binary and reuse existing tools.
- Much faster than the current state of postject.
$ /usr/bin/time /usr/local/opt/llvm/bin/llvm-objcopy --add-section __POSTJECT,__NODE_JS_CODE=index.js node sea 0.37 real 0.22 user 0.11 sys $ /usr/bin/time postject sea NODE_JS_CODE index.js 37.59 real 40.05 user 1.12 sys
- Possibly works on AIX also? I would need access to such a system to make sure.
Disadvantage:
objcopy
is present by default on Linux but users would have to download it manually on macOS along with other tools usingbrew install llvm
.
@nodejs/single-executable wdyt?
@bnoordhuis I'd also like to hear your thoughts on this since you were sharing some insights on the resource injection part in nodejs/node#45066.
tony-goovflowd