=================================================================================
VERSION
130.0.6723.58

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

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

quilt push -a

=================================================================================
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.
