Porting/Chromium/BE

From RCS Wiki
Revision as of 08:02, 23 February 2019 by MarcusC (talk | contribs)
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" Done
    • 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 BE Done
  • 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 endian Done
  • 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 BE Done
  • 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 BE Done
    • src/codec/SkCodecPriv.h
    - Missing include of "SkEndian.h" Done
  • third_party/boringssl/src
    • include/openssl/base.h
    - Need to recognize BE ppc64 Done
    • crypto/fipsmodule/bn/bytes.c
    - Bignum I/O functions need adaption for BE Done
    • crypto/fipsmodule/ecdsa/ecdsa.c and third_party/fiat/p256.c
    - More bignum stuff needing adaption for BE Done
    • 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 BE Done
    • 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 code Done
    • renderer/platform/graphics/logging_canvas.cc
    - Does contain BE support, but a variable rename refactoring is missing from the BE code Done
    • 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 v1 Done
  • third_party/flatbuffers/src
    • include/flatbuffers/base.h
    - The ByteSwap code does not work on C++11 due to the default constructor of the unions getting deleted Done
    • include/flatbuffers/minireflect.h
    - IterateValue dereferences reinterpret_cast:ed pointers into LE data Done
  • third_party/perfetto
    • include/perfetto/base/utils.h
    - Page size hardcoded as 4096
    • 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 missing Done
  • 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 missing Done
  • 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_BIGENDIAN Done
    • 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 variant Done
  • 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 mode Done

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
unit_tests BackFwdMenuModelTest.FaviconLoadTest Fail
BrowserThemePackTest.HiDpiThemeTest Fail
BrowserViewTest.AccessibleWindowTitle Fail
(Also on LE)
CRLSetComponentInstallerTest OK
CaptureVisiblePageTest.URLsCapturableWithEitherActiveTabOrAllURLs Fail
(Also on LE)
ChromeAppIconTest.IconLifeCycle Fail
ChromeBrowserMainExtraPartsMetricsTest.VerifyTouchEventsEnabledIsNotRecordedAfterPostBrowserStart Fail
(Also on LE)
ChromePaths.UserCacheDir Fail
DownloadItemModelTest.InterruptTooltip Fail
(Also on LE)
DownloadItemModelTest.InterruptedStatus Fail
(Also on LE)
DownloadProtectionServiceTest.CheckClientDownloadSampledFile Crash
(Also on LE)
EnterpriseHardwarePlatformAPITest.GetHardwarePlatformInfoAllowed Fail
(Also on LE)
ExtensionIconManagerTest.ScaleFactors Fail
ExtensionInfoGeneratorUnitTest.RuntimeHostPermissionsWithoutFeature Fail
(Also on LE)
MediaEngagementScoreTest.OverrideFieldTrial Fail
MurmurHash3UtilTest.MurmurHash3String Fail
PermissionMessageCombinationsUnittest Fail
(Also on LE)
PermissionsTest.GetWarningMessages_DeclarativeWebRequest Fail
(Also on LE)
PermissionsTest.GetWarningMessages_Socket_AnyHost Fail
(Also on LE)
SessionMonitorTest Crash
TabScorePredictorTest Fail
ThemeColorMatchesManifestTest.ThemeColor Crash
TwoPhaseUploaderTest Fail
WebAppIconGeneratorTest.ConstrainBitmapsToSizes Fail
WebRtcRtpDumpWriterTest Fail
WifiStatusMonitorTest.QueryStatusAndRecordResponse Crash

Patchfiles uploaded