Accepting request 911247 from home:marxin:branches:GNOME:Factory

- Enable LTO by using upstream patch fix-lto.patch.

OBS-URL: https://build.opensuse.org/request/show/911247
OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/webkit2gtk3?expand=0&rev=310
This commit is contained in:
2021-08-13 15:47:12 +00:00
committed by Git OBS Bridge
parent cced590f65
commit ef8e48aabd
3 changed files with 102 additions and 1 deletions

96
fix-lto.patch Normal file
View File

@@ -0,0 +1,96 @@
From 2a6731b62bf3043d095cbb7dc5731d7764933bed Mon Sep 17 00:00:00 2001
From: Michael Catanzaro <mcatanzaro@gnome.org>
Date: Mon, 9 Aug 2021 10:53:05 +0000
Subject: [PATCH] Adding missing REFERENCED_FROM_ASM annotations to facilitate
LTO https://bugs.webkit.org/show_bug.cgi?id=228865
Patch by Michael Catanzaro <mcatanzaro@gnome.org> on 2021-08-09
Reviewed by Yusuke Suzuki.
When investigating why WebKitGTK fails to build with LTO (link-time optimization) enabled,
one of the GCC developers noticed that we are missing __attribute__ (("used")) on several
C++ functions declared in LLIntSlowPaths.h and WasmSlowPaths.h that are called only from
asm. Without this attribute, GCC assumes the functions are unused and drops them, then
linking fails because they really are used.
* llint/LLIntSlowPaths.h:
* wasm/WasmSlowPaths.h:
Canonical link: https://commits.webkit.org/240354@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@280770 268f45cc-cd09-0410-ab3c-d52691b4dbfc
---
Source/JavaScriptCore/ChangeLog | 16 ++++++++++++++++
Source/JavaScriptCore/llint/LLIntSlowPaths.h | 20 ++++++++++----------
Source/JavaScriptCore/wasm/WasmSlowPaths.h | 8 ++++----
3 files changed, 30 insertions(+), 14 deletions(-)
diff --git a/Source/JavaScriptCore/llint/LLIntSlowPaths.h b/Source/JavaScriptCore/llint/LLIntSlowPaths.h
index fbfd53cc551f..e20a0dfc6b87 100644
--- a/Source/JavaScriptCore/llint/LLIntSlowPaths.h
+++ b/Source/JavaScriptCore/llint/LLIntSlowPaths.h
@@ -36,15 +36,15 @@ struct ProtoCallFrame;
namespace LLInt {
-extern "C" SlowPathReturnType llint_trace_operand(CallFrame*, const Instruction*, int fromWhere, int operand);
-extern "C" SlowPathReturnType llint_trace_value(CallFrame*, const Instruction*, int fromWhere, VirtualRegister operand);
-extern "C" void llint_write_barrier_slow(CallFrame*, JSCell*) WTF_INTERNAL;
+extern "C" SlowPathReturnType llint_trace_operand(CallFrame*, const Instruction*, int fromWhere, int operand) REFERENCED_FROM_ASM;
+extern "C" SlowPathReturnType llint_trace_value(CallFrame*, const Instruction*, int fromWhere, VirtualRegister operand) REFERENCED_FROM_ASM;
+extern "C" void llint_write_barrier_slow(CallFrame*, JSCell*) REFERENCED_FROM_ASM WTF_INTERNAL;
#define LLINT_SLOW_PATH_DECL(name) \
extern "C" SlowPathReturnType llint_##name(CallFrame* callFrame, const Instruction* pc)
#define LLINT_SLOW_PATH_HIDDEN_DECL(name) \
- LLINT_SLOW_PATH_DECL(name) WTF_INTERNAL
+ LLINT_SLOW_PATH_DECL(name) REFERENCED_FROM_ASM WTF_INTERNAL
LLINT_SLOW_PATH_HIDDEN_DECL(trace_prologue);
LLINT_SLOW_PATH_HIDDEN_DECL(trace_prologue_function_for_call);
@@ -149,13 +149,13 @@ LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_log_shadow_chicken_tail);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_super_sampler_begin);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_super_sampler_end);
LLINT_SLOW_PATH_HIDDEN_DECL(slow_path_out_of_line_jump_target);
-extern "C" SlowPathReturnType llint_throw_stack_overflow_error(VM*, ProtoCallFrame*) WTF_INTERNAL;
-extern "C" SlowPathReturnType llint_slow_path_checkpoint_osr_exit(CallFrame* callFrame, EncodedJSValue unused) WTF_INTERNAL;
-extern "C" SlowPathReturnType llint_slow_path_checkpoint_osr_exit_from_inlined_call(CallFrame* callFrame, EncodedJSValue callResult) WTF_INTERNAL;
+extern "C" SlowPathReturnType llint_throw_stack_overflow_error(VM*, ProtoCallFrame*) REFERENCED_FROM_ASM WTF_INTERNAL;
+extern "C" SlowPathReturnType llint_slow_path_checkpoint_osr_exit(CallFrame* callFrame, EncodedJSValue unused) REFERENCED_FROM_ASM WTF_INTERNAL;
+extern "C" SlowPathReturnType llint_slow_path_checkpoint_osr_exit_from_inlined_call(CallFrame* callFrame, EncodedJSValue callResult) REFERENCED_FROM_ASM WTF_INTERNAL;
#if ENABLE(C_LOOP)
-extern "C" SlowPathReturnType llint_stack_check_at_vm_entry(VM*, Register*) WTF_INTERNAL;
+extern "C" SlowPathReturnType llint_stack_check_at_vm_entry(VM*, Register*) REFERENCED_FROM_ASM WTF_INTERNAL;
#endif
-extern "C" SlowPathReturnType llint_check_vm_entry_permission(VM*, ProtoCallFrame*) WTF_INTERNAL;
-extern "C" NO_RETURN_DUE_TO_CRASH void llint_crash() WTF_INTERNAL;
+extern "C" SlowPathReturnType llint_check_vm_entry_permission(VM*, ProtoCallFrame*) REFERENCED_FROM_ASM WTF_INTERNAL;
+extern "C" NO_RETURN_DUE_TO_CRASH void llint_crash() REFERENCED_FROM_ASM WTF_INTERNAL;
} } // namespace JSC::LLInt
diff --git a/Source/JavaScriptCore/wasm/WasmSlowPaths.h b/Source/JavaScriptCore/wasm/WasmSlowPaths.h
index 5b2b8f2895a1..7762118338a7 100644
--- a/Source/JavaScriptCore/wasm/WasmSlowPaths.h
+++ b/Source/JavaScriptCore/wasm/WasmSlowPaths.h
@@ -47,7 +47,7 @@ namespace LLInt {
extern "C" SlowPathReturnType slow_path_wasm_##name(CallFrame* callFrame, const Instruction* pc, Wasm::Instance* instance)
#define WASM_SLOW_PATH_HIDDEN_DECL(name) \
- WASM_SLOW_PATH_DECL(name) WTF_INTERNAL
+ WASM_SLOW_PATH_DECL(name) REFERENCED_FROM_ASM WTF_INTERNAL
#if ENABLE(WEBASSEMBLY_B3JIT)
WASM_SLOW_PATH_HIDDEN_DECL(prologue_osr);
@@ -84,9 +84,9 @@ WASM_SLOW_PATH_HIDDEN_DECL(memory_atomic_wait32);
WASM_SLOW_PATH_HIDDEN_DECL(memory_atomic_wait64);
WASM_SLOW_PATH_HIDDEN_DECL(memory_atomic_notify);
-extern "C" SlowPathReturnType slow_path_wasm_throw_exception(CallFrame*, const Instruction*, Wasm::Instance* instance, Wasm::ExceptionType) WTF_INTERNAL;
-extern "C" SlowPathReturnType slow_path_wasm_popcount(const Instruction* pc, uint32_t) WTF_INTERNAL;
-extern "C" SlowPathReturnType slow_path_wasm_popcountll(const Instruction* pc, uint64_t) WTF_INTERNAL;
+extern "C" SlowPathReturnType slow_path_wasm_throw_exception(CallFrame*, const Instruction*, Wasm::Instance* instance, Wasm::ExceptionType) REFERENCED_FROM_ASM WTF_INTERNAL;
+extern "C" SlowPathReturnType slow_path_wasm_popcount(const Instruction* pc, uint32_t) REFERENCED_FROM_ASM WTF_INTERNAL;
+extern "C" SlowPathReturnType slow_path_wasm_popcountll(const Instruction* pc, uint64_t) REFERENCED_FROM_ASM WTF_INTERNAL;
} } // namespace JSC::LLInt

View File

@@ -1,3 +1,8 @@
-------------------------------------------------------------------
Tue Aug 10 12:10:02 UTC 2021 - Martin Liška <mliska@suse.cz>
- Enable LTO by using upstream patch fix-lto.patch.
-------------------------------------------------------------------
Thu Aug 5 08:27:25 UTC 2021 - Yifan Jiang <yfjiang@suse.com>

View File

@@ -44,6 +44,7 @@ Source99: webkit2gtk3.keyring
# PATCH-FIX-OPENSUSE no-forced-sse.patch jengelh@iani.de -- cure execution of illegal instruction in i586 firefox.
Patch0: no-forced-sse.patch
Patch1: fix-lto.patch
BuildRequires: Mesa-libEGL-devel
BuildRequires: Mesa-libGL-devel
@@ -263,7 +264,6 @@ A small test browswer from webkit, useful for testing features.
%autosetup -p1 -n webkitgtk-%{version}
%build
%define _lto_cflags %{nil}
# Here we must muzzle our dog so it doesn't eat all the memory
max_link_jobs="%{?jobs:%{jobs}}"
max_compile_jobs="%{?jobs:%{jobs}}"