From 2261d1f51252e5e11276d1434cc5f6c641ef138b Mon Sep 17 00:00:00 2001 From: Nadav Har'El Date: Sun, 28 Jan 2018 16:55:52 +0200 Subject: [PATCH] node: fix compilation on gcc 7 There is a known bug compiling node 6.* on gcc 7: https://github.com/nodejs/node/pull/13574 This patch picks up a patch for upstream for fixing the compilation. Signed-off-by: Nadav Har'El --- node/GET | 2 +- node/{patch => dopatch} | 2 + node/gcc7.patch | 98 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) rename node/{patch => dopatch} (91%) create mode 100644 node/gcc7.patch diff --git a/node/GET b/node/GET index 79a3b2711..fa870dc6b 100755 --- a/node/GET +++ b/node/GET @@ -12,4 +12,4 @@ fi wget "https://github.com/nodejs/node/archive/v${1}.tar.gz" -O - | tar zxf - -./patch "$1" +./dopatch "$1" diff --git a/node/patch b/node/dopatch similarity index 91% rename from node/patch rename to node/dopatch index 0cd3747f1..bc82cc830 100755 --- a/node/patch +++ b/node/dopatch @@ -22,3 +22,5 @@ ed -s common.gypi << EOF ,s/'cflags':.*'-pthread'/&, '-fPIC'/ w EOF + +patch -p1 <../gcc7.patch diff --git a/node/gcc7.patch b/node/gcc7.patch new file mode 100644 index 000000000..c63d9e693 --- /dev/null +++ b/node/gcc7.patch @@ -0,0 +1,98 @@ +From 11c7e0164af7f6b33df13a658fc1c0effb502662 Mon Sep 17 00:00:00 2001 +From: Zuzana Svetlikova +Date: Fri, 9 Jun 2017 14:07:19 +0200 +Subject: [PATCH] v8: fix build errors with g++ 7 + +This is a local patch because upstream fixed it differently by moving +large chunks of code out of objects.h. We cannot easily back-port +those changes due to their size and invasiveness. + +Fixes: https://github.com/nodejs/node/issues/10388 +PR-URL: https://github.com/nodejs/node/pull/12392 +Backport-PR-URL: https://github.com/nodejs/node/pull/13574 +Reviewed-By: Anna Henningsen +Reviewed-By: Benjamin Gruenbaum +Reviewed-By: Daniel Bevenius +Reviewed-By: James M Snell +--- + deps/v8/src/objects-body-descriptors.h | 2 +- + deps/v8/src/objects-inl.h | 21 +++++++++++++++++++++ + deps/v8/src/objects.h | 20 ++++---------------- + 3 files changed, 26 insertions(+), 17 deletions(-) + +diff --git a/deps/v8/src/objects-body-descriptors.h b/deps/v8/src/objects-body-descriptors.h +index 91cb8883be8..a1c3634bd76 100644 +--- a/deps/v8/src/objects-body-descriptors.h ++++ b/deps/v8/src/objects-body-descriptors.h +@@ -99,7 +99,7 @@ class FixedBodyDescriptor final : public BodyDescriptorBase { + + template + static inline void IterateBody(HeapObject* obj, int object_size) { +- IterateBody(obj); ++ IterateBody(obj); + } + }; + +diff --git a/deps/v8/src/objects-inl.h b/deps/v8/src/objects-inl.h +index 11f4d7498d7..72208c2f00f 100644 +--- a/deps/v8/src/objects-inl.h ++++ b/deps/v8/src/objects-inl.h +@@ -36,6 +36,27 @@ + namespace v8 { + namespace internal { + ++template ++uint32_t HashTable::Hash(Key key) { ++ if (Shape::UsesSeed) { ++ return Shape::SeededHash(key, GetHeap()->HashSeed()); ++ } else { ++ return Shape::Hash(key); ++ } ++} ++ ++ ++template ++uint32_t HashTable::HashForObject(Key key, ++ Object* object) { ++ if (Shape::UsesSeed) { ++ return Shape::SeededHashForObject(key, GetHeap()->HashSeed(), object); ++ } else { ++ return Shape::HashForObject(key, object); ++ } ++} ++ ++ + PropertyDetails::PropertyDetails(Smi* smi) { + value_ = smi->value(); + } +diff --git a/deps/v8/src/objects.h b/deps/v8/src/objects.h +index d1632c9deb2..47b02dadcff 100644 +--- a/deps/v8/src/objects.h ++++ b/deps/v8/src/objects.h +@@ -3261,22 +3261,10 @@ class HashTableBase : public FixedArray { + template + class HashTable : public HashTableBase { + public: +- // Wrapper methods +- inline uint32_t Hash(Key key) { +- if (Shape::UsesSeed) { +- return Shape::SeededHash(key, GetHeap()->HashSeed()); +- } else { +- return Shape::Hash(key); +- } +- } +- +- inline uint32_t HashForObject(Key key, Object* object) { +- if (Shape::UsesSeed) { +- return Shape::SeededHashForObject(key, GetHeap()->HashSeed(), object); +- } else { +- return Shape::HashForObject(key, object); +- } +- } ++ // Wrapper methods. Defined in src/objects-inl.h ++ // to break a cycle with src/heap/heap.h. ++ inline uint32_t Hash(Key key); ++ inline uint32_t HashForObject(Key key, Object* object); + + // Returns a new HashTable object. + MUST_USE_RESULT static Handle New(