lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

commit bbce5fce72c18ba45d0e0250caf7ee300ac1aae1
parent 9125c3615f753daf4cef8c8e50e0daabfeca7ae0
Author: Matthias Schiffer <mschiffer@universe-factory.net>
Date:   Mon,  9 May 2016 16:21:57 +0200

node: fix undefined behaviour leading to broken code with GCC 6

Fixes segfaults occuring in the node host build when GCC 6 is used.

Backport of upstream commit 96198d5bc710a4e3ca49eeeb3b3fa7b8cb61547d.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>

Diffstat:
Alang/node/patches/004-gcc6-undefined-behaviour.patch | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 64 insertions(+), 0 deletions(-)

diff --git a/lang/node/patches/004-gcc6-undefined-behaviour.patch b/lang/node/patches/004-gcc6-undefined-behaviour.patch @@ -0,0 +1,64 @@ +diff --git a/deps/v8/src/heap/incremental-marking.cc b/deps/v8/src/heap/incremental-marking.cc +index 58eb0aa..b2b796f 100644 +--- a/deps/v8/src/heap/incremental-marking.cc ++++ b/deps/v8/src/heap/incremental-marking.cc +@@ -364,7 +364,7 @@ void IncrementalMarking::DeactivateIncrementalWriteBarrier() { + DeactivateIncrementalWriteBarrierForSpace(heap_->new_space()); + + LargePage* lop = heap_->lo_space()->first_page(); +- while (lop->is_valid()) { ++ while (LargePage::IsValid(lop)) { + SetOldSpacePageFlags(lop, false, false); + lop = lop->next_page(); + } +@@ -396,7 +396,7 @@ void IncrementalMarking::ActivateIncrementalWriteBarrier() { + ActivateIncrementalWriteBarrier(heap_->new_space()); + + LargePage* lop = heap_->lo_space()->first_page(); +- while (lop->is_valid()) { ++ while (LargePage::IsValid(lop)) { + SetOldSpacePageFlags(lop, true, is_compacting_); + lop = lop->next_page(); + } +diff --git a/deps/v8/src/heap/spaces-inl.h b/deps/v8/src/heap/spaces-inl.h +index c2c4d12..d63ee63 100644 +--- a/deps/v8/src/heap/spaces-inl.h ++++ b/deps/v8/src/heap/spaces-inl.h +@@ -155,7 +155,7 @@ Page* Page::Initialize(Heap* heap, MemoryChunk* chunk, Executability executable, + + bool PagedSpace::Contains(Address addr) { + Page* p = Page::FromAddress(addr); +- if (!p->is_valid()) return false; ++ if (!Page::IsValid(p)) return false; + return p->owner() == this; + } + +diff --git a/deps/v8/src/heap/spaces.cc b/deps/v8/src/heap/spaces.cc +index 0806b25..c0e109b 100644 +--- a/deps/v8/src/heap/spaces.cc ++++ b/deps/v8/src/heap/spaces.cc +@@ -2953,7 +2953,7 @@ LargePage* LargeObjectSpace::FindPage(Address a) { + if (e != NULL) { + DCHECK(e->value != NULL); + LargePage* page = reinterpret_cast<LargePage*>(e->value); +- DCHECK(page->is_valid()); ++ DCHECK(LargePage::IsValid(page)); + if (page->Contains(a)) { + return page; + } +diff --git a/deps/v8/src/heap/spaces.h b/deps/v8/src/heap/spaces.h +index 3461de3..e35c057 100644 +--- a/deps/v8/src/heap/spaces.h ++++ b/deps/v8/src/heap/spaces.h +@@ -278,9 +278,9 @@ class MemoryChunk { + // Only works for addresses in pointer spaces, not data or code spaces. + static inline MemoryChunk* FromAnyPointerAddress(Heap* heap, Address addr); + +- Address address() { return reinterpret_cast<Address>(this); } ++ static bool IsValid(MemoryChunk* chunk) { return chunk != nullptr; } + +- bool is_valid() { return address() != NULL; } ++ Address address() { return reinterpret_cast<Address>(this); } + + MemoryChunk* next_chunk() const { + return reinterpret_cast<MemoryChunk*>(base::Acquire_Load(&next_chunk_));