=================================================================================
VERSION
134.0.6998.35

=================================================================================
APPLICATION

export QUILT_PATCHES=patches
export QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"

quilt push -a

=================================================================================
SPONSORS / SUPPORT

This work is currently sponsored by Raptor Engineering, LLC, Integricloud,
and Solid Silicon.

Open source consulting services: https://www.raptorengineering.com
Dedicated owner-controlled OpenPOWER servers: https://www.integricloud.com
OpenPOWER-compliant silicon solutions: https://www.solidsilicon.com

Please consider supporting our continued work on owner-controlled computing by
volunteering for open source projects (including the maintenance of Chromium and
v8), purchasing an OpenPOWER product, leasing an OpenPOWER server, or otherwise
promoting open, sustainable, standardized computing solutions and the software
they require to remain viable alternatives to the closed service ecosystem.

If you would like to join the v8 and Chromium development team for POWER, please
let me know at tpearson@raptorengineering.com.  Remote computing resources are
available free of charge to anyone willing to assist.  Thank you!

=================================================================================
MINIMUM SYSTEM REQUIREMENTS

LLVM 18.1.8 / LLVM 19.1.1 or higher

**** LLVM REQUIREMENTS ****
LLVM 17 and up (prior to 18.1.8) miscompile floating point libcalls with
signed integer arguments on all architectures.  Since LLVM 16 significantly
miscompiles ppc64el code (leading to Chromium segfaults), LLVM 18.1.8 or
higher is mandatory.  If this requirement is not satisfied, the browser will
consume massive system resources and randomly crash.

Full information is available on the merged upstream pull request here:
https://github.com/llvm/llvm-project/pull/109134

**** WARNING ****
LLVM 16 is known to miscompile part of v8!

At optimization levels higher than -O0, when using LTO, under specific
circumstances involving array access of floating point numbers, the following
(condensed) invalid instruction sequence is emitted:

li      r4,-15
rldic   r4,r4,3,29
lfdx    f1,r3,r4

Examples bytecode files that trigger the issue are located in
compiler_bugs/clang_16/strtod_o[0|1].bc for analysis.

To see the invalid assembler, compile to native object code via:
llc-16 strtod_o1.bc -filetype=obj -o strtod.o

and disassemble via:
objdump -S strtod.o

Note that llc-17 emits a completely different and more sensible instruction
sequence:

subfic  r6,r8,15
rldic   r4,r6,3,29
lfdx    f1,r5,r4

where r8 is loaded via other setup routines prior to entering the index
access segment of the code.  Likely, the optimizer in Clang 16 makes an
incorrect assumption about r8 (in this example) always equalling 0x0, when
in fact 0x0 would be an invalid value for r8.

=================================================================================
NOTE

The Ungoogled patches are modified to apply to a stock Debian Chromium tree,
without any other Ungoogled patches applied.  Typically, this means that the
following patches must be removed from the Debian patch series and reverted
from the source tree before this repository can be used:
 * ungoogled/disable-privacy-sandbox.patch

Be aware that since Debian already carries cookie deactivation patches the
associated patch in the Ungoogled tree has also been removed.  If you are
considering applying this Ungoogled patch series to a non-Debian Chromium tree,
it may be a good idea to use the upstream Ungoogled patch series as a starting
point instead of this patch series.

If building a Debian package, and the Ungoogled patches are applied, the
following build flags will need to be set in the debian/rules file:
 * safe_browsing_mode=0
 * build_with_tflite_lib=false

These flags are NOT required for the base ppc64el patchset alone.
