Skip to content
Snippets Groups Projects
Unverified Commit 340df0db authored by Matthias Schiffer's avatar Matthias Schiffer
Browse files

Fix build with GCC 6

Make pkg-config, mkimage and gcc build with GCC 6 as host compiler. Fix
miscompilation of node.

Fixes #755
parent 40d087de
No related branches found
No related tags found
No related merge requests found
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Sun, 8 May 2016 15:53:14 +0200
Subject: tools: pkg-config: fix build with GCC 6
Fixes the following error:
gdate.c: In function ‘g_date_strftime’:
gdate.c:2497:7: error: format not a string literal, format string not checked [-Werror=format-nonliteral]
tmplen = strftime (tmpbuf, tmpbufsize, locale_format, &tm);
^~~~~~
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
diff --git a/tools/pkg-config/patches/001-glib-gdate-suppress-string-format-literal-warning.patch b/tools/pkg-config/patches/001-glib-gdate-suppress-string-format-literal-warning.patch
new file mode 100644
index 0000000..6849299
--- /dev/null
+++ b/tools/pkg-config/patches/001-glib-gdate-suppress-string-format-literal-warning.patch
@@ -0,0 +1,18 @@
+--- a/glib/glib/gdate.c
++++ b/glib/glib/gdate.c
+@@ -2439,6 +2439,9 @@ win32_strftime_helper (const GDate *d,
+ *
+ * Returns: number of characters written to the buffer, or 0 the buffer was too small
+ */
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wformat-nonliteral"
++
+ gsize
+ g_date_strftime (gchar *s,
+ gsize slen,
+@@ -2549,3 +2552,5 @@ g_date_strftime (gchar *s,
+ return retval;
+ #endif
+ }
++
++#pragma GCC diagnostic pop
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Mon, 9 May 2016 00:16:38 +0200
Subject: toolchain: gcc: fix build with GCC 6
At least for GCC 4.8, which is used by most targets.
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
diff --git a/toolchain/gcc/patches/4.8-linaro/030-gcc-6-compile.patch b/toolchain/gcc/patches/4.8-linaro/030-gcc-6-compile.patch
new file mode 100644
index 0000000..c74f2aa
--- /dev/null
+++ b/toolchain/gcc/patches/4.8-linaro/030-gcc-6-compile.patch
@@ -0,0 +1,130 @@
+Upstream commit r233721
+
+diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
+index bd1c1d7..a0ea0d4 100644
+--- a/gcc/cp/Make-lang.in
++++ b/gcc/cp/Make-lang.in
+@@ -111,7 +111,7 @@ else
+ # deleting the $(srcdir)/cp/cfns.h file.
+ $(srcdir)/cp/cfns.h:
+ endif
+- gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L ANSI-C \
++ gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L C++ \
+ $(srcdir)/cp/cfns.gperf --output-file $(srcdir)/cp/cfns.h
+
+ #
+diff --git a/gcc/cp/cfns.gperf b/gcc/cp/cfns.gperf
+index 05ca753..d9b16b8 100644
+--- a/gcc/cp/cfns.gperf
++++ b/gcc/cp/cfns.gperf
+@@ -1,3 +1,5 @@
++%language=C++
++%define class-name libc_name
+ %{
+ /* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+
+@@ -16,14 +18,6 @@ for more details.
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+-#ifdef __GNUC__
+-__inline
+-#endif
+-static unsigned int hash (const char *, unsigned int);
+-#ifdef __GNUC__
+-__inline
+-#endif
+-const char * libc_name_p (const char *, unsigned int);
+ %}
+ %%
+ # The standard C library functions, for feeding to gperf; the result is used
+diff --git a/gcc/cp/cfns.h b/gcc/cp/cfns.h
+index c845ddf..65801d1 100644
+--- a/gcc/cp/cfns.h
++++ b/gcc/cp/cfns.h
+@@ -1,5 +1,5 @@
+-/* ANSI-C code produced by gperf version 3.0.3 */
+-/* Command-line: gperf -o -C -E -k '1-6,$' -j1 -D -N libc_name_p -L ANSI-C cfns.gperf */
++/* C++ code produced by gperf version 3.0.4 */
++/* Command-line: gperf -o -C -E -k '1-6,$' -j1 -D -N libc_name_p -L C++ --output-file cfns.h cfns.gperf */
+
+ #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+@@ -28,7 +28,7 @@
+ #error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
+ #endif
+
+-#line 1 "cfns.gperf"
++#line 3 "cfns.gperf"
+
+ /* Copyright (C) 2000-2014 Free Software Foundation, Inc.
+
+@@ -47,25 +47,18 @@ for more details.
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3. If not see
+ <http://www.gnu.org/licenses/>. */
+-#ifdef __GNUC__
+-__inline
+-#endif
+-static unsigned int hash (const char *, unsigned int);
+-#ifdef __GNUC__
+-__inline
+-#endif
+-const char * libc_name_p (const char *, unsigned int);
+ /* maximum key range = 391, duplicates = 0 */
+
+-#ifdef __GNUC__
+-__inline
+-#else
+-#ifdef __cplusplus
+-inline
+-#endif
+-#endif
+-static unsigned int
+-hash (register const char *str, register unsigned int len)
++class libc_name
++{
++private:
++ static inline unsigned int hash (const char *str, unsigned int len);
++public:
++ static const char *libc_name_p (const char *str, unsigned int len);
++};
++
++inline unsigned int
++libc_name::hash (register const char *str, register unsigned int len)
+ {
+ static const unsigned short asso_values[] =
+ {
+@@ -122,14 +115,8 @@ hash (register const char *str, register unsigned int len)
+ return hval + asso_values[(unsigned char)str[len - 1]];
+ }
+
+-#ifdef __GNUC__
+-__inline
+-#ifdef __GNUC_STDC_INLINE__
+-__attribute__ ((__gnu_inline__))
+-#endif
+-#endif
+ const char *
+-libc_name_p (register const char *str, register unsigned int len)
++libc_name::libc_name_p (register const char *str, register unsigned int len)
+ {
+ enum
+ {
+diff --git a/gcc/cp/except.c b/gcc/cp/except.c
+index 221971a..32340f5 100644
+--- a/gcc/cp/except.c
++++ b/gcc/cp/except.c
+@@ -1030,7 +1030,8 @@ nothrow_libfn_p (const_tree fn)
+ unless the system headers are playing rename tricks, and if
+ they are, we don't want to be confused by them. */
+ id = DECL_NAME (fn);
+- return !!libc_name_p (IDENTIFIER_POINTER (id), IDENTIFIER_LENGTH (id));
++ return !!libc_name::libc_name_p (IDENTIFIER_POINTER (id),
++ IDENTIFIER_LENGTH (id));
+ }
+
+ /* Returns nonzero if an exception of type FROM will be caught by a
+--
+1.7.1
+
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Mon, 9 May 2016 15:57:18 +0200
Subject: node: update to v4.4.4
While we're at it, also enable parallel builds.
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
diff --git a/lang/node/Makefile b/lang/node/Makefile
index 243c8a5..71cf55b 100644
--- a/lang/node/Makefile
+++ b/lang/node/Makefile
@@ -8,17 +8,21 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=node
-PKG_VERSION:=v0.12.7
+PKG_VERSION:=v4.4.4
PKG_RELEASE:=1
-PKG_SOURCE:=node-$(PKG_VERSION).tar.gz
+PKG_SOURCE:=node-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://nodejs.org/dist/${PKG_VERSION}
+PKG_MD5SUM:=1ad7915688df85f62a57f43860dc54c6
HOST_BUILD_DEPENDS:=python/host
PKG_BUILD_DEPENDS:=python/host
PKG_INSTALL:=1
PKG_USE_MIPS16:=0
+HOST_BUILD_PARALLEL:=1
+PKG_BUILD_PARALLEL:=1
+
PKG_MAINTAINER:=John Crispin <blogic@openwrt.org>
PKG_LICENSE:=
@@ -31,7 +35,7 @@ define Package/node
SUBMENU:=Node.js
TITLE:=Node.js is a platform built on Chrome's JavaScript runtime
URL:=http://nodejs.org/
- DEPENDS:=+libpthread +librt +libstdcpp +libopenssl +libuv
+ DEPENDS:=+libpthread +librt +libstdcpp +libopenssl +libuv +zlib
endef
define Package/node/description
diff --git a/lang/node/patches/001-hardfloat.patch b/lang/node/patches/001-hardfloat.patch
new file mode 100644
index 0000000..1bb2493
--- /dev/null
+++ b/lang/node/patches/001-hardfloat.patch
@@ -0,0 +1,12 @@
+diff --git a/deps/v8/src/base/cpu.cc b/deps/v8/src/base/cpu.cc
+index 4f58720..1f3071e 100644
+--- a/deps/v8/src/base/cpu.cc
++++ b/deps/v8/src/base/cpu.cc
+@@ -143,6 +143,7 @@ int __detect_fp64_mode(void) {
+ ".set push\n\t"
+ ".set noreorder\n\t"
+ ".set oddspreg\n\t"
++ ".set hardfloat\n\t"
+ "lui $t0, 0x3FF0\n\t"
+ "ldc1 $f0, %0\n\t"
+ "mtc1 $t0, $f1\n\t"
diff --git a/lang/node/patches/001-mips-no-fpu.patch b/lang/node/patches/001-mips-no-fpu.patch
deleted file mode 100644
index 5bf8142..0000000
--- a/lang/node/patches/001-mips-no-fpu.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- a/deps/v8/build/toolchain.gypi
-+++ b/deps/v8/build/toolchain.gypi
-@@ -50,10 +50,10 @@
- 'arm_test_noprobe%': 'off',
-
- # Similar to vfp but on MIPS.
-- 'v8_can_use_fpu_instructions%': 'true',
-+ 'v8_can_use_fpu_instructions%': 'false',
-
- # Similar to the ARM hard float ABI but on MIPS.
-- 'v8_use_mips_abi_hardfloat%': 'true',
-+ 'v8_use_mips_abi_hardfloat%': 'false',
-
- # Default arch variant for MIPS.
- 'mips_arch_variant%': 'r2',
diff --git a/lang/node/patches/002-addr_info.patch b/lang/node/patches/002-addr_info.patch
index 78225db..0aa02da 100644
--- a/lang/node/patches/002-addr_info.patch
+++ b/lang/node/patches/002-addr_info.patch
@@ -1,6 +1,6 @@
--- a/deps/uv/src/unix/getaddrinfo.c
+++ b/deps/uv/src/unix/getaddrinfo.c
-@@ -99,6 +99,7 @@
+@@ -99,6 +99,7 @@ static void uv__getaddrinfo_work(struct
int err;
req = container_of(w, uv_getaddrinfo_t, work_req);
diff --git a/lang/node/patches/003-path.patch b/lang/node/patches/003-path.patch
index 723fe9d..01a71c6 100644
--- a/lang/node/patches/003-path.patch
+++ b/lang/node/patches/003-path.patch
@@ -1,7 +1,7 @@
--- a/lib/module.js
+++ b/lib/module.js
-@@ -512,7 +512,8 @@
- var homeDir = process.env.HOME;
+@@ -453,7 +453,8 @@ Module._initPaths = function() {
+ homeDir = process.env.HOME;
}
- var paths = [path.resolve(process.execPath, '..', '..', 'lib', 'node')];
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Mon, 9 May 2016 16:21:57 +0200
Subject: 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>
diff --git a/lang/node/patches/004-gcc6-undefined-behaviour.patch b/lang/node/patches/004-gcc6-undefined-behaviour.patch
new file mode 100644
index 0000000..11b0132
--- /dev/null
+++ 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_));
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment