All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 1/3] webkitgtk: Reduce stack and heap sizes for jsc on musl
@ 2021-03-17 20:24 Khem Raj
  2021-03-17 20:24 ` [PATCH 2/3] webkitgtk: Add packageconfig to chose between size and speed Khem Raj
  2021-03-17 20:24 ` [PATCH 3/3] webkitgtk: enable strlen and stpcpy on musl/linux too Khem Raj
  0 siblings, 2 replies; 3+ messages in thread
From: Khem Raj @ 2021-03-17 20:24 UTC (permalink / raw)
  To: openembedded-core; +Cc: Khem Raj, Andrei Gherzan

Fixes

[YOCTO #14281]

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Cc: Andrei Gherzan <andrei@gherzan.com>
---
v2: Describe the patch and add links to upstream discussion

 .../webkitgtk/musl-lower-stack-usage.patch    | 74 +++++++++++++++++++
 meta/recipes-sato/webkit/webkitgtk_2.30.5.bb  |  1 +
 2 files changed, 75 insertions(+)
 create mode 100644 meta/recipes-sato/webkit/webkitgtk/musl-lower-stack-usage.patch

diff --git a/meta/recipes-sato/webkit/webkitgtk/musl-lower-stack-usage.patch b/meta/recipes-sato/webkit/webkitgtk/musl-lower-stack-usage.patch
new file mode 100644
index 0000000000..dc3a71d932
--- /dev/null
+++ b/meta/recipes-sato/webkit/webkitgtk/musl-lower-stack-usage.patch
@@ -0,0 +1,74 @@
+reduce thread stack and heap usage for javascriptcore on musl
+
+default sizes for musl are smaller compared to glibc, this matches
+to musl defaults, avoid stack overflow crashes in jscore
+
+This is based on Alpine Linux's patch based on suggestion from
+https://bugs.webkit.org/show_bug.cgi?id=187485
+
+Real solution would entail more as the suggestions to increase
+stack size via -Wl,-z,stack-size=N does not work fully and also
+setting DEFAULT_THREAD_STACK_SIZE_IN_KB alone is not enough either
+
+This patch only changes behavior when using musl, the defaults for
+glibc in OE remains same
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+
+--- a/Source/JavaScriptCore/runtime/OptionsList.h
++++ b/Source/JavaScriptCore/runtime/OptionsList.h
+@@ -75,6 +75,18 @@ constexpr bool enableWebAssemblyStreamin
+ // On instantiation of the first VM instance, the Options will be write protected
+ // and cannot be modified thereafter.
+ 
++#if OS(LINUX) && !defined(__GLIBC__)
++// non-glibc options on linux ( musl )
++constexpr unsigned jscMaxPerThreadStack = 128 * KB;
++constexpr unsigned jscSoftReservedZoneSize = 32 * KB;
++constexpr unsigned jscReservedZoneSize = 16 * KB;
++#else
++//default
++constexpr unsigned jscMaxPerThreadStack = 4 * MB;
++constexpr unsigned jscSoftReservedZoneSize = 128 * KB;
++constexpr unsigned jscReservedZoneSize = 64 * KB;
++#endif
++
+ #define FOR_EACH_JSC_OPTION(v)                                          \
+     v(Bool, useKernTCSM, defaultTCSMValue(), Normal, "Note: this needs to go before other options since they depend on this value.") \
+     v(Bool, validateOptions, false, Normal, "crashes if mis-typed JSC options were passed to the VM") \
+@@ -90,9 +102,9 @@ constexpr bool enableWebAssemblyStreamin
+     \
+     v(Bool, reportMustSucceedExecutableAllocations, false, Normal, nullptr) \
+     \
+-    v(Unsigned, maxPerThreadStackUsage, 5 * MB, Normal, "Max allowed stack usage by the VM") \
+-    v(Unsigned, softReservedZoneSize, 128 * KB, Normal, "A buffer greater than reservedZoneSize that reserves space for stringifying exceptions.") \
+-    v(Unsigned, reservedZoneSize, 64 * KB, Normal, "The amount of stack space we guarantee to our clients (and to interal VM code that does not call out to clients).") \
++    v(Unsigned, maxPerThreadStackUsage, jscMaxPerThreadStack, Normal, "Max allowed stack usage by the VM") \
++    v(Unsigned, softReservedZoneSize, jscSoftReservedZoneSize, Normal, "A buffer greater than reservedZoneSize that reserves space for stringifying exceptions.") \
++    v(Unsigned, reservedZoneSize, jscReservedZoneSize, Normal, "The amount of stack space we guarantee to our clients (and to interal VM code that does not call out to clients).") \
+     \
+     v(Bool, crashOnDisallowedVMEntry, ASSERT_ENABLED, Normal, "Forces a crash if we attempt to enter the VM when disallowed") \
+     v(Bool, crashIfCantAllocateJITMemory, false, Normal, nullptr) \
+@@ -601,7 +613,7 @@ public:
+     bool init(const char*);
+     bool isInRange(unsigned);
+     const char* rangeString() const { return (m_state > InitError) ? m_rangeString : s_nullRangeStr; }
+-    
++
+     void dump(PrintStream& out) const;
+ 
+ private:
+--- a/Source/WTF/wtf/Threading.h
++++ b/Source/WTF/wtf/Threading.h
+@@ -56,6 +56,10 @@
+ #include <array>
+ #endif
+ 
++#if OS(LINUX) && !defined(__GLIBC__)
++#define DEFAULT_THREAD_STACK_SIZE_IN_KB 128
++#endif
++
+ namespace WTF {
+ 
+ class AbstractLocker;
diff --git a/meta/recipes-sato/webkit/webkitgtk_2.30.5.bb b/meta/recipes-sato/webkit/webkitgtk_2.30.5.bb
index d0a41f48c7..36d33f550d 100644
--- a/meta/recipes-sato/webkit/webkitgtk_2.30.5.bb
+++ b/meta/recipes-sato/webkit/webkitgtk_2.30.5.bb
@@ -20,6 +20,7 @@ SRC_URI = "https://www.webkitgtk.org/releases/${BPN}-${PV}.tar.xz \
            file://include_xutil.patch \
            file://reduce-memory-overheads.patch \
            file://0001-Extend-atomics-check-to-include-1-byte-CAS-test.patch \
+           file://musl-lower-stack-usage.patch \
            "
 
 SRC_URI[sha256sum] = "7d0dab08e3c5ae07bec80b2822ef42e952765d5724cac86eb23999bfed5a7f1f"
-- 
2.31.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/3] webkitgtk: Add packageconfig to chose between size and speed
  2021-03-17 20:24 [PATCH v2 1/3] webkitgtk: Reduce stack and heap sizes for jsc on musl Khem Raj
@ 2021-03-17 20:24 ` Khem Raj
  2021-03-17 20:24 ` [PATCH 3/3] webkitgtk: enable strlen and stpcpy on musl/linux too Khem Raj
  1 sibling, 0 replies; 3+ messages in thread
From: Khem Raj @ 2021-03-17 20:24 UTC (permalink / raw)
  To: openembedded-core; +Cc: Khem Raj

This packageconfig when selected will use -Os -DNDEBUG instead of -O2
-DNDEBUG, which should generate smaller binaries and libs but perhaps at
the expense of some runtime performance, defaults are kept as it is

size reduction when enabled

--rwxr-xr-x root       root         23503680 ./usr/lib/libjavascriptcoregtk-4.0.so.18.17.13
+-rwxr-xr-x root       root         17536152 ./usr/lib/libjavascriptcoregtk-4.0.so.18.17.13
--rwxr-xr-x root       root         53314616 ./usr/lib/libwebkit2gtk-4.0.so.37.49.9
+-rwxr-xr-x root       root         40195672 ./usr/lib/libwebkit2gtk-4.0.so.37.49.9

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 meta/recipes-sato/webkit/webkitgtk_2.30.5.bb | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/meta/recipes-sato/webkit/webkitgtk_2.30.5.bb b/meta/recipes-sato/webkit/webkitgtk_2.30.5.bb
index 36d33f550d..ff4c496e2a 100644
--- a/meta/recipes-sato/webkit/webkitgtk_2.30.5.bb
+++ b/meta/recipes-sato/webkit/webkitgtk_2.30.5.bb
@@ -59,6 +59,7 @@ PACKAGECONFIG[libhyphen] = "-DUSE_LIBHYPHEN=ON,-DUSE_LIBHYPHEN=OFF,libhyphen"
 PACKAGECONFIG[woff2] = "-DUSE_WOFF2=ON,-DUSE_WOFF2=OFF,woff2"
 PACKAGECONFIG[openjpeg] = "-DUSE_OPENJPEG=ON,-DUSE_OPENJPEG=OFF,openjpeg"
 PACKAGECONFIG[systemd] = "-DUSE_SYSTEMD=ON,-DUSE_SYSTEMD=off,systemd"
+PACKAGECONFIG[reduce-size] = "-DCMAKE_BUILD_TYPE=MinSizeRel,-DCMAKE_BUILD_TYPE=Release,,"
 
 # webkitgtk is full of /usr/bin/env python, particular for generating docs
 do_configure[postfuncs] += "setup_python_link"
@@ -70,7 +71,6 @@ setup_python_link() {
 
 EXTRA_OECMAKE = " \
 		-DPORT=GTK \
-		-DCMAKE_BUILD_TYPE=Release \
 		${@bb.utils.contains('GI_DATA_ENABLED', 'True', '-DENABLE_INTROSPECTION=ON', '-DENABLE_INTROSPECTION=OFF', d)} \
 		${@bb.utils.contains('GTKDOC_ENABLED', 'True', '-DENABLE_GTKDOC=ON', '-DENABLE_GTKDOC=OFF', d)} \
 		-DENABLE_MINIBROWSER=ON \
-- 
2.31.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 3/3] webkitgtk: enable strlen and stpcpy on musl/linux too
  2021-03-17 20:24 [PATCH v2 1/3] webkitgtk: Reduce stack and heap sizes for jsc on musl Khem Raj
  2021-03-17 20:24 ` [PATCH 2/3] webkitgtk: Add packageconfig to chose between size and speed Khem Raj
@ 2021-03-17 20:24 ` Khem Raj
  1 sibling, 0 replies; 3+ messages in thread
From: Khem Raj @ 2021-03-17 20:24 UTC (permalink / raw)
  To: openembedded-core; +Cc: Khem Raj

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 .../webkitgtk/0001-Fix-build-with-musl.patch  | 36 +++++++++++++------
 1 file changed, 26 insertions(+), 10 deletions(-)

diff --git a/meta/recipes-sato/webkit/webkitgtk/0001-Fix-build-with-musl.patch b/meta/recipes-sato/webkit/webkitgtk/0001-Fix-build-with-musl.patch
index 6dcb52956c..a13b394fd9 100644
--- a/meta/recipes-sato/webkit/webkitgtk/0001-Fix-build-with-musl.patch
+++ b/meta/recipes-sato/webkit/webkitgtk/0001-Fix-build-with-musl.patch
@@ -11,11 +11,9 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
  Source/WTF/wtf/PlatformHave.h                  |  2 +-
  2 files changed, 6 insertions(+), 6 deletions(-)
 
-diff --git a/Source/JavaScriptCore/runtime/MachineContext.h b/Source/JavaScriptCore/runtime/MachineContext.h
-index c5052527..95ef98b5 100644
 --- a/Source/JavaScriptCore/runtime/MachineContext.h
 +++ b/Source/JavaScriptCore/runtime/MachineContext.h
-@@ -196,7 +196,7 @@ static inline void*& stackPointerImpl(mcontext_t& machineContext)
+@@ -196,7 +196,7 @@ static inline void*& stackPointerImpl(mc
  #error Unknown Architecture
  #endif
  
@@ -24,7 +22,7 @@ index c5052527..95ef98b5 100644
  
  #if CPU(X86)
      return reinterpret_cast<void*&>((uintptr_t&) machineContext.gregs[REG_ESP]);
-@@ -347,7 +347,7 @@ static inline void*& framePointerImpl(mcontext_t& machineContext)
+@@ -347,7 +347,7 @@ static inline void*& framePointerImpl(mc
  #error Unknown Architecture
  #endif
  
@@ -33,7 +31,7 @@ index c5052527..95ef98b5 100644
  
  // The following sequence depends on glibc's sys/ucontext.h.
  #if CPU(X86)
-@@ -498,7 +498,7 @@ static inline void*& instructionPointerImpl(mcontext_t& machineContext)
+@@ -498,7 +498,7 @@ static inline void*& instructionPointerI
  #error Unknown Architecture
  #endif
  
@@ -42,7 +40,7 @@ index c5052527..95ef98b5 100644
  
  // The following sequence depends on glibc's sys/ucontext.h.
  #if CPU(X86)
-@@ -656,7 +656,7 @@ inline void*& argumentPointer<1>(mcontext_t& machineContext)
+@@ -656,7 +656,7 @@ inline void*& argumentPointer<1>(mcontex
  #error Unknown Architecture
  #endif
  
@@ -51,7 +49,7 @@ index c5052527..95ef98b5 100644
  
  // The following sequence depends on glibc's sys/ucontext.h.
  #if CPU(X86)
-@@ -773,7 +773,7 @@ inline void*& llintInstructionPointer(mcontext_t& machineContext)
+@@ -773,7 +773,7 @@ inline void*& llintInstructionPointer(mc
  #error Unknown Architecture
  #endif
  
@@ -60,11 +58,9 @@ index c5052527..95ef98b5 100644
  
  // The following sequence depends on glibc's sys/ucontext.h.
  #if CPU(X86)
-diff --git a/Source/WTF/wtf/PlatformHave.h b/Source/WTF/wtf/PlatformHave.h
-index daca20fe..53eae6ba 100644
 --- a/Source/WTF/wtf/PlatformHave.h
 +++ b/Source/WTF/wtf/PlatformHave.h
-@@ -222,7 +222,7 @@
+@@ -202,7 +202,7 @@
  #define HAVE_HOSTED_CORE_ANIMATION 1
  #endif
  
@@ -73,3 +69,23 @@ index daca20fe..53eae6ba 100644
  #define HAVE_MACHINE_CONTEXT 1
  #endif
  
+--- a/Source/WebCore/xml/XPathGrammar.cpp
++++ b/Source/WebCore/xml/XPathGrammar.cpp
+@@ -966,7 +966,7 @@ int yydebug;
+ #if YYERROR_VERBOSE
+ 
+ # ifndef yystrlen
+-#  if defined __GLIBC__ && defined _STRING_H
++#  if defined __linux__ && defined _STRING_H
+ #   define yystrlen strlen
+ #  else
+ /* Return the length of YYSTR.  */
+@@ -989,7 +989,7 @@ yystrlen (yystr)
+ # endif
+ 
+ # ifndef yystpcpy
+-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
++#  if defined __linux__ && defined _STRING_H && defined _GNU_SOURCE
+ #   define yystpcpy stpcpy
+ #  else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-- 
2.31.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-03-17 20:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-17 20:24 [PATCH v2 1/3] webkitgtk: Reduce stack and heap sizes for jsc on musl Khem Raj
2021-03-17 20:24 ` [PATCH 2/3] webkitgtk: Add packageconfig to chose between size and speed Khem Raj
2021-03-17 20:24 ` [PATCH 3/3] webkitgtk: enable strlen and stpcpy on musl/linux too Khem Raj

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.