Porting/Chromium/BE
Jump to navigation
Jump to search
Changes required to Chromium to work on big endian
- Skia
- - Chromium assumes that the pixel format, when viewed as a 32-bit word, is either ARGB or ABGR. However, third_party/skia/include/core/SkImageInfo.h contains a check that the pixel format, when viewed as four 8-bit bytes, is either BGRA or RGBA. Hence either this check needs to be relaxed (Maybe it is bogus in the first place? The comments talk about "native ARGB 32-bit", yet the test goes out of its way to test the ordering as bytes and not as 32-bit words), or Chromium needs to learn about a different pixel format.
- Datapack
- ui/base/resource/data_pack.cc
- -
Need to byteswap metadata on input (resource file format is specified to use LE)Done
- chrome/browser/themes/browser_theme_pack.cc
- - "datapack assumes little endian"
- Net
- net/cert/crl_set.cc
- - "assumes little endian"
- components/safe_browsing/db/v4_rice.cc
- -
#error The code below assumes little-endianness.Done
- Media
- media/ffmpeg/ffmpeg_common.cc and media/formats/mp4/box_definitions.cc
- - #error The code below assumes little-endianness.
- media/renderers/paint_canvas_video_renderer.cc
- - Depending on choice of Skia pixel format, a new LIBYUV mapping set may be needed (see also third_party/libyuv below).
- I18N
- base/i18n/icu_util.cc
- -
Needs to use "icudtb.dat" instead of "icudtl.dat" on BEDone
- Sandbox
- sandbox/linux/system_headers/linux_seccomp.h
- -
The definition of the big endian variant is incorrect (contains a bogus "__AUDIO_ARCH_BE"). Also, it would be better to define two different macros AUDIT_ARCH_PPC64 and AUDIT_ARCH_PPC64LE (because that is how it actually looks in <linux/audit.h>), and choose the correct one in sandbox/linux/bpf_dsl/seccomp_macros.h instead.Done
- Partition allocator
- base/allocator/partition_allocator/partition_freelist_entry.h
- - A different pointer transformation function is used on BE compared to on LE. This is not an issue in itself, but it exposes a bug that NULL pointers are sometimes not transformed when they ought to be (the LE transformation function is unity for NULL).
- Pickle
- base/pickle.cc
- -
ReadBool accesses serialized bools as "bool" (8 bit) despite WriteBool serializing them as "int" (32 bit)Done
- SHA1
- base/sha1.cc
- -
Contains some byteswaps which should only happen on little endianDone
- Url
- url/url_canon_host.cc
- -
Uses a reinterpret_cast to get an unsigned char pointer into an unsigned int, for no good reason.Done
- Unit tests
- base/memory/shared_memory_mapping_unittest.cc, base/metrics/bucket_ranges_unittest.cc, and base/strings/string_number_conversions_unittest.cc
- -
These unit tests expose endianness in one way or another and need to be adjusted to run correctly on BEDone
- third_party/skia
- include/private/GrTypesPriv.h
- - #error "Skia gpu currently assumes little endian"
- src/opts/Sk4px_none.h
- - Sk4px::alphas, Sk4px::zeroAlphas, Sk4px::zeroColors: "This method assumes little-endian."
- src/opts/SkXfermode_opts.h
- - a_rgb assumes specific component order
- src/utils/SkJSON.cpp and src/utils/SkJSON.h
- -
Tagged value implementation needs to be adapted for BEDone
- src/codec/SkCodecPriv.h
- -
Missing include of "SkEndian.h"Done
- third_party/boringssl/src
- include/openssl/base.h
- -
Need to recognize BE ppc64Done
- crypto/fipsmodule/bn/bytes.c
- -
Bignum I/O functions need adaption for BEDone
- crypto/fipsmodule/ecdsa/ecdsa.c and third_party/fiat/p256.c
- -
More bignum stuff needing adaption for BEDone
- crypto/asn1/a_int.c, crypto/fipsmodule/modes/gcm.c, crypto/fipsmodule/modes/internal.h, and crypto/fipsmodule/rand/ctrdrbg.c
- -
Hardcoded swaps which need to be removed on BEDone
- crypto/fipsmodule/modes/polyval.c
- -
reverse_and_mulX_ghash does both byte-swapping and arithmetic. The order needs to be reversed on BE.Done
- crypto/poly1305/poly1305.c
- -
Defines specific LE access functions, but does not do any actual serialization or swapping in them.Done
- crypto/curve25519/spake25519.c and third_party/fiat/curve25519.c
- -
The arithmetic operations on LE data (addition, comparison) need swaps on BE.Done
- crypto/evp/scrypt.c
- -
Need to swap the input and and output blocks on BE.Done
- crypto/chacha/chacha.c
- -
LE access functions are defined, and correct, but are only used in one of the two CHACHA variants.Done
- crypto/cipher_extra/e_aesgcmsiv.c
- -
Counter and length fields need swapping on BE.Done
- crypto/compiler_test.cc
- -
There is a test which deliberately fails if the host is not LE...Done
- third_party/blink
- renderer/platform/graphics/gpu/webgl_image_conversion.cc
- -
Does contain BE support, but a variable rename refactoring is missing from the BE codeDone
- renderer/platform/graphics/logging_canvas.cc
- -
Does contain BE support, but a variable rename refactoring is missing from the BE codeDone
- renderer/platform/image-decoders/jpeg/jpeg_image_decoder.cc
- - #error Blink assumes a little-endian target.
- renderer/platform/image-decoders/webp/webp_image_decoder.cc
- - #error Blink assumes a little-endian target.
- renderer/platform/heap/asm/SaveRegisters_ppc64.S
- -
Needs to handle ELF ABI v1Done
- third_party/perfetto
- src/ipc/buffered_frame_deserializer.cc, src/ipc/buffered_frame_deserializer_unittest.cc
- - Uses "AssumeLittleEndian" template
- src/protozero/message.cc
- - float and double handling need adjusting for BE (according to comment)
- src/protozero/proto_decoder.cc
- -
Byteswap implementations missingDone
- third_party/ffmpeg
- chromium/scripts/build_ffmpeg.py
- -
Needs to recognize 'ppc64' as well as 'ppc64le'Done
- third_party/webrtc
- common_audio/wav_file.cc
- - WavReader::ReadSamples and WavWriter::WriteSamples need to byteswap the samples
- common_audio/wav_header.cc
- -
Conversion functions missingDone
- third_party/modp_b64
- BUILD.gn
- -
modp_b64 actually supports BE, but in converting to their own build system Google managed to lose the check to define WORDS_BIGENDIANDone
- modp_b64.cc
- -
The prototype of modp_b64_decode needs to be updated to use size_t instead of int for the lengths, as it has been done for the LE variantDone
- third_party/crc32c
- BUILD.gn
- - Needs to define BYTE_ORDER_BIG_ENDIAN=1 on BE
- third_party/leveldatabase
- port/port_chromium.h
- - Needs to set kLittleEndian depending on endianness
- third_party/libvpx
- - The build system should move VSX-specific sources into a separate source set, and set the cflags "-maltivec -mvsx" for it. In the original build system the cflags were set based on a glob of the source filename, but in Googles build system it has to be done manually.
- third_party/libyuv
- - Depending on choice of Skia pixel format, additional conversion function variants may be needed
- base/third_party/dmg_fp
- dtoa.cc
- -
Google has hardcoded little endian modeDone
Failing testcases
Testsuite | Testcase | Result |
---|---|---|
aura_unittests | OSExchangeDataProviderMusTest.TestHTML | Fail |
base_unittests | OutOfMemoryDeathTest.SecurityValloc | Fail (Also on LE) |
PartitionAllocTest.DumpMemoryStats | Crash (Also on LE) | |
PartitionAllocTest.GenericAllocGetSize | Fail (Also on LE) | |
PartitionAllocTest.PurgeDiscardable | Crash (Also on LE) | |
PartitionAllocTest.Realloc | Fail (Also on LE) | |
StackTraceTest.TraceStackFramePointers | Fail (Also on LE) | |
StringUtilTest.FormatBytesUnlocalized | Fail | |
SysInfoTest.GetHardwareInfo | Fail (Also on LE) | |
TCMallocFreeTest.BadPointerInFirstPageOfTheLargeObject | Fail (Also on LE) | |
TCMallocFreeTest.DoubleFreeSmallObject | Fail (Also on LE) | |
blink_platform_unittests | AffineTransformTest.ToString | Fail |
BMPImageDecoderTest.isSizeAvailable | Fail | |
BMPImageDecoderTest.mergeBuffer | Fail | |
BMPImageDecoderTest.parseAndDecode | Fail | |
BitmapImageTest.APNGDecoder19 | Timeout | |
BitmapImageTest.GifDecoderFrame0 | Timeout | |
BitmapImageTest.GifDecoderFrame1 | Timeout | |
BitmapImageTest.GifDecoderFrame3 | Timeout | |
BitmapImageTest.GifDecoderMultiThreaded | Timeout | |
BitmapImageTest.jpegHasColorProfile | Fail | |
BitmapImageTest.pngHasColorProfile | Fail | |
BitmapImageTest.webpHasColorProfile | Fail | |
DecodedImageTypeHistogramTest/DecodedImageTypeHistogramTest.ImageType/4 | Fail | |
DecodedImageTypeHistogramTest/DecodedImageTypeHistogramTest.ImageType/5 | Fail | |
DeferredImageDecoderTestWoPlatform.mixImagesBmp | Crash | |
DeferredImageDecoderTestWoPlatform.mixImagesIco | Crash | |
DoubleRectTest.ToString | Fail | |
DragImageTest.InterpolationNone | Fail | |
FloatRectTest.ToString | Fail | |
FontDescriptionTest.ToString | Fail | |
FontSelectionTypesTest.RequestToString | Fail | |
FontSelectionTypesTest.ValueToString | Fail | |
GraphicsContextHighConstrastTest | Fail | |
GraphicsContextTest.Recording | Timeout | |
GraphicsContextTest.UnboundedDrawsAreClipped | Timeout | |
HighContrastImageClassifierTest | Fail | |
ICOImageDecoderTests | Fail | |
ImageFrameTest.BlendRGBAPremultipliedF16Buffer | Fail | |
ImageFrameTest.BlendRGBARawF16Buffer | Fail | |
StaticPNGTests.DecodeHighBitDepthPngToHalfFloat | Fail | |
StaticWebPTests.isSizeAvailable | Fail | |
TransformationMatrixTest.ToString | Fail | |
chromedriver_unittests | ProcessExtensions | Fail |
UnzipSoleFile.Entry | Fail | |
components_unittests | ActivationStateComputingThrottleSubFrameTest.Activate/0 | Fail (Also on LE) |
BidirectionalStreamDelayRequestHeadersUntilFlush | Fail | |
CastFramerTest.TestMessageFramerCompleteMessage | Crash | |
CastFramerTest.TestUnparsableBodyProto | Fail | |
CastTransportTest | Crash | |
ChromeCTPolicyEnforcerTest | Fail (Also on LE) | |
DataAccessorTest.Mix | Fail | |
DataReductionProxyInterceptorEndToEndTest.RedirectChainToHttps | Crash (Also on LE) | |
DocumentProviderTest.GenerateLastModifiedString | Fail (Also on LE) | |
ExpireHistoryTest | Crash | |
FaviconHandlerTest.RedownloadExpiredPageUrlFavicon | Fail | |
HistoryBackendTest | Fail | |
ImageManagerTest.GetImageForURLNetworkCacheHit | Timeout | |
ImageManagerTest.QueueImageRequest | Timeout | |
MockCastSocketTest | Crash | |
MultilingualSpellCheckTest | Fail | |
NetExportFileWriterTest.AddEventCustomPath | Fail | |
PasswordHashDataTest.CalculatePasswordHash | Fail | |
PwgRasterTest.Encode | Fail | |
QuarantineTest.FileCanBeAnnotatedWithNoGUID | Fail | |
QuarantineTest.FileCanBeOpenedForReadAfterAnnotation | Fail | |
RemoteSuggestionsProviderImplTest | Fail | |
SelectFaviconFramesTest | Fail | |
SenderPipeTest.TimeoutNoRead | Fail (Also on LE) | |
SenderPipeTest.TimeoutSmallRead | Fail (Also on LE) | |
SpellCheckTest | Fail | |
SslCastSocketTest.TestConnectEndToEndWithRealSSL | Fail | |
SubresourceFilterVerifiedRulesetDealerTest.OpenAndSetRulesetFileValidNoChecksum | Fail | |
content_unittests | BackgroundFetchDataManagerTest.GetInitializationData | Timeout |
BackgroundFetchDataManagerTest.UpdateRegistrationUI | Timeout | |
BackgroundFetchImageHelpers.SerializeRoundTrip | Timeout | |
CanvasCaptureHandlerTest.VerifyFrame | Fail | |
DOMStorageDatabaseTest.TestCanOpenAndReadWebCoreDatabase | Fail | |
PageStateSerializationTest | Fail | |
dbus_unittests | EndToEndAsyncTest.InvalidServiceName | Crash |
MessageTest.SetInvalidHeaders | Fail | |
device_unittests | OneWriterSeqLockTest.ManyThreads | Fail |
UsbDescriptorsTest.OddLengthStringDescriptor | Fail | |
UsbDescriptorsTest.ReadStringDescriptors | Fail | |
UsbDescriptorsTest.StringDescriptor | Fail | |
mojo_unittests | ValidationTest.InputParser | Fail |
ui_base_unittests | OSExchangeDataTest.TestHTML | Fail |
Patchfiles uploaded
- Chromium repository
- Media:0001-sandbox-Fix-SECCOMP ARCH-for-ppc64.patch
- Media:0002-datapack-Byteswap-metadata-on-big-endian.patch
- Media:0003-i18n-Use-correct-ICU-data-file.patch
- Media:0004-blink-Update-variable-names-in-BE-part-of-graphics-c.patch
- Media:0005-blink-Fix-SaveRegisters_ppc64-for-ABIv1.patch
- Media:0006-modp_b64-Set-WORDS_BIGENDIAN-on-big-endian.patch
- Media:0007-modp_b64-Fix-size-datatype-for-modp_b64_decode-on-bi.patch
- Media:0008-dmg_fp-Add-endianness-check.patch
- Media:0009-pickle-Use-same-scalar-size-in-ReadBool-as-in-WriteB.patch
- Media:0010-sha1-Remove-byteswaps-on-big-endian.patch
- Media:0011-unittest-Fix-some-tests-exposing-endianness-to-work-.patch
- Media:0012-V4Rice-Fix-LE-dependency.patch
- Media:0013-url-Canonicalize-Remove-unportable-reinterpret_cast.patch
- Boringssl repository
- Media:0001-Add-ppc64-big-endian-to-base.h.patch
- Media:0002-bn-Fix-I-O-on-big-endian.patch
- Media:0003-Fix-ECDSA-on-big-endian.patch
- Media:0004-asn1-Remove-swap-in-ASN1_INTEGER_set_uint64-for-big-.patch
- Media:0005-fipsmodule-Remove-unneeded-swaps-on-big-endian.patch
- Media:0006-polyval-change-order-of-swap-and-shift-in-reverse_an.patch
- Media:0007-Fix-poly1305-on-big-endian.patch
- Media:0008-Fix-curve25519-on-big-endian.patch
- Media:0009-Fix-scrypt-on-big-endian.patch
- Media:0010-Fix-chacha20-on-big-endian.patch
- Media:0011-Fix-aes-gcm-siv-on-big-endian.patch
- Media:0012-Fixed-last-failing-test-on-big-endian.patch
- Skia repository
- Perfetto repository
- Ffmpeg repository
- Webrtc repository