From d6a829fbeefdc289bcdac566dc234bf55380d4a6 Mon Sep 17 00:00:00 2001
From: William Hubbs <w.d.hubbs@gmail.com>
Date: Sat, 24 May 2025 14:21:24 -0500
Subject: [PATCH] pax marking

Rebased onto node-v24.18.1 for this overlay. Same change, byte for byte, as
files/nodejs-24.1.0-paxmarking.patch -- only the @@ line numbers and the
surrounding context lines were regenerated. Nothing was added, removed or
reworded in any + line.

Why a rebase was needed: node 24.18.1 inserted a new
['node_with_ltcg=="true" or enable_lto=="true" or enable_thin_lto=="true"', ...]
block into the mksnapshot target's 'conditions' list in tools/v8_gypfiles/v8.gyp.
That split the three context lines the last hunk anchored on, so the 24.1.0 file
applied there only "with fuzz 1". Fuzz is not a warning you can sit on: eapply
prints it and still returns SUCCESS (portage phase-helpers.sh __eapply_patch,
which greps the output for "with fuzz" and only echoes it), so a hunk that drifts
to the wrong site ships silently and fails at compile time instead. This copy
applies with --fuzz=0.

Verified at 24.18.1: applies with no fuzz and no offsets, and the patched
node.gyp and tools/v8_gypfiles/v8.gyp still parse as Python literals with
v8.gyp's mksnapshot now type=none depending on the renamed mksnapshot_u.

 node.gyp                 | 17 ++++++++++++++++-
 tools/v8_gypfiles/v8.gyp | 24 +++++++++++++++++++++++-
 2 files changed, 39 insertions(+), 2 deletions(-)

--- a/node.gyp
+++ b/node.gyp
@@ -457,6 +457,7 @@
       'src/node_webstorage.h',
     ],
     'node_mksnapshot_exec': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)node_mksnapshot<(EXECUTABLE_SUFFIX)',
+    'node_mksnapshot_u_exec': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)node_mksnapshot_u<(EXECUTABLE_SUFFIX)',
     'node_js2c_exec': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)node_js2c<(EXECUTABLE_SUFFIX)',
     'conditions': [
       ['GENERATOR == "ninja"', {
@@ -737,10 +738,24 @@
             ['node_snapshot_main!=""', {
               'actions': [
                 {
+                  'action_name': 'run_pax_mksnapshot',
+                  'inputs': [
+                    '<(node_mksnapshot_exec)',
+                  ],
+                  'outputs': [
+                    '<(node_mksnapshot_u_exec)',
+                  ],
+                  'action': [
+                    'bash',
+                    '-c',
+                    'mv <(node_mksnapshot_exec) <(node_mksnapshot_u_exec) && paxmark.sh m <(node_mksnapshot_u_exec)',
+                  ],
+                },
+                {
                   'action_name': 'node_mksnapshot',
                   'process_outputs_as_sources': 1,
                   'inputs': [
-                    '<(node_mksnapshot_exec)',
+                    '<(node_mksnapshot_u_exec)',
                     '<(node_snapshot_main)',
                   ],
                   'outputs': [
--- a/tools/v8_gypfiles/v8.gyp
+++ b/tools/v8_gypfiles/v8.gyp
@@ -9,6 +9,7 @@
     'v8_vector_stores%': 0,
     'v8_embed_script%': "",
     'mksnapshot_exec': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)mksnapshot<(EXECUTABLE_SUFFIX)',
+    'mksnapshot_u_exec': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)mksnapshot_u<(EXECUTABLE_SUFFIX)',
     'v8_os_page_size%': 0,
     'generate_bytecode_output_root': '<(SHARED_INTERMEDIATE_DIR)/generate-bytecode-output-root',
     'generate_bytecode_builtins_list_output': '<(generate_bytecode_output_root)/builtins-generated/bytecodes-builtins-list.h',
@@ -1760,7 +1761,7 @@
       ],
     },  # bytecode_builtins_list_generator
     {
-      'target_name': 'mksnapshot',
+      'target_name': 'mksnapshot_u',
       'type': 'executable',
       'dependencies': [
         'v8_base_without_compiler',
@@ -1814,6 +1815,27 @@
           },
         }],
       ],
+    },  # mksnapshot_u
+    {
+      'target_name': 'mksnapshot',
+      'type': 'none',
+      'dependencies': ['mksnapshot_u'],
+      'actions': [
+        {
+          'action_name': 'paxmark_mksnapshot',
+          'inputs': [
+            '<(mksnapshot_u_exec)',
+          ],
+          'outputs': [
+            '<(mksnapshot_exec)',
+          ],
+          'action': [
+            'bash',
+            '-c',
+            'cp <(mksnapshot_u_exec) <(mksnapshot_exec) && paxmark.sh m <(mksnapshot_exec)'
+          ],
+        },
+      ],
     },  # mksnapshot
     {
       'target_name': 'torque',
-- 
2.49.0

