Bug 276806 - www/node20 fails to build
Summary: www/node20 fails to build
Status: New
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: amd64 Any
: --- Affects Only Me
Assignee: Po-Chuan Hsieh
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2024-02-03 14:49 UTC by Dirk Meyer
Modified: 2024-03-23 17:00 UTC (History)
0 users

See Also:
bugzilla: maintainer-feedback? (sunpoet)


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dirk Meyer freebsd_committer freebsd_triage 2024-02-03 14:49:56 UTC
FreeBSDD amd64 13.2-RELEASE-p8

Building www/node in a clean jail failed for me:
gmake[2]: *** [tools/v8_gypfiles/v8_snapshot.target.mk:17: 58270f8b0505af4affa2e23fbc35c3da4e229a39.intermediate] Trace/BPT trap (core dumped)


Reference:
https://github.com/nodejs/node/issues/40467


Workaround:
Disable Protection with
kern.elf64.allow_wx: Allow pages to be mapped simultaneously writable 

sysctl kern.elf64.allow_wx=1


Suggested Solution:
Please add an Option to pass "--nowrite_code_using_rwx" gto the build.
Comment 1 Po-Chuan Hsieh freebsd_committer freebsd_triage 2024-03-09 17:20:43 UTC
Does it work for you by adding the following 2 lines to www/node{18,20,21}/Makefile?

USES+=          elfctl
ELF_FEATURES=   +wxneeded:out/Release/node
Comment 2 Dirk Meyer freebsd_committer freebsd_triage 2024-03-10 12:29:13 UTC
I put this in Makefile

# make -C /usr/ports/www/node20 -V ELF_FEATURES
+wxneeded:out/Release/node

# make -C /usr/ports/www/node20 -V USES
compiler:c++11-lib gmake localbase pkgconfig python:build shebangfix tar:xz elfctl ssl

# make -C /usr/ports/www/node20 clean all

This still fails to build with the same error.

  touch ebb097dcd336e909c6cfb5eddaae20c88fbe777f.intermediate
  LD_LIBRARY_PATH=/usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/lib.host:/usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/lib.target:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd ../tools/v8_gypfiles; mkdir -p /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/obj.target/v8_snapshot/geni; "/usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot" --turbo_instruction_scheduling "--target_os=freebsd" "--target_arch=x64" --startup_src "/usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/obj.target/v8_snapshot/geni/snapshot.cc" --embedded_variant Default --embedded_src "/usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/obj.target/v8_snapshot/geni/embedded.S" --no-native-code-counters


#
# Fatal error in , line 0
# Check failed: 12 == (* __error()).
#
#
#
#FailureMessage Object: 0x824a4b150
==== C stack trace ===============================

    0x35b38a3 <v8::base::debug::StackTrace::StackTrace()+0x13> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x35b2d76 <v8::platform::(anonymous namespace)::PrintStackTrace()+0x26> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x35a6739 <V8_Fatal(char const*, ...)+0x139> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x35b0571 <v8::base::OS::SetPermissions(void*, unsigned long, v8::base::OS::MemoryPermission)+0x71> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x3016789 <v8::internal::MemoryAllocator::SetPermissionsOnExecutableMemoryChunk(v8::internal::VirtualMemory*, unsigned long, unsigned long, unsigned long)+0xf9> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x30164f8 <v8::internal::MemoryAllocator::AllocateAlignedMemory(unsigned long, unsigned long, unsigned long, v8::internal::AllocationSpace, v8::internal::Executability, void*, v8::internal::VirtualMemory*)+0xf8> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x30169a4 <v8::internal::MemoryAllocator::AllocateUninitializedChunkAt(v8::internal::BaseSpace*, unsigned long, v8::internal::Executability, unsigned long, v8::internal::PageSize)+0xe4> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x30171dd <v8::internal::MemoryAllocator::AllocatePage(v8::internal::MemoryAllocator::AllocationMode, v8::internal::Space*, v8::internal::Executability)+0xfd> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x302c2a9 <v8::internal::PagedSpaceBase::TryExpandImpl()+0x29> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x302d86c <v8::internal::PagedSpaceBase::TryExpand(int, v8::internal::AllocationOrigin)+0x1c> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x302d625 <v8::internal::PagedSpaceBase::RawRefillLabMain(int, v8::internal::AllocationOrigin)+0x555> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x302d0c1 <v8::internal::PagedSpaceBase::RefillLabMain(int, v8::internal::AllocationOrigin)+0x21> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x2f700fb <v8::internal::HeapAllocator::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment)+0x1eb> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x2f71030 <v8::internal::HeapAllocator::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment)+0x30> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x2f5ac50 <v8::internal::Factory::CodeBuilder::AllocateInstructionStream(bool)+0x40> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x2f5a6f7 <v8::internal::Factory::CodeBuilder::BuildInternal(bool)+0x297> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x2f5af1e <v8::internal::Factory::CodeBuilder::Build()+0xe> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x3c211cd <v8::internal::SetupIsolateDelegate::PopulateWithPlaceholders(v8::internal::Isolate*)+0x1cd> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x3c2182a <v8::internal::SetupIsolateDelegate::SetupBuiltinsInternal(v8::internal::Isolate*)+0x1a> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x2f1b9bd <v8::internal::Isolate::Init(v8::internal::SnapshotData*, v8::internal::SnapshotData*, v8::internal::SnapshotData*, bool)+0xe4d> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x2f1ab62 <v8::internal::Isolate::InitWithoutSnapshot()+0x12> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x2dcc24a <v8::SnapshotCreator::SnapshotCreator(v8::Isolate*, long const*, v8::StartupData const*)+0x9a> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
    0x33d8540 <v8::internal::CreateSnapshotDataBlobInternal(v8::SnapshotCreator::FunctionCodeHandling, char const*, v8::Isolate*)+0x40> at /usr/obj/ports/usr/ports/www/node20/work/node-v20.10.0/out/Release/mksnapshot
gmake[1]: *** [tools/v8_gypfiles/v8_snapshot.target.mk:17: ebb097dcd336e909c6cfb5eddaae20c88fbe777f.intermediate] Trace/BPT trap (core dumped)
gmake[1]: *** Deleting file 'ebb097dcd336e909c6cfb5eddaae20c88fbe777f.intermediate'
rm f31d87e1ac03551ea3d70f2b2c26cd1caf173070.intermediate 9d163ed03eaaf0782136e7ad06703554983a18a4.intermediate 03e2b96efc92aaafb71d075c6b4e1a6f901a111a.intermediate
gmake: *** [Makefile:134: node] Error 2
===> Compilation failed unexpectedly.
Comment 3 Po-Chuan Hsieh freebsd_committer freebsd_triage 2024-03-23 17:00:19 UTC
(In reply to Dirk Meyer from comment #2)

I got the same result by setting kern.elf64.allow_wx=0. And I read elfctl.mk again. IIUC, elfctl.mk can do nothing here since it runs after the build phase.