Opened 13 months ago

Closed 3 months ago

#26323 closed task (fixed)

Build 32bit Linux bundles on 64bit systems

Reported by: gk Owned by: tbb-team
Priority: Very High Milestone:
Component: Applications/Tor Browser Version:
Severity: Normal Keywords: tbb-rbm, TorBrowserTeam201903R, tbb-8.5
Cc: dcf Actual Points:
Parent ID: #26468 Points:
Reviewer: Sponsor:

Description

As indicated in comment:2:ticket:25220 we might run into memory limitations when building 32bit Linux bundles on 32bit Linux systems. While this does not seem to be the case for a vanilla Tor Browser build yet, adding selfrando to the mix triggers this problem:

40:59.43 collect2: fatal error: ld terminated with signal 6 [Aborted]
40:59.43 compilation terminated.
40:59.43 /var/tmp/dist/binutils/bin/ld.gold.real: fatal error: libxul.so: mmap: failed to allocate 1457011852 bytes for output file: Cannot allocate memory
40:59.43 Linker execution failed, status: 1

We should move our compilation for 32bit Linux to a 64bit host.

Child Tickets

Change History (32)

comment:1 Changed 12 months ago by gk

https://convolv.es/blog/2017/08/25/building-firefox-for-linux-32-bit/ has some information, although it eventually got a chroot approach used.

FWIW: We might actually not need that for the ESR 60 cycle and could get away with adding -Wl,--reduce-memory-overheads and -Wl,--no-keep-memory to LDFLAGS as glandium suggests in https://bugzilla.mozilla.org/show_bug.cgi?id=1401093.

But probably sooner than later we have to bite that bullet.

comment:2 Changed 9 months ago by traumschule

I learned it's a compiler bug so more RAM does not help, debuginfo=1 (instead of --disable-debug-symbols) might however be a progress.

Conditionally disable Rust debug symbols

https://bugzilla.mozilla.org/show_bug.cgi?id=1409680#c2

Downstream FreeBSD keeps non-debug symbols for profiling (dtrace, pmcstat) and quick stacktraces. Since Rust dependency was introduced libxul.so grew in size for no good reason (Firefox is mostly C++). And Stylo will bump the size even more.

stylo doesnt build on 32-bits

https://bugzilla.mozilla.org/show_bug.cgi?id=1401093#c15

it *might* be a rust-bindgen issue (related to the clang version we're using, 5.0 here ? doubt it as successfull builds of m-b are done with ports clang, and failing builds from the packaging infra are done with ports clang too..) - he linked me to https://github.com/rust-lang-nursery/rust-bindgen/issues/340.

https://bugzilla.mozilla.org/show_bug.cgi?id=1401093#c18

TL;DR, the clang-sys library is passing structs where libclang expects integers. This is fine everywhere but linux32 (or similar ABIs), so we need to fix it... I proposed a fix for clang-sys, and will update bindgen in mozilla-central once it lands.

https://bugzilla.mozilla.org/show_bug.cgi?id=1401093#c36

So the original problem is a rustc compiler bug: on FreeBSD, when compiling the Rust part, the generated asm code expects struct from stack (it follows SysV/i386 convention); but the C compiler has generated asm code to return it from registers (the other convention, similar to OpenBSD), resulting stack corruption.

https://bugzilla.mozilla.org/show_bug.cgi?id=1401093#c44

If it is necessary for all native builds on 32-bits (whatever the platform), why not detecting it directly in the rust code where your patch is ? i suppose rust has a way to know the architecture of the build host...

https://github.com/servo/servo/pull/18935 (and yeah, target_pointer_width in a build script is actually host pointer width, fun)

Run bindgen sequentially if we're on a 32-bit host

build symbols missing on macOS/OS X, unhelpful crash signatures like [@ XUL + 0xddb7c]

https://bugzilla.mozilla.org/show_bug.cgi?id=1380381#c22

Please mention in the commit message that debuginfo=1 still means there's enough info for stack traces, although it lacks line info (so we'll know that something crashed in $function, but not at what specific line it did). debuginfo=2 also adds variable information, useful for debugging, but is irrelevant to crash reports.
The workaround has my approval. It is unfortunate that we lose temporarily lose line-level debugging info for Rust. But it's that, a big unknown and PITA reverting cross-compiling, keeping the trees closed, or no reliable debug symbols at all on OS X. This seems like the least bad option.

Restore full Rust debug symbols / address dsymutil crashes

https://bugzilla.mozilla.org/show_bug.cgi?id=1381043#c17

Backport llvm r313872 to 3.9 to avoid llvm-dsymutil crashing on bad rust DWARF data.

https://hg.mozilla.org/mozilla-central/rev/a3225b6f6193
https://hg.mozilla.org/mozilla-central/rev/95555b11aaaf

comment:3 Changed 5 months ago by gk

Keywords: TorBrowserTeam201901 added
Parent ID: #26468
Priority: MediumVery High

comment:4 Changed 5 months ago by boklm

I have started working on a patch for this:
https://gitweb.torproject.org/user/boklm/tor-browser-build.git/commit/?h=bug_26323_v2&id=dab50487c24bf04deb5fd3243ba407a6e2697f20

Currently it fails to build rust, with many undefined reference errors, such as:

[ 16%] Building CXX object utils/yaml-bench/CMakeFiles/yaml-bench.dir/YAMLBench.cpp.o
[ 16%] Linking CXX executable ../../bin/not
../../lib/libLLVMSupport.a(CommandLine.cpp.o): In function `_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.isra.226':
CommandLine.cpp:(.text._ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag.isra.226+0x6b): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_create(unsigned long&, unsigned long)'
../../lib/libLLVMSupport.a(CommandLine.cpp.o): In function `_ZN12_GLOBAL__N_114VersionPrinter5printEv.isra.261':
CommandLine.cpp:(.text._ZN12_GLOBAL__N_114VersionPrinter5printEv.isra.261+0xad): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::compare(char const*) const'
CommandLine.cpp:(.text._ZN12_GLOBAL__N_114VersionPrinter5printEv.isra.261+0x1f0): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long, unsigned long, char const*, unsigned long)'
../../lib/libLLVMSupport.a(raw_ostream.cpp.o): In function `llvm::raw_fd_ostream::write_impl(char const*, unsigned long)':
raw_ostream.cpp:(.text._ZN4llvm14raw_fd_ostream10write_implEPKcm+0x60): undefined reference to `std::_V2::generic_category()'
../../lib/libLLVMSupport.a(raw_ostream.cpp.o): In function `llvm::raw_string_ostream::write_impl(char const*, unsigned long)':
raw_ostream.cpp:(.text._ZN4llvm18raw_string_ostream10write_implEPKcm+0x18): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_append(char const*, unsigned long)'
../../lib/libLLVMSupport.a(raw_ostream.cpp.o): In function `llvm::raw_fd_ostream::~raw_fd_ostream()':
raw_ostream.cpp:(.text._ZN4llvm14raw_fd_ostreamD2Ev+0xbe): undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long, unsigned long, char const*, unsigned long)'
../../lib/libLLVMSupport.a(raw_ostream.cpp.o): In function `llvm::raw_fd_ostream::raw_fd_ostream(int, bool, bool)':
raw_ostream.cpp:(.text._ZN4llvm14raw_fd_ostreamC2Eibb+0x48): undefined reference to `std::_V2::system_category()'
../../lib/libLLVMSupport.a(raw_ostream.cpp.o): In function `llvm::raw_fd_ostream::raw_fd_ostream(llvm::StringRef, std::error_code&, llvm::sys::fs::OpenFlags)':
raw_ostream.cpp:(.text._ZN4llvm14raw_fd_ostreamC2ENS_9StringRefERSt10error_codeNS_3sys2fs9OpenFlagsE+0x86): undefined reference to `std::_V2::system_category()'
../../lib/libLLVMSupport.a(raw_ostream.cpp.o): In function `llvm::raw_fd_ostream::seek(unsigned long)':
raw_ostream.cpp:(.text._ZN4llvm14raw_fd_ostream4seekEm+0x3c): undefined reference to `std::_V2::generic_category()'
../../lib/libLLVMSupport.a(raw_ostream.cpp.o): In function `llvm::outs()':

comment:5 Changed 5 months ago by gk

Are you trying to cross-compile the clang that Rust needs? We should just compile the 64bit version of it as we do in the 64bit build. Clang should be capable of compiling 32bit code later then if needed.

comment:6 Changed 4 months ago by gk

Keywords: TorBrowserTeam201902 added; TorBrowserTeam201901 removed

Moving tickets to February.

comment:7 Changed 4 months ago by boklm

When building firefox I had this error:

14:25.92 error: failed to run custom build command for `style v0.0.1 (file:///var/tmp/build/firefox-4d0f9fa5fdd5/servo/components/style)`
14:25.92 process didn't exit successfully: `/var/tmp/build/firefox-4d0f9fa5fdd5/obj-i686-linux-gnu/toolkit/library/release/build/style-944c8c05b96e6d43/build-script-build` (exit code: 101)
[...]
14:26.02 --- stderr
14:26.02 /var/tmp/build/firefox-4d0f9fa5fdd5/obj-i686-linux-gnu/dist/include/mozilla/Compiler.h:49:10: fatal error: 'cstddef' file not found
14:26.02 /var/tmp/build/firefox-4d0f9fa5fdd5/obj-i686-linux-gnu/dist/include/mozilla/Compiler.h:49:10: fatal error: 'cstddef' file not found, err: true
14:26.04 thread '<unnamed>' panicked at 'Failed to generate bindings, flags: ["/var/tmp/build/firefox-4d0f9fa5fdd5/obj-i686-linux-gnu/dist/include/mozilla/ServoBindings.h", "--rust-target", "1.0", "--blacklist-type", "nsACString_internal", "--blacklist-type", "nsAString_internal", "--blacklist-type", "ServoStyleContextBorrowed", "--blacklist-type", "ServoStyleContextBorrowedOrNull", "--blacklist-type", "mozilla::css::GridTemplateAreasValue", "--blacklist-type", "mozilla::css::ErrorReporter", "--blacklist-type", "mozilla::css::ImageValue", "--blacklist-type", "mozilla::css::URLValue", "--blacklist-type", "mozilla::css::URLValueData", "--blacklist-type", "mozilla::dom::CallerType", "--blacklist-type", "mozilla::AnonymousCounterStyle", "--blacklist-type", "mozilla::AtomArray", "--blacklist-type", "mozilla::CORSMode", "--blacklist-type", "mozilla::MallocSizeOf", "--blacklist-type", "mozilla::OriginFlags", "--blacklist-type", "mozilla::UniquePtr", "--blacklist-type", "ServoRawOffsetArc", "--blacklist-type", "nsIContent", "--blacklist-type", "nsIDocument", "--blacklist-type", "nsIDocument_DocumentTheme", "--blacklist-type", "nsSimpleContentList", "--blacklist-type", "MediumFeaturesChangedResult", "--blacklist-type", "RawGeckoAnimationPropertySegment", "--blacklist-type", "RawGeckoComputedTiming", "--blacklist-type", "RawGeckoCSSPropertyIDList", "--blacklist-type", "RawGeckoDocument", "--blacklist-type", "RawGeckoElement", "--blacklist-type", "Element", "--blacklist-type", "RawGeckoKeyframeList", "--blacklist-type", "RawGeckoPropertyValuePairList", "--blacklist-type", "RawGeckoComputedKeyframeValuesList", "--blacklist-type", "RawGeckoFontFaceRuleList", "--blacklist-type", "RawGeckoNode", "--blacklist-type", "RawServoAnimationValue", "--blacklist-type", "RawGeckoServoAnimationValueList", "--blacklist-type", "RawServoMediaList", "--blacklist-type", "RawServoStyleSheetContents", "--blacklist-type", "RawServoDeclarationBlock", "--blacklist-type", "RawServoStyleRule", "--blacklist-type", "RawGeckoPresContext", "--blacklist-type", "RawGeckoPresContextOwned", "--blacklist-type", "RawGeckoStyleAnimationList", "--blacklist-type", "RawGeckoStyleChildrenIterator", "--blacklist-type", "RawGeckoServoStyleRuleList", "--blacklist-type", "RawGeckoURLExtraData", "--blacklist-type", "RawGeckoXBLBinding", "--blacklist-type", "RawServoSelectorList", "--blacklist-type", "RawServoSourceSizeList", "--blacklist-type", "RefPtr", "--blacklist-type", "RustString", "--blacklist-type", "CSSPseudoClassType", "--blacklist-type", "CSSPseudoElementType", "--blacklist-type", "ServoTraversalFlags", "--blacklist-type", "ComputedTimingFunction_BeforeFlag", "--blacklist-type", "CounterStylePtr", "--blacklist-type", "FontFamilyType", "--blacklist-type", "FontSizePrefs", "--blacklist-type", "GeckoFontMetrics", "--blacklist-type", "IterationCompositeOperation", "--blacklist-type", "Keyframe", "--blacklist-type", "PropertyValuePair", "--blacklist-type", "SeenPtrs", "--blacklist-type", "ServoBundledURI", "--blacklist-type", "ServoElementSnapshot", "--blacklist-type", "ServoElementSnapshotTable", "--blacklist-type", "ServoStyleSetSizes", "--blacklist-type", "SheetParsingMode", "--blacklist-type", "StyleBasicShapeType", "--blacklist-type", "StyleShapeSource", "--blacklist-type", "StyleTransition", "--blacklist-type", "gfxFontFeatureValueSet", "--blacklist-type", "nsCSSCounterDesc", "--blacklist-type", "nsCSSCounterStyleRule", "--blacklist-type", "nsCSSFontDesc", "--blacklist-type", "nsCSSFontFaceRule", "--blacklist-type", "nsCSSKeyword", "--blacklist-type", "nsCSSPropertyID", "--blacklist-type", "nsCSSPropertyIDSet", "--blacklist-type", "nsCSSRect", "--blacklist-type", "nsCSSShadowArray", "--blacklist-type", "nsCSSUnit", "--blacklist-type", "nsCSSValue", "--blacklist-type", "nsCSSValueSharedList", "--blacklist-type", "nsChangeHint", "--blacklist-type", "nsCursorImage", "--blacklist-type", "nsFont", "--blacklist-type", "nsAtom", "--blacklist-type", "nsIURI", "--blacklist-type", "nsCompatibility", "--blacklist-type", "nsRestyleHint", "--blacklist-type", "nsStyleBackground", "--blacklist-type", "nsStyleBorder", "--blacklist-type", "nsStyleColor", "--blacklist-type", "nsStyleColumn", "--blacklist-type", "nsStyleContent", "--blacklist-type", "nsStyleContentData", "--blacklist-type", "nsStyleContentData_CounterFunction", "--blacklist-type", "nsStyleContentType", "--blacklist-type", "nsStyleContext", "--blacklist-type", "nsStyleCoord", "--blacklist-type", "nsStyleCoord_Calc", "--blacklist-type", "nsStyleCoord_CalcValue", "--blacklist-type", "nsStyleDisplay", "--blacklist-type", "nsStyleEffects", "--blacklist-type", "nsStyleFilter", "--blacklist-type", "nsStyleFont", "--blacklist-type", "nsStyleGradient", "--blacklist-type", "nsStyleGradientStop", "--blacklist-type", "nsStyleGridTemplate", "--blacklist-type", "nsStyleImage", "--blacklist-type", "nsStyleImageLayers", "--blacklist-type", "nsStyleImageLayers_Layer", "--blacklist-type", "nsStyleImageLayers_LayerType", "--blacklist-type", "nsStyleImageRequest", "--blacklist-type", "nsStyleList", "--blacklist-type", "nsStyleMargin", "--blacklist-type", "nsStyleOutline", "--blacklist-type", "nsStylePadding", "--blacklist-type", "nsStylePosition", "--blacklist-type", "nsStyleQuoteValues", "--blacklist-type", "nsStyleSVG", "--blacklist-type", "nsStyleSVGOpacitySource", "--blacklist-type", "nsStyleSVGPaint", "--blacklist-type", "nsStyleSVGReset", "--blacklist-type", "nsStyleTable", "--blacklist-type", "nsStyleTableBorder", "--blacklist-type", "nsStyleText", "--blacklist-type", "nsStyleTextReset", "--blacklist-type", "nsStyleUIReset", "--blacklist-type", "nsStyleUnion", "--blacklist-type", "nsStyleUnit", "--blacklist-type", "nsStyleUserInterface", "--blacklist-type", "nsStyleVariables", "--blacklist-type", "nsStyleVisibility", "--blacklist-type", "nsStyleXUL", "--blacklist-type", "nsTimingFunction", "--blacklist-type", "nscolor", "--blacklist-type", "nscoord", "--blacklist-type", "nsresult", "--blacklist-type", "Loader", "--blacklist-type", "LoaderReusableStyleSheets", "--blacklist-type", "SheetLoadData", "--blacklist-type", "ServoStyleSheet", "--blacklist-type", "ServoComputedData", "--blacklist-type", "ServoStyleContext", "--blacklist-type", "ServoStyleContextStrong", "--blacklist-type", "EffectCompositor_CascadeLevel", "--blacklist-type", "UpdateAnimationsTasks", "--blacklist-type", "ParsingMode", "--blacklist-type", "InheritTarget", "--blacklist-type", "URLMatchingFunction", "--blacklist-type", "StyleAnimation", "--blacklist-type", "StyleRuleInclusion", "--blacklist-type", "nsStyleTransformMatrix::MatrixTransformOperator", "--blacklist-type", "RawGeckoGfxMatrix4x4", "--blacklist-type", "FontFamilyName", "--blacklist-type", "mozilla::SharedFontList", "--blacklist-type", "RawServoStyleSetOwned", "--blacklist-type", "RawServoStyleSetOwnedOrNull", "--blacklist-type", "RawServoStyleSetBorrowed", "--blacklist-type", "RawServoStyleSetBorrowedOrNull", "--blacklist-type", "RawServoStyleSetBorrowedMut", "--blacklist-type", "RawServoStyleSetBorrowedMutOrNull", "--blacklist-type", "RawServoStyleSet", "--blacklist-type", "RawServoAuthorStylesOwned", "--blacklist-type", "RawServoAuthorStylesOwnedOrNull", "--blacklist-type", "RawServoAuthorStylesBorrowed", "--blacklist-type", "RawServoAuthorStylesBorrowedOrNull", "--blacklist-type", "RawServoAuthorStylesBorrowedMut", "--blacklist-type", "RawServoAuthorStylesBorrowedMutOrNull", "--blacklist-type", "RawServoAuthorStyles", "--blacklist-type", "RawServoSelectorListOwned", "--blacklist-type", "RawServoSelectorListOwnedOrNull", "--blacklist-type", "RawServoSelectorListBorrowed", "--blacklist-type", "RawServoSelectorListBorrowedOrNull", "--blacklist-type", "RawServoSelectorListBorrowedMut", "--blacklist-type", "RawServoSelectorListBorrowedMutOrNull", "--blacklist-type", "RawServoSourceSizeListOwned", "--blacklist-type", "RawServoSourceSizeListOwnedOrNull", "--blacklist-type", "RawServoSourceSizeListBorrowed", "--blacklist-type", "RawServoSourceSizeListBorrowedOrNull", "--blacklist-type", "RawServoSourceSizeListBorrowedMut", "--blacklist-type", "RawServoSourceSizeListBorrowedMutOrNull", "--blacklist-type", "ServoElementSnapshotOwned", "--blacklist-type", "ServoElementSnapshotOwnedOrNull", "--blacklist-type", "ServoElementSnapshotBorrowed", "--blacklist-type", "ServoElementSnapshotBorrowedOrNull", "--blacklist-type", "ServoElementSnapshotBorrowedMut", "--blacklist-type", "ServoElementSnapshotBorrowedMutOrNull", "--blacklist-type", "RawServoAnimationValueMapOwned", "--blacklist-type", "RawServoAnimationValueMapOwnedOrNull", "--blacklist-type", "RawServoAnimationValueMapBorrowed", "--blacklist-type", "RawServoAnimationValueMapBorrowedOrNull", "--blacklist-type", "RawServoAnimationValueMapBorrowedMut", "--blacklist-type", "RawServoAnimationValueMapBorrowedMutOrNull", "--blacklist-type", "RawServoAnimationValueMap", "--blacklist-type", "RawGeckoNodeBorrowed", "--blacklist-type", "RawGeckoNodeBorrowedOrNull", "--blacklist-type", "RawGeckoElementBorrowed", "--blacklist-type", "RawGeckoElementBorrowedOrNull", "--blacklist-type", "RawGeckoDocumentBorrowed", "--blacklist-type", "RawGeckoDocumentBorrowedOrNull", "--blacklist-type", "RawServoDeclarationBlockStrongBorrowed", "--blacklist-type", "RawServoDeclarationBlockStrongBorrowedOrNull", "--blacklist-type", "RawGeckoPresContextBorrowed", "--blacklist-type", "RawGeckoPresContextBorrowedOrNull", "--blacklist-type", "RawGeckoXBLBindingBorrowed", "--blacklist-type", "RawGeckoXBLBindingBorrowedOrNull", "--blacklist-type", "nsCSSPropertyIDSetBorrowed", "--blacklist-type", "nsCSSPropertyIDSetBorrowedOrNull", "--blacklist-type", "nsCSSPropertyIDSetBorrowedMut", "--blacklist-type", "nsCSSPropertyIDSetBorrowedMutOrNull", "--blacklist-type", "nsCSSValueBorrowed", "--blacklist-type", "nsCSSValueBorrowedOrNull", "--blacklist-type", "nsCSSValueBorrowedMut", "--blacklist-type", "nsCSSValueBorrowedMutOrNull", "--blacklist-type", "nsTimingFunctionBorrowed", "--blacklist-type", "nsTimingFunctionBorrowedOrNull", "--blacklist-type", "nsTimingFunctionBorrowedMut", "--blacklist-type", "nsTimingFunctionBorrowedMutOrNull", "--blacklist-type", "RawGeckoAnimationPropertySegmentBorrowed", "--blacklist-type", "RawGeckoAnimationPropertySegmentBorrowedOrNull", "--blacklist-type", "RawGeckoAnimationPropertySegmentBorrowedMut", "--blacklist-type", "RawGeckoAnimationPropertySegmentBorrowedMutOrNull", "--blacklist-type", "RawGeckoComputedTimingBorrowed", "--blacklist-type", "RawGeckoComputedTimingBorrowedOrNull", "--blacklist-type", "RawGeckoComputedTimingBorrowedMut", "--blacklist-type", "RawGeckoComputedTimingBorrowedMutOrNull", "--blacklist-type", "RawGeckoCSSPropertyIDListBorrowed", "--blacklist-type", "RawGeckoCSSPropertyIDListBorrowedOrNull", "--blacklist-type", "RawGeckoCSSPropertyIDListBorrowedMut", "--blacklist-type", "RawGeckoCSSPropertyIDListBorrowedMutOrNull", "--blacklist-type", "RawGeckoKeyframeListBorrowed", "--blacklist-type", "RawGeckoKeyframeListBorrowedOrNull", "--blacklist-type", "RawGeckoKeyframeListBorrowedMut", "--blacklist-type", "RawGeckoKeyframeListBorrowedMutOrNull", "--blacklist-type", "RawGeckoPropertyValuePairListBorrowed", "--blacklist-type", "RawGeckoPropertyValuePairListBorrowedOrNull", "--blacklist-type", "RawGeckoPropertyValuePairListBorrowedMut", "--blacklist-type", "RawGeckoPropertyValuePairListBorrowedMutOrNull", "--blacklist-type", "RawGeckoComputedKeyframeValuesListBorrowed", "--blacklist-type", "RawGeckoComputedKeyframeValuesListBorrowedOrNull", "--blacklist-type", "RawGeckoComputedKeyframeValuesListBorrowedMut", "--blacklist-type", "RawGeckoComputedKeyframeValuesListBorrowedMutOrNull", "--blacklist-type", "RawGeckoFontFaceRuleListBorrowed", "--blacklist-type", "RawGeckoFontFaceRuleListBorrowedOrNull", "--blacklist-type", "RawGeckoFontFaceRuleListBorrowedMut", "--blacklist-type", "RawGeckoFontFaceRuleListBorrowedMutOrNull", "--blacklist-type", "RawGeckoServoStyleRuleListBorrowed", "--blacklist-type", "RawGeckoServoStyleRuleListBorrowedOrNull", "--blacklist-type", "RawGeckoServoStyleRuleListBorrowedMut", "--blacklist-type", "RawGeckoServoStyleRuleListBorrowedMutOrNull", "--blacklist-type", "RawGeckoServoAnimationValueListBorrowed", "--blacklist-type", "RawGeckoServoAnimationValueListBorrowedOrNull", "--blacklist-type", "RawGeckoServoAnimationValueListBorrowedMut", "--blacklist-type", "RawGeckoServoAnimationValueListBorrowedMutOrNull", "--blacklist-type", "RawGeckoStyleAnimationListBorrowed", "--blacklist-type", "RawGeckoStyleAnimationListBorrowedOrNull", "--blacklist-type", "RawGeckoStyleAnimationListBorrowedMut", "--blacklist-type", "RawGeckoStyleAnimationListBorrowedMutOrNull", "--blacklist-type", "RawGeckoStyleChildrenIteratorBorrowed", "--blacklist-type", "RawGeckoStyleChildrenIteratorBorrowedOrNull", "--blacklist-type", "RawGeckoStyleChildrenIteratorBorrowedMut", "--blacklist-type", "RawGeckoStyleChildrenIteratorBorrowedMutOrNull", "--blacklist-type", "ServoCssRulesStrong", "--blacklist-type", "ServoCssRulesBorrowed", "--blacklist-type", "ServoCssRulesBorrowedOrNull", "--blacklist-type", "ServoCssRules", "--blacklist-type", "RawServoStyleSheetContentsStrong", "--blacklist-type", "RawServoStyleSheetContentsBorrowed", "--blacklist-type", "RawServoStyleSheetContentsBorrowedOrNull", "--blacklist-type", "RawServoDeclarationBlockStrong", "--blacklist-type", "RawServoDeclarationBlockBorrowed", "--blacklist-type", "RawServoDeclarationBlockBorrowedOrNull", "--blacklist-type", "RawServoStyleRuleStrong", "--blacklist-type", "RawServoStyleRuleBorrowed", "--blacklist-type", "RawServoStyleRuleBorrowedOrNull", "--blacklist-type", "RawServoImportRuleStrong", "--blacklist-type", "RawServoImportRuleBorrowed", "--blacklist-type", "RawServoImportRuleBorrowedOrNull", "--blacklist-type", "RawServoImportRule", "--blacklist-type", "RawServoAnimationValueStrong", "--blacklist-type", "RawServoAnimationValueBorrowed", "--blacklist-type", "RawServoAnimationValueBorrowedOrNull", "--blacklist-type", "RawServoKeyframeStrong", "--blacklist-type", "RawServoKeyframeBorrowed", "--blacklist-type", "RawServoKeyframeBorrowedOrNull", "--blacklist-type", "RawServoKeyframe", "--blacklist-type", "RawServoKeyframesRuleStrong", "--blacklist-type", "RawServoKeyframesRuleBorrowed", "--blacklist-type", "RawServoKeyframesRuleBorrowedOrNull", "--blacklist-type", "RawServoKeyframesRule", "--blacklist-type", "RawServoMediaListStrong", "--blacklist-type", "RawServoMediaListBorrowed", "--blacklist-type", "RawServoMediaListBorrowedOrNull", "--blacklist-type", "RawServoMediaRuleStrong", "--blacklist-type", "RawServoMediaRuleBorrowed", "--blacklist-type", "RawServoMediaRuleBorrowedOrNull", "--blacklist-type", "RawServoMediaRule", "--blacklist-type", "RawServoNamespaceRuleStrong", "--blacklist-type", "RawServoNamespaceRuleBorrowed", "--blacklist-type", "RawServoNamespaceRuleBorrowedOrNull", "--blacklist-type", "RawServoNamespaceRule", "--blacklist-type", "RawServoPageRuleStrong", "--blacklist-type", "RawServoPageRuleBorrowed", "--blacklist-type", "RawServoPageRuleBorrowedOrNull", "--blacklist-type", "RawServoPageRule", "--blacklist-type", "RawServoSupportsRuleStrong", "--blacklist-type", "RawServoSupportsRuleBorrowed", "--blacklist-type", "RawServoSupportsRuleBorrowedOrNull", "--blacklist-type", "RawServoSupportsRule", "--blacklist-type", "RawServoDocumentRuleStrong", "--blacklist-type", "RawServoDocumentRuleBorrowed", "--blacklist-type", "RawServoDocumentRuleBorrowedOrNull", "--blacklist-type", "RawServoDocumentRule", "--blacklist-type", "RawServoFontFeatureValuesRuleStrong", "--blacklist-type", "RawServoFontFeatureValuesRuleBorrowed", "--blacklist-type", "RawServoFontFeatureValuesRuleBorrowedOrNull", "--blacklist-type", "RawServoFontFeatureValuesRule", "--blacklist-type", "RawServoRuleNodeStrong", "--blacklist-type", "RawServoRuleNodeBorrowed", "--blacklist-type", "RawServoRuleNodeBorrowedOrNull", "--blacklist-type", "RawServoRuleNode", "--no-derive-default", "--disable-name-namespacing", "--generate", "function", "--ignore-methods", "--raw-line", "pub use nsstring::{nsACString, nsAString, nsString, nsStringRepr};", "--raw-line", "use gecko_bindings::structs::nsStyleTransformMatrix;", "--raw-line", "use gecko_bindings::structs::nsTArray;", "--raw-line", "type nsACString_internal = nsACString;", "--raw-line", "type nsAString_internal = nsAString;", "--raw-line", "pub type ServoStyleContextBorrowed<\'a> = &\'a ::properties::ComputedValues;", "--raw-line", "pub type ServoStyleContextBorrowedOrNull<\'a> = Option<&\'a ::properties::ComputedValues>;", "--raw-line", "pub type ServoComputedDataBorrowed<\'a> = &\'a ServoComputedData;", "--raw-line", "pub type RawServoAnimationValueTableBorrowed<\'a> = &\'a ();", "--raw-line", "use gecko_bindings::structs::mozilla::css::GridTemplateAreasValue;", "--raw-line", "use gecko_bindings::structs::mozilla::css::ErrorReporter;", "--raw-line", "use gecko_bindings::structs::mozilla::css::ImageValue;", "--raw-line", "use gecko_bindings::structs::mozilla::css::URLValue;", "--raw-line", "use gecko_bindings::structs::mozilla::css::URLValueData;", "--raw-line", "use gecko_bindings::structs::mozilla::dom::CallerType;", "--raw-line", "use gecko_bindings::structs::mozilla::AnonymousCounterStyle;", "--raw-line", "use gecko_bindings::structs::mozilla::AtomArray;", "--raw-line", "use gecko_bindings::structs::mozilla::CORSMode;", "--raw-line", "use gecko_bindings::structs::mozilla::MallocSizeOf;", "--raw-line", "use gecko_bindings::structs::mozilla::OriginFlags;", "--raw-line", "use gecko_bindings::structs::mozilla::UniquePtr;", "--raw-line", "use gecko_bindings::structs::ServoRawOffsetArc;", "--raw-line", "use gecko_bindings::structs::nsIContent;", "--raw-line", "use gecko_bindings::structs::nsIDocument;", "--raw-line", "use gecko_bindings::structs::nsIDocument_DocumentTheme;", "--raw-line", "use gecko_bindings::structs::nsSimpleContentList;", "--raw-line", "use gecko_bindings::structs::MediumFeaturesChangedResult;", "--raw-line", "use gecko_bindings::structs::RawGeckoAnimationPropertySegment;", "--raw-line", "use gecko_bindings::structs::RawGeckoComputedTiming;", "--raw-line", "use gecko_bindings::structs::RawGeckoCSSPropertyIDList;", "--raw-line", "use gecko_bindings::structs::RawGeckoDocument;", "--raw-line", "use gecko_bindings::structs::RawGeckoElement;", "--raw-line", "use gecko_bindings::structs::Element;", "--raw-line", "use gecko_bindings::structs::RawGeckoKeyframeList;", "--raw-line", "use gecko_bindings::structs::RawGeckoPropertyValuePairList;", "--raw-line", "use gecko_bindings::structs::RawGeckoComputedKeyframeValuesList;", "--raw-line", "use gecko_bindings::structs::RawGeckoFontFaceRuleList;", "--raw-line", "use gecko_bindings::structs::RawGeckoNode;", "--raw-line", "use gecko_bindings::structs::RawServoAnimationValue;", "--raw-line", "use gecko_bindings::structs::RawGeckoServoAnimationValueList;", "--raw-line", "use gecko_bindings::structs::RawServoMediaList;", "--raw-line", "use gecko_bindings::structs::RawServoStyleSheetContents;", "--raw-line", "use gecko_bindings::structs::RawServoDeclarationBlock;", "--raw-line", "use gecko_bindings::structs::RawServoStyleRule;", "--raw-line", "use gecko_bindings::structs::RawGeckoPresContext;", "--raw-line", "use gecko_bindings::structs::RawGeckoPresContextOwned;", "--raw-line", "use gecko_bindings::structs::RawGeckoStyleAnimationList;", "--raw-line", "use gecko_bindings::structs::RawGeckoStyleChildrenIterator;", "--raw-line", "use gecko_bindings::structs::RawGeckoServoStyleRuleList;", "--raw-line", "use gecko_bindings::structs::RawGeckoURLExtraData;", "--raw-line", "use gecko_bindings::structs::RawGeckoXBLBinding;", "--raw-line", "use gecko_bindings::structs::RawServoSelectorList;", "--raw-line", "use gecko_bindings::structs::RawServoSourceSizeList;", "--raw-line", "use gecko_bindings::structs::RefPtr;", "--raw-line", "use gecko_bindings::structs::RustString;", "--raw-line", "use gecko_bindings::structs::CSSPseudoClassType;", "--raw-line", "use gecko_bindings::structs::CSSPseudoElementType;", "--raw-line", "use gecko_bindings::structs::ServoTraversalFlags;", "--raw-line", "use gecko_bindings::structs::ComputedTimingFunction_BeforeFlag;", "--raw-line", "use gecko_bindings::structs::CounterStylePtr;", "--raw-line", "use gecko_bindings::structs::FontFamilyType;", "--raw-line", "use gecko_bindings::structs::FontSizePrefs;", "--raw-line", "use gecko_bindings::structs::GeckoFontMetrics;", "--raw-line", "use gecko_bindings::structs::IterationCompositeOperation;", "--raw-line", "use gecko_bindings::structs::Keyframe;", "--raw-line", "use gecko_bindings::structs::PropertyValuePair;", "--raw-line", "use gecko_bindings::structs::SeenPtrs;", "--raw-line", "use gecko_bindings::structs::ServoBundledURI;", "--raw-line", "use gecko_bindings::structs::ServoElementSnapshot;", "--raw-line", "use gecko_bindings::structs::ServoElementSnapshotTable;", "--raw-line", "use gecko_bindings::structs::ServoStyleSetSizes;", "--raw-line", "use gecko_bindings::structs::SheetParsingMode;", "--raw-line", "use gecko_bindings::structs::StyleBasicShapeType;", "--raw-line", "use gecko_bindings::structs::StyleShapeSource;", "--raw-line", "use gecko_bindings::structs::StyleTransition;", "--raw-line", "use gecko_bindings::structs::gfxFontFeatureValueSet;", "--raw-line", "use gecko_bindings::structs::nsCSSCounterDesc;", "--raw-line", "use gecko_bindings::structs::nsCSSCounterStyleRule;", "--raw-line", "use gecko_bindings::structs::nsCSSFontDesc;", "--raw-line", "use gecko_bindings::structs::nsCSSFontFaceRule;", "--raw-line", "use gecko_bindings::structs::nsCSSKeyword;", "--raw-line", "use gecko_bindings::structs::nsCSSPropertyID;", "--raw-line", "use gecko_bindings::structs::nsCSSPropertyIDSet;", "--raw-line", "use gecko_bindings::structs::nsCSSRect;", "--raw-line", "use gecko_bindings::structs::nsCSSShadowArray;", "--raw-line", "use gecko_bindings::structs::nsCSSUnit;", "--raw-line", "use gecko_bindings::structs::nsCSSValue;", "--raw-line", "use gecko_bindings::structs::nsCSSValueSharedList;", "--raw-line", "use gecko_bindings::structs::nsChangeHint;", "--raw-line", "use gecko_bindings::structs::nsCursorImage;", "--raw-line", "use gecko_bindings::structs::nsFont;", "--raw-line", "use gecko_bindings::structs::nsAtom;", "--raw-line", "use gecko_bindings::structs::nsIURI;", "--raw-line", "use gecko_bindings::structs::nsCompatibility;", "--raw-line", "use gecko_bindings::structs::nsRestyleHint;", "--raw-line", "use gecko_bindings::structs::nsStyleBackground;", "--raw-line", "unsafe impl Send for nsStyleBackground {}", "--raw-line", "unsafe impl Sync for nsStyleBackground {}", "--raw-line", "use gecko_bindings::structs::nsStyleBorder;", "--raw-line", "unsafe impl Send for nsStyleBorder {}", "--raw-line", "unsafe impl Sync for nsStyleBorder {}", "--raw-line", "use gecko_bindings::structs::nsStyleColor;", "--raw-line", "unsafe impl Send for nsStyleColor {}", "--raw-line", "unsafe impl Sync for nsStyleColor {}", "--raw-line", "use gecko_bindings::structs::nsStyleColumn;", "--raw-line", "unsafe impl Send for nsStyleColumn {}", "--raw-line", "unsafe impl Sync for nsStyleColumn {}", "--raw-line", "use gecko_bindings::structs::nsStyleContent;", "--raw-line", "unsafe impl Send for nsStyleContent {}", "--raw-line", "unsafe impl Sync for nsStyleContent {}", "--raw-line", "use gecko_bindings::structs::nsStyleContentData;", "--raw-line", "unsafe impl Send for nsStyleContentData {}", "--raw-line", "unsafe impl Sync for nsStyleContentData {}", "--raw-line", "use gecko_bindings::structs::nsStyleContentData_CounterFunction;", "--raw-line", "unsafe impl Send for nsStyleContentData_CounterFunction {}", "--raw-line", "unsafe impl Sync for nsStyleContentData_CounterFunction {}", "--raw-line", "use gecko_bindings::structs::nsStyleContentType;", "--raw-line", "unsafe impl Send for nsStyleContentType {}", "--raw-line", "unsafe impl Sync for nsStyleContentType {}", "--raw-line", "use gecko_bindings::structs::nsStyleContext;", "--raw-line", "unsafe impl Send for nsStyleContext {}", "--raw-line", "unsafe impl Sync for nsStyleContext {}", "--raw-line", "use gecko_bindings::structs::nsStyleCoord;", "--raw-line", "unsafe impl Send for nsStyleCoord {}", "--raw-line", "unsafe impl Sync for nsStyleCoord {}", "--raw-line", "use gecko_bindings::structs::nsStyleCoord_Calc;", "--raw-line", "unsafe impl Send for nsStyleCoord_Calc {}", "--raw-line", "unsafe impl Sync for nsStyleCoord_Calc {}", "--raw-line", "use gecko_bindings::structs::nsStyleCoord_CalcValue;", "--raw-line", "unsafe impl Send for nsStyleCoord_CalcValue {}", "--raw-line", "unsafe impl Sync for nsStyleCoord_CalcValue {}", "--raw-line", "use gecko_bindings::structs::nsStyleDisplay;", "--raw-line", "unsafe impl Send for nsStyleDisplay {}", "--raw-line", "unsafe impl Sync for nsStyleDisplay {}", "--raw-line", "use gecko_bindings::structs::nsStyleEffects;", "--raw-line", "unsafe impl Send for nsStyleEffects {}", "--raw-line", "unsafe impl Sync for nsStyleEffects {}", "--raw-line", "use gecko_bindings::structs::nsStyleFilter;", "--raw-line", "unsafe impl Send for nsStyleFilter {}", "--raw-line", "unsafe impl Sync for nsStyleFilter {}", "--raw-line", "use gecko_bindings::structs::nsStyleFont;", "--raw-line", "unsafe impl Send for nsStyleFont {}", "--raw-line", "unsafe impl Sync for nsStyleFont {}", "--raw-line", "use gecko_bindings::structs::nsStyleGradient;", "--raw-line", "unsafe impl Send for nsStyleGradient {}", "--raw-line", "unsafe impl Sync for nsStyleGradient {}", "--raw-line", "use gecko_bindings::structs::nsStyleGradientStop;", "--raw-line", "unsafe impl Send for nsStyleGradientStop {}", "--raw-line", "unsafe impl Sync for nsStyleGradientStop {}", "--raw-line", "use gecko_bindings::structs::nsStyleGridTemplate;", "--raw-line", "unsafe impl Send for nsStyleGridTemplate {}", "--raw-line", "unsafe impl Sync for nsStyleGridTemplate {}", "--raw-line", "use gecko_bindings::structs::nsStyleImage;", "--raw-line", "unsafe impl Send for nsStyleImage {}", "--raw-line", "unsafe impl Sync for nsStyleImage {}", "--raw-line", "use gecko_bindings::structs::nsStyleImageLayers;", "--raw-line", "unsafe impl Send for nsStyleImageLayers {}", "--raw-line", "unsafe impl Sync for nsStyleImageLayers {}", "--raw-line", "use gecko_bindings::structs::nsStyleImageLayers_Layer;", "--raw-line", "unsafe impl Send for nsStyleImageLayers_Layer {}", "--raw-line", "unsafe impl Sync for nsStyleImageLayers_Layer {}", "--raw-line", "use gecko_bindings::structs::nsStyleImageLayers_LayerType;", "--raw-line", "unsafe impl Send for nsStyleImageLayers_LayerType {}", "--raw-line", "unsafe impl Sync for nsStyleImageLayers_LayerType {}", "--raw-line", "use gecko_bindings::structs::nsStyleImageRequest;", "--raw-line", "unsafe impl Send for nsStyleImageRequest {}", "--raw-line", "unsafe impl Sync for nsStyleImageRequest {}", "--raw-line", "use gecko_bindings::structs::nsStyleList;", "--raw-line", "unsafe impl Send for nsStyleList {}", "--raw-line", "unsafe impl Sync for nsStyleList {}", "--raw-line", "use gecko_bindings::structs::nsStyleMargin;", "--raw-line", "unsafe impl Send for nsStyleMargin {}", "--raw-line", "unsafe impl Sync for nsStyleMargin {}", "--raw-line", "use gecko_bindings::structs::nsStyleOutline;", "--raw-line", "unsafe impl Send for nsStyleOutline {}", "--raw-line", "unsafe impl Sync for nsStyleOutline {}", "--raw-line", "use gecko_bindings::structs::nsStylePadding;", "--raw-line", "unsafe impl Send for nsStylePadding {}", "--raw-line", "unsafe impl Sync for nsStylePadding {}", "--raw-line", "use gecko_bindings::structs::nsStylePosition;", "--raw-line", "unsafe impl Send for nsStylePosition {}", "--raw-line", "unsafe impl Sync for nsStylePosition {}", "--raw-line", "use gecko_bindings::structs::nsStyleQuoteValues;", "--raw-line", "unsafe impl Send for nsStyleQuoteValues {}", "--raw-line", "unsafe impl Sync for nsStyleQuoteValues {}", "--raw-line", "use gecko_bindings::structs::nsStyleSVG;", "--raw-line", "unsafe impl Send for nsStyleSVG {}", "--raw-line", "unsafe impl Sync for nsStyleSVG {}", "--raw-line", "use gecko_bindings::structs::nsStyleSVGOpacitySource;", "--raw-line", "unsafe impl Send for nsStyleSVGOpacitySource {}", "--raw-line", "unsafe impl Sync for nsStyleSVGOpacitySource {}", "--raw-line", "use gecko_bindings::structs::nsStyleSVGPaint;", "--raw-line", "unsafe impl Send for nsStyleSVGPaint {}", "--raw-line", "unsafe impl Sync for nsStyleSVGPaint {}", "--raw-line", "use gecko_bindings::structs::nsStyleSVGReset;", "--raw-line", "unsafe impl Send for nsStyleSVGReset {}", "--raw-line", "unsafe impl Sync for nsStyleSVGReset {}", "--raw-line", "use gecko_bindings::structs::nsStyleTable;", "--raw-line", "unsafe impl Send for nsStyleTable {}", "--raw-line", "unsafe impl Sync for nsStyleTable {}", "--raw-line", "use gecko_bindings::structs::nsStyleTableBorder;", "--raw-line", "unsafe impl Send for nsStyleTableBorder {}", "--raw-line", "unsafe impl Sync for nsStyleTableBorder {}", "--raw-line", "use gecko_bindings::structs::nsStyleText;", "--raw-line", "unsafe impl Send for nsStyleText {}", "--raw-line", "unsafe impl Sync for nsStyleText {}", "--raw-line", "use gecko_bindings::structs::nsStyleTextReset;", "--raw-line", "unsafe impl Send for nsStyleTextReset {}", "--raw-line", "unsafe impl Sync for nsStyleTextReset {}", "--raw-line", "use gecko_bindings::structs::nsStyleUIReset;", "--raw-line", "unsafe impl Send for nsStyleUIReset {}", "--raw-line", "unsafe impl Sync for nsStyleUIReset {}", "--raw-line", "use gecko_bindings::structs::nsStyleUnion;", "--raw-line", "unsafe impl Send for nsStyleUnion {}", "--raw-line", "unsafe impl Sync for nsStyleUnion {}", "--raw-line", "use gecko_bindings::structs::nsStyleUnit;", "--raw-line", "unsafe impl Send for nsStyleUnit {}", "--raw-line", "unsafe impl Sync for nsStyleUnit {}", "--raw-line", "use gecko_bindings::structs::nsStyleUserInterface;", "--raw-line", "unsafe impl Send for nsStyleUserInterface {}", "--raw-line", "unsafe impl Sync for nsStyleUserInterface {}", "--raw-line", "use gecko_bindings::structs::nsStyleVariables;", "--raw-line", "unsafe impl Send for nsStyleVariables {}", "--raw-line", "unsafe impl Sync for nsStyleVariables {}", "--raw-line", "use gecko_bindings::structs::nsStyleVisibility;", "--raw-line", "unsafe impl Send for nsStyleVisibility {}", "--raw-line", "unsafe impl Sync for nsStyleVisibility {}", "--raw-line", "use gecko_bindings::structs::nsStyleXUL;", "--raw-line", "unsafe impl Send for nsStyleXUL {}", "--raw-line", "unsafe impl Sync for nsStyleXUL {}", "--raw-line", "use gecko_bindings::structs::nsTimingFunction;", "--raw-line", "use gecko_bindings::structs::nscolor;", "--raw-line", "use gecko_bindings::structs::nscoord;", "--raw-line", "use gecko_bindings::structs::nsresult;", "--raw-line", "use gecko_bindings::structs::Loader;", "--raw-line", "use gecko_bindings::structs::LoaderReusableStyleSheets;", "--raw-line", "use gecko_bindings::structs::SheetLoadData;", "--raw-line", "use gecko_bindings::structs::ServoStyleSheet;", "--raw-line", "use gecko_bindings::structs::ServoComputedData;", "--raw-line", "use gecko_bindings::structs::ServoStyleContext;", "--raw-line", "use gecko_bindings::structs::ServoStyleContextStrong;", "--raw-line", "use gecko_bindings::structs::EffectCompositor_CascadeLevel;", "--raw-line", "use gecko_bindings::structs::UpdateAnimationsTasks;", "--raw-line", "use gecko_bindings::structs::ParsingMode;", "--raw-line", "use gecko_bindings::structs::InheritTarget;", "--raw-line", "use gecko_bindings::structs::URLMatchingFunction;", "--raw-line", "use gecko_bindings::structs::StyleAnimation;", "--raw-line", "use gecko_bindings::structs::StyleRuleInclusion;", "--raw-line", "use gecko_bindings::structs::nsStyleTransformMatrix::MatrixTransformOperator;", "--raw-line", "unsafe impl Send for nsStyleTransformMatrix::MatrixTransformOperator {}", "--raw-line", "unsafe impl Sync for nsStyleTransformMatrix::MatrixTransformOperator {}", "--raw-line", "use gecko_bindings::structs::RawGeckoGfxMatrix4x4;", "--raw-line", "use gecko_bindings::structs::FontFamilyName;", "--raw-line", "use gecko_bindings::structs::mozilla::SharedFontList;", "--raw-line", "pub type nsTArrayBorrowed_uintptr_t<\'a> = &\'a mut ::gecko_bindings::structs::nsTArray<usize>;", "--raw-line", "pub type RawServoStyleSetOwned = ::gecko_bindings::sugar::ownership::Owned<RawServoStyleSet>;", "--raw-line", "pub type RawServoStyleSetOwnedOrNull = ::gecko_bindings::sugar::ownership::OwnedOrNull<RawServoStyleSet>;", "--raw-line", "pub type RawServoStyleSetBorrowed<\'a> = &\'a RawServoStyleSet;", "--raw-line", "pub type RawServoStyleSetBorrowedOrNull<\'a> = Option<&\'a RawServoStyleSet>;", "--raw-line", "pub type RawServoStyleSetBorrowedMut<\'a> = &\'a mut RawServoStyleSet;", "--raw-line", "pub type RawServoStyleSetBorrowedMutOrNull<\'a> = Option<&\'a mut RawServoStyleSet>;", "--raw-line", "enum RawServoStyleSetVoid { }", "--raw-line", "pub struct RawServoStyleSet(RawServoStyleSetVoid);", "--raw-line", "pub type RawServoAuthorStylesOwned = ::gecko_bindings::sugar::ownership::Owned<RawServoAuthorStyles>;", "--raw-line", "pub type RawServoAuthorStylesOwnedOrNull = ::gecko_bindings::sugar::ownership::OwnedOrNull<RawServoAuthorStyles>;", "--raw-line", "pub type RawServoAuthorStylesBorrowed<\'a> = &\'a RawServoAuthorStyles;", "--raw-line", "pub type RawServoAuthorStylesBorrowedOrNull<\'a> = Option<&\'a RawServoAuthorStyles>;", "--raw-line", "pub type RawServoAuthorStylesBorrowedMut<\'a> = &\'a mut RawServoAuthorStyles;", "--raw-line", "pub type RawServoAuthorStylesBorrowedMutOrNull<\'a> = Option<&\'a mut RawServoAuthorStyles>;", "--raw-line", "enum RawServoAuthorStylesVoid { }", "--raw-line", "pub struct RawServoAuthorStyles(RawServoAuthorStylesVoid);", "--raw-line", "pub type RawServoSelectorListOwned = ::gecko_bindings::sugar::ownership::Owned<RawServoSelectorList>;", "--raw-line", "pub type RawServoSelectorListOwnedOrNull = ::gecko_bindings::sugar::ownership::OwnedOrNull<RawServoSelectorList>;", "--raw-line", "pub type RawServoSelectorListBorrowed<\'a> = &\'a RawServoSelectorList;", "--raw-line", "pub type RawServoSelectorListBorrowedOrNull<\'a> = Option<&\'a RawServoSelectorList>;", "--raw-line", "pub type RawServoSelectorListBorrowedMut<\'a> = &\'a mut RawServoSelectorList;", "--raw-line", "pub type RawServoSelectorListBorrowedMutOrNull<\'a> = Option<&\'a mut RawServoSelectorList>;", "--raw-line", "pub type RawServoSourceSizeListOwned = ::gecko_bindings::sugar::ownership::Owned<RawServoSourceSizeList>;", "--raw-line", "pub type RawServoSourceSizeListOwnedOrNull = ::gecko_bindings::sugar::ownership::OwnedOrNull<RawServoSourceSizeList>;", "--raw-line", "pub type RawServoSourceSizeListBorrowed<\'a> = &\'a RawServoSourceSizeList;", "--raw-line", "pub type RawServoSourceSizeListBorrowedOrNull<\'a> = Option<&\'a RawServoSourceSizeList>;", "--raw-line", "pub type RawServoSourceSizeListBorrowedMut<\'a> = &\'a mut RawServoSourceSizeList;", "--raw-line", "pub type RawServoSourceSizeListBorrowedMutOrNull<\'a> = Option<&\'a mut RawServoSourceSizeList>;", "--raw-line", "pub type ServoElementSnapshotOwned = ::gecko_bindings::sugar::ownership::Owned<ServoElementSnapshot>;", "--raw-line", "pub type ServoElementSnapshotOwnedOrNull = ::gecko_bindings::sugar::ownership::OwnedOrNull<ServoElementSnapshot>;", "--raw-line", "pub type ServoElementSnapshotBorrowed<\'a> = &\'a ServoElementSnapshot;", "--raw-line", "pub type ServoElementSnapshotBorrowedOrNull<\'a> = Option<&\'a ServoElementSnapshot>;", "--raw-line", "pub type ServoElementSnapshotBorrowedMut<\'a> = &\'a mut ServoElementSnapshot;", "--raw-line", "pub type ServoElementSnapshotBorrowedMutOrNull<\'a> = Option<&\'a mut ServoElementSnapshot>;", "--raw-line", "pub type RawServoAnimationValueMapOwned = ::gecko_bindings::sugar::ownership::Owned<RawServoAnimationValueMap>;", "--raw-line", "pub type RawServoAnimationValueMapOwnedOrNull = ::gecko_bindings::sugar::ownership::OwnedOrNull<RawServoAnimationValueMap>;", "--raw-line", "pub type RawServoAnimationValueMapBorrowed<\'a> = &\'a RawServoAnimationValueMap;", "--raw-line", "pub type RawServoAnimationValueMapBorrowedOrNull<\'a> = Option<&\'a RawServoAnimationValueMap>;", "--raw-line", "pub type RawServoAnimationValueMapBorrowedMut<\'a> = &\'a mut RawServoAnimationValueMap;", "--raw-line", "pub type RawServoAnimationValueMapBorrowedMutOrNull<\'a> = Option<&\'a mut RawServoAnimationValueMap>;", "--raw-line", "enum RawServoAnimationValueMapVoid { }", "--raw-line", "pub struct RawServoAnimationValueMap(RawServoAnimationValueMapVoid);", "--raw-line", "pub type RawGeckoNodeBorrowed<\'a> = &\'a RawGeckoNode;", "--raw-line", "pub type RawGeckoNodeBorrowedOrNull<\'a> = Option<&\'a RawGeckoNode>;", "--raw-line", "pub type RawGeckoElementBorrowed<\'a> = &\'a RawGeckoElement;", "--raw-line", "pub type RawGeckoElementBorrowedOrNull<\'a> = Option<&\'a RawGeckoElement>;", "--raw-line", "pub type RawGeckoDocumentBorrowed<\'a> = &\'a RawGeckoDocument;", "--raw-line", "pub type RawGeckoDocumentBorrowedOrNull<\'a> = Option<&\'a RawGeckoDocument>;", "--raw-line", "pub type RawServoDeclarationBlockStrongBorrowed<\'a> = &\'a RawServoDeclarationBlockStrong;", "--raw-line", "pub type RawServoDeclarationBlockStrongBorrowedOrNull<\'a> = Option<&\'a RawServoDeclarationBlockStrong>;", "--raw-line", "pub type RawGeckoPresContextBorrowed<\'a> = &\'a RawGeckoPresContext;", "--raw-line", "pub type RawGeckoPresContextBorrowedOrNull<\'a> = Option<&\'a RawGeckoPresContext>;", "--raw-line", "pub type RawGeckoXBLBindingBorrowed<\'a> = &\'a RawGeckoXBLBinding;", "--raw-line", "pub type RawGeckoXBLBindingBorrowedOrNull<\'a> = Option<&\'a RawGeckoXBLBinding>;", "--raw-line", "pub type nsCSSPropertyIDSetBorrowed<\'a> = &\'a nsCSSPropertyIDSet;", "--raw-line", "pub type nsCSSPropertyIDSetBorrowedOrNull<\'a> = Option<&\'a nsCSSPropertyIDSet>;", "--raw-line", "pub type nsCSSPropertyIDSetBorrowedMut<\'a> = &\'a mut nsCSSPropertyIDSet;", "--raw-line", "pub type nsCSSPropertyIDSetBorrowedMutOrNull<\'a> = Option<&\'a mut nsCSSPropertyIDSet>;", "--raw-line", "pub type nsCSSValueBorrowed<\'a> = &\'a nsCSSValue;", "--raw-line", "pub type nsCSSValueBorrowedOrNull<\'a> = Option<&\'a nsCSSValue>;", "--raw-line", "pub type nsCSSValueBorrowedMut<\'a> = &\'a mut nsCSSValue;", "--raw-line", "pub type nsCSSValueBorrowedMutOrNull<\'a> = Option<&\'a mut nsCSSValue>;", "--raw-line", "pub type nsTimingFunctionBorrowed<\'a> = &\'a nsTimingFunction;", "--raw-line", "pub type nsTimingFunctionBorrowedOrNull<\'a> = Option<&\'a nsTimingFunction>;", "--raw-line", "pub type nsTimingFunctionBorrowedMut<\'a> = &\'a mut nsTimingFunction;", "--raw-line", "pub type nsTimingFunctionBorrowedMutOrNull<\'a> = Option<&\'a mut nsTimingFunction>;", "--raw-line", "pub type RawGeckoAnimationPropertySegmentBorrowed<\'a> = &\'a RawGeckoAnimationPropertySegment;", "--raw-line", "pub type RawGeckoAnimationPropertySegmentBorrowedOrNull<\'a> = Option<&\'a RawGeckoAnimationPropertySegment>;", "--raw-line", "pub type RawGeckoAnimationPropertySegmentBorrowedMut<\'a> = &\'a mut RawGeckoAnimationPropertySegment;", "--raw-line", "pub type RawGeckoAnimationPropertySegmentBorrowedMutOrNull<\'a> = Option<&\'a mut RawGeckoAnimationPropertySegment>;", "--raw-line", "pub type RawGeckoComputedTimingBorrowed<\'a> = &\'a RawGeckoComputedTiming;", "--raw-line", "pub type RawGeckoComputedTimingBorrowedOrNull<\'a> = Option<&\'a RawGeckoComputedTiming>;", "--raw-line", "pub type RawGeckoComputedTimingBorrowedMut<\'a> = &\'a mut RawGeckoComputedTiming;", "--raw-line", "pub type RawGeckoComputedTimingBorrowedMutOrNull<\'a> = Option<&\'a mut RawGeckoComputedTiming>;", "--raw-line", "pub type RawGeckoCSSPropertyIDListBorrowed<\'a> = &\'a RawGeckoCSSPropertyIDList;", "--raw-line", "pub type RawGeckoCSSPropertyIDListBorrowedOrNull<\'a> = Option<&\'a RawGeckoCSSPropertyIDList>;", "--raw-line", "pub type RawGeckoCSSPropertyIDListBorrowedMut<\'a> = &\'a mut RawGeckoCSSPropertyIDList;", "--raw-line", "pub type RawGeckoCSSPropertyIDListBorrowedMutOrNull<\'a> = Option<&\'a mut RawGeckoCSSPropertyIDList>;", "--raw-line", "pub type RawGeckoKeyframeListBorrowed<\'a> = &\'a RawGeckoKeyframeList;", "--raw-line", "pub type RawGeckoKeyframeListBorrowedOrNull<\'a> = Option<&\'a RawGeckoKeyframeList>;", "--raw-line", "pub type RawGeckoKeyframeListBorrowedMut<\'a> = &\'a mut RawGeckoKeyframeList;", "--raw-line", "pub type RawGeckoKeyframeListBorrowedMutOrNull<\'a> = Option<&\'a mut RawGeckoKeyframeList>;", "--raw-line", "pub type RawGeckoPropertyValuePairListBorrowed<\'a> = &\'a RawGeckoPropertyValuePairList;", "--raw-line", "pub type RawGeckoPropertyValuePairListBorrowedOrNull<\'a> = Option<&\'a RawGeckoPropertyValuePairList>;", "--raw-line", "pub type RawGeckoPropertyValuePairListBorrowedMut<\'a> = &\'a mut RawGeckoPropertyValuePairList;", "--raw-line", "pub type RawGeckoPropertyValuePairListBorrowedMutOrNull<\'a> = Option<&\'a mut RawGeckoPropertyValuePairList>;", "--raw-line", "pub type RawGeckoComputedKeyframeValuesListBorrowed<\'a> = &\'a RawGeckoComputedKeyframeValuesList;", "--raw-line", "pub type RawGeckoComputedKeyframeValuesListBorrowedOrNull<\'a> = Option<&\'a RawGeckoComputedKeyframeValuesList>;", "--raw-line", "pub type RawGeckoComputedKeyframeValuesListBorrowedMut<\'a> = &\'a mut RawGeckoComputedKeyframeValuesList;", "--raw-line", "pub type RawGeckoComputedKeyframeValuesListBorrowedMutOrNull<\'a> = Option<&\'a mut RawGeckoComputedKeyframeValuesList>;", "--raw-line", "pub type RawGeckoFontFaceRuleListBorrowed<\'a> = &\'a RawGeckoFontFaceRuleList;", "--raw-line", "pub type RawGeckoFontFaceRuleListBorrowedOrNull<\'a> = Option<&\'a RawGeckoFontFaceRuleList>;", "--raw-line", "pub type RawGeckoFontFaceRuleListBorrowedMut<\'a> = &\'a mut RawGeckoFontFaceRuleList;", "--raw-line", "pub type RawGeckoFontFaceRuleListBorrowedMutOrNull<\'a> = Option<&\'a mut RawGeckoFontFaceRuleList>;", "--raw-line", "pub type RawGeckoServoStyleRuleListBorrowed<\'a> = &\'a RawGeckoServoStyleRuleList;", "--raw-line", "pub type RawGeckoServoStyleRuleListBorrowedOrNull<\'a> = Option<&\'a RawGeckoServoStyleRuleList>;", "--raw-line", "pub type RawGeckoServoStyleRuleListBorrowedMut<\'a> = &\'a mut RawGeckoServoStyleRuleList;", "--raw-line", "pub type RawGeckoServoStyleRuleListBorrowedMutOrNull<\'a> = Option<&\'a mut RawGeckoServoStyleRuleList>;", "--raw-line", "pub type RawGeckoServoAnimationValueListBorrowed<\'a> = &\'a RawGeckoServoAnimationValueList;", "--raw-line", "pub type RawGeckoServoAnimationValueListBorrowedOrNull<\'a> = Option<&\'a RawGeckoServoAnimationValueList>;", "--raw-line", "pub type RawGeckoServoAnimationValueListBorrowedMut<\'a> = &\'a mut RawGeckoServoAnimationValueList;", "--raw-line", "pub type RawGeckoServoAnimationValueListBorrowedMutOrNull<\'a> = Option<&\'a mut RawGeckoServoAnimationValueList>;", "--raw-line", "pub type RawGeckoStyleAnimationListBorrowed<\'a> = &\'a RawGeckoStyleAnimationList;", "--raw-line", "pub type RawGeckoStyleAnimationListBorrowedOrNull<\'a> = Option<&\'a RawGeckoStyleAnimationList>;", "--raw-line", "pub type RawGeckoStyleAnimationListBorrowedMut<\'a> = &\'a mut RawGeckoStyleAnimationList;", "--raw-line", "pub type RawGeckoStyleAnimationListBorrowedMutOrNull<\'a> = Option<&\'a mut RawGeckoStyleAnimationList>;", "--raw-line", "pub type RawGeckoStyleChildrenIteratorBorrowed<\'a> = &\'a RawGeckoStyleChildrenIterator;", "--raw-line", "pub type RawGeckoStyleChildrenIteratorBorrowedOrNull<\'a> = Option<&\'a RawGeckoStyleChildrenIterator>;", "--raw-line", "pub type RawGeckoStyleChildrenIteratorBorrowedMut<\'a> = &\'a mut RawGeckoStyleChildrenIterator;", "--raw-line", "pub type RawGeckoStyleChildrenIteratorBorrowedMutOrNull<\'a> = Option<&\'a mut RawGeckoStyleChildrenIterator>;", "--raw-line", "pub type ServoCssRulesStrong = ::gecko_bindings::sugar::ownership::Strong<ServoCssRules>;", "--raw-line", "pub type ServoCssRulesBorrowed<\'a> = &\'a ServoCssRules;", "--raw-line", "pub type ServoCssRulesBorrowedOrNull<\'a> = Option<&\'a ServoCssRules>;", "--raw-line", "enum ServoCssRulesVoid { }", "--raw-line", "pub struct ServoCssRules(ServoCssRulesVoid);", "--raw-line", "pub type RawServoStyleSheetContentsStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoStyleSheetContents>;", "--raw-line", "pub type RawServoStyleSheetContentsBorrowed<\'a> = &\'a RawServoStyleSheetContents;", "--raw-line", "pub type RawServoStyleSheetContentsBorrowedOrNull<\'a> = Option<&\'a RawServoStyleSheetContents>;", "--raw-line", "pub type RawServoDeclarationBlockStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoDeclarationBlock>;", "--raw-line", "pub type RawServoDeclarationBlockBorrowed<\'a> = &\'a RawServoDeclarationBlock;", "--raw-line", "pub type RawServoDeclarationBlockBorrowedOrNull<\'a> = Option<&\'a RawServoDeclarationBlock>;", "--raw-line", "pub type RawServoStyleRuleStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoStyleRule>;", "--raw-line", "pub type RawServoStyleRuleBorrowed<\'a> = &\'a RawServoStyleRule;", "--raw-line", "pub type RawServoStyleRuleBorrowedOrNull<\'a> = Option<&\'a RawServoStyleRule>;", "--raw-line", "pub type RawServoImportRuleStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoImportRule>;", "--raw-line", "pub type RawServoImportRuleBorrowed<\'a> = &\'a RawServoImportRule;", "--raw-line", "pub type RawServoImportRuleBorrowedOrNull<\'a> = Option<&\'a RawServoImportRule>;", "--raw-line", "enum RawServoImportRuleVoid { }", "--raw-line", "pub struct RawServoImportRule(RawServoImportRuleVoid);", "--raw-line", "pub type RawServoAnimationValueStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoAnimationValue>;", "--raw-line", "pub type RawServoAnimationValueBorrowed<\'a> = &\'a RawServoAnimationValue;", "--raw-line", "pub type RawServoAnimationValueBorrowedOrNull<\'a> = Option<&\'a RawServoAnimationValue>;", "--raw-line", "pub type RawServoKeyframeStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoKeyframe>;", "--raw-line", "pub type RawServoKeyframeBorrowed<\'a> = &\'a RawServoKeyframe;", "--raw-line", "pub type RawServoKeyframeBorrowedOrNull<\'a> = Option<&\'a RawServoKeyframe>;", "--raw-line", "enum RawServoKeyframeVoid { }", "--raw-line", "pub struct RawServoKeyframe(RawServoKeyframeVoid);", "--raw-line", "pub type RawServoKeyframesRuleStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoKeyframesRule>;", "--raw-line", "pub type RawServoKeyframesRuleBorrowed<\'a> = &\'a RawServoKeyframesRule;", "--raw-line", "pub type RawServoKeyframesRuleBorrowedOrNull<\'a> = Option<&\'a RawServoKeyframesRule>;", "--raw-line", "enum RawServoKeyframesRuleVoid { }", "--raw-line", "pub struct RawServoKeyframesRule(RawServoKeyframesRuleVoid);", "--raw-line", "pub type RawServoMediaListStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoMediaList>;", "--raw-line", "pub type RawServoMediaListBorrowed<\'a> = &\'a RawServoMediaList;", "--raw-line", "pub type RawServoMediaListBorrowedOrNull<\'a> = Option<&\'a RawServoMediaList>;", "--raw-line", "pub type RawServoMediaRuleStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoMediaRule>;", "--raw-line", "pub type RawServoMediaRuleBorrowed<\'a> = &\'a RawServoMediaRule;", "--raw-line", "pub type RawServoMediaRuleBorrowedOrNull<\'a> = Option<&\'a RawServoMediaRule>;", "--raw-line", "enum RawServoMediaRuleVoid { }", "--raw-line", "pub struct RawServoMediaRule(RawServoMediaRuleVoid);", "--raw-line", "pub type RawServoNamespaceRuleStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoNamespaceRule>;", "--raw-line", "pub type RawServoNamespaceRuleBorrowed<\'a> = &\'a RawServoNamespaceRule;", "--raw-line", "pub type RawServoNamespaceRuleBorrowedOrNull<\'a> = Option<&\'a RawServoNamespaceRule>;", "--raw-line", "enum RawServoNamespaceRuleVoid { }", "--raw-line", "pub struct RawServoNamespaceRule(RawServoNamespaceRuleVoid);", "--raw-line", "pub type RawServoPageRuleStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoPageRule>;", "--raw-line", "pub type RawServoPageRuleBorrowed<\'a> = &\'a RawServoPageRule;", "--raw-line", "pub type RawServoPageRuleBorrowedOrNull<\'a> = Option<&\'a RawServoPageRule>;", "--raw-line", "enum RawServoPageRuleVoid { }", "--raw-line", "pub struct RawServoPageRule(RawServoPageRuleVoid);", "--raw-line", "pub type RawServoSupportsRuleStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoSupportsRule>;", "--raw-line", "pub type RawServoSupportsRuleBorrowed<\'a> = &\'a RawServoSupportsRule;", "--raw-line", "pub type RawServoSupportsRuleBorrowedOrNull<\'a> = Option<&\'a RawServoSupportsRule>;", "--raw-line", "enum RawServoSupportsRuleVoid { }", "--raw-line", "pub struct RawServoSupportsRule(RawServoSupportsRuleVoid);", "--raw-line", "pub type RawServoDocumentRuleStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoDocumentRule>;", "--raw-line", "pub type RawServoDocumentRuleBorrowed<\'a> = &\'a RawServoDocumentRule;", "--raw-line", "pub type RawServoDocumentRuleBorrowedOrNull<\'a> = Option<&\'a RawServoDocumentRule>;", "--raw-line", "enum RawServoDocumentRuleVoid { }", "--raw-line", "pub struct RawServoDocumentRule(RawServoDocumentRuleVoid);", "--raw-line", "pub type RawServoFontFeatureValuesRuleStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoFontFeatureValuesRule>;", "--raw-line", "pub type RawServoFontFeatureValuesRuleBorrowed<\'a> = &\'a RawServoFontFeatureValuesRule;", "--raw-line", "pub type RawServoFontFeatureValuesRuleBorrowedOrNull<\'a> = Option<&\'a RawServoFontFeatureValuesRule>;", "--raw-line", "enum RawServoFontFeatureValuesRuleVoid { }", "--raw-line", "pub struct RawServoFontFeatureValuesRule(RawServoFontFeatureValuesRuleVoid);", "--raw-line", "pub type RawServoRuleNodeStrong = ::gecko_bindings::sugar::ownership::Strong<RawServoRuleNode>;", "--raw-line", "pub type RawServoRuleNodeBorrowed<\'a> = &\'a RawServoRuleNode;", "--raw-line", "pub type RawServoRuleNodeBorrowedOrNull<\'a> = Option<&\'a RawServoRuleNode>;", "--raw-line", "enum RawServoRuleNodeVoid { }", "--raw-line", "pub struct RawServoRuleNode(RawServoRuleNodeVoid);", "--whitelist-function", "Servo_.*", "--whitelist-function", "Gecko_.*", "--", "-I", "/var/tmp/build/firefox-4d0f9fa5fdd5/obj-i686-linux-gnu/dist/include", "-I", "/var/tmp/build/firefox-4d0f9fa5fdd5/obj-i686-linux-gnu/dist/include/nspr", "-include", "/var/tmp/build/firefox-4d0f9fa5fdd5/obj-i686-linux-gnu/dist/include/mozilla-config.h", "-x", "c++", "-std=c++14", "-fno-sized-deallocation", "-DTRACING=1", "-DIMPL_LIBXUL", "-DMOZ_STYLO_BINDINGS=1", "-DMOZILLA_INTERNAL_API", "-DRUST_BINDGEN", "-DMOZ_STYLO", "-DOS_POSIX=1", "-m32", "-DOS_LINUX=1", "-I/var/tmp/build/firefox-4d0f9fa5fdd5/obj-i686-linux-gnu/dist/include/nspr", "-I/var/tmp/build/firefox-4d0f9fa5fdd5/obj-i686-linux-gnu/dist/include/nss", "-I/var/tmp/build/firefox-4d0f9fa5fdd5/obj-i686-linux-gnu/dist/include/cairo", "--no-rustfmt-bindings"]', servo/components/style/build_gecko.rs:296:17
14:26.04 stack backtrace:

When running clang with -v I found that it is using some includes from /usr/lib/gcc when called with -m64, but not with -m32. Adding the argument --gcc-toolchain=/var/tmp/dist/gcc makes it use the includes from our build of gcc. So the the build issue can be solved by adding export BINDGEN_CFLAGS='--gcc-toolchain=/var/tmp/dist/gcc' to mozconfig-linux-i686. Maybe we want to add it to mozconfig-linux-x86_64 too, so that we use the includes from our build of gcc instead of the ones from /usr/lib/gcc.

I am not sure how it works for Mozilla, but it seems they copy the gcc includes directory to their clang directory:
https://dxr.mozilla.org/mozilla-esr60/source/build/build-clang/build-clang.py#114

comment:8 in reply to:  7 Changed 4 months ago by gk

Replying to boklm:

Maybe we want to add it to mozconfig-linux-x86_64 too, so that we use the includes from our build of gcc instead of the ones from /usr/lib/gcc.

That's a good idea. Let's do that while fixing this bug.

comment:9 Changed 4 months ago by dcf

Cc: dcf added

comment:10 Changed 4 months ago by boklm

Cc: dcf removed

The build of snowflake was failing with the error:

./rendezvous.go:77:43: undefined: webrtc.SessionDescription
./rendezvous.go:78:3: undefined: webrtc.SessionDescription
./rendezvous.go:119:16: undefined: webrtc.Configuration

This is fixed by adding an export CGO_ENABLED=1. It seems that cgo is enabled by default, except when cross-compiling, which is the case when we build for linux-i686 on linux-x86_64, so the build of go-webrtc was missing the cgo parts.

I am not sure if we should add this export CGO_ENABLED=1 to var/setup in projects/go/config, so that it applies to all go projects, or add it only in projects/go-webrtc/config and projects/snowflake/config.

comment:11 Changed 4 months ago by boklm

Cc: dcf added

comment:12 in reply to:  10 ; Changed 4 months ago by dcf

Replying to boklm:

This is fixed by adding an export CGO_ENABLED=1. It seems that cgo is enabled by default, except when cross-compiling, which is the case when we build for linux-i686 on linux-x86_64, so the build of go-webrtc was missing the cgo parts.

I am not sure if we should add this export CGO_ENABLED=1 to var/setup in projects/go/config, so that it applies to all go projects, or add it only in projects/go-webrtc/config and projects/snowflake/config.

I think either way should work. It is probably sufficient to set CGO_ENABLED=1 only in the projects that use Cgo, but I don't know any disadvantages to keeping to always set.

comment:13 in reply to:  12 Changed 4 months ago by boklm

Replying to dcf:

Replying to boklm:

This is fixed by adding an export CGO_ENABLED=1. It seems that cgo is enabled by default, except when cross-compiling, which is the case when we build for linux-i686 on linux-x86_64, so the build of go-webrtc was missing the cgo parts.

I am not sure if we should add this export CGO_ENABLED=1 to var/setup in projects/go/config, so that it applies to all go projects, or add it only in projects/go-webrtc/config and projects/snowflake/config.

I think either way should work. It is probably sufficient to set CGO_ENABLED=1 only in the projects that use Cgo, but I don't know any disadvantages to keeping to always set.

Thanks! If there is no known disadvantages to keeping it always set, then I think it's easier to just set it in one place.

comment:14 Changed 4 months ago by boklm

Keywords: TorBrowserTeam201903R added; TorBrowserTeam201902 removed
Status: newneeds_revision

There are two patches for review in branch bug_26323_v7:
https://gitweb.torproject.org/user/boklm/tor-browser-build.git/commit/?h=bug_26323_v7&id=676f75ecb97484368b340ee5d355aa422c2b0a7c

I think a possible improvement we can do after this, is to share the gcc and rust builds between linux32 and linux64.

comment:15 in reply to:  14 ; Changed 3 months ago by gk

Keywords: TorBrowserTeam201903 added; TorBrowserTeam201903R removed

Replying to boklm:

There are two patches for review in branch bug_26323_v7:
https://gitweb.torproject.org/user/boklm/tor-browser-build.git/commit/?h=bug_26323_v7&id=676f75ecb97484368b340ee5d355aa422c2b0a7c

tor compilation for nightly builds breaks in this case with

configure: error: TOR_RUST_TARGET must be specified when cross-compiling with Rust enabled.


I think a possible improvement we can do after this, is to share the gcc and rust builds between linux32 and linux64.

Hm, what is missing here? In particular, I wonder what the issue with GCC is as the build script at least should be the same (modulo the different hash in the bundle name that stems from somewhere else).

comment:16 Changed 3 months ago by gk

Another thing I am wondering: I just merged the patches for #29194 and saw those for this bug contain some apt-get install incantations. Do they need adjustment (too) in light of the #29194 fixes?

comment:17 Changed 3 months ago by cypherpunks

When are you going to build gmp, mpc, mpfr as Mozilla does?

comment:18 in reply to:  16 Changed 3 months ago by boklm

Replying to gk:

Another thing I am wondering: I just merged the patches for #29194 and saw those for this bug contain some apt-get install incantations. Do they need adjustment (too) in light of the #29194 fixes?

That's a good point, we should set DEBIAN_FRONTEND=noninteractive here too.

comment:19 in reply to:  15 ; Changed 3 months ago by boklm

Replying to gk:

Replying to boklm:

There are two patches for review in branch bug_26323_v7:
https://gitweb.torproject.org/user/boklm/tor-browser-build.git/commit/?h=bug_26323_v7&id=676f75ecb97484368b340ee5d355aa422c2b0a7c

tor compilation for nightly builds breaks in this case with

configure: error: TOR_RUST_TARGET must be specified when cross-compiling with Rust enabled.

Oh, I forgot to test the nightly target.


I think a possible improvement we can do after this, is to share the gcc and rust builds between linux32 and linux64.

Hm, what is missing here? In particular, I wonder what the issue with GCC is as the build script at least should be the same (modulo the different hash in the bundle name that stems from somewhere else).

Yes, GCC is built exactly in the same way in both cases, the only difference is the list of packages installed in the containers, and the dpkg --add-architecture i386 we only run in the i686 case (which are causing the hash in the filename to differ).

comment:20 in reply to:  19 Changed 3 months ago by gk

Replying to boklm:

Replying to gk:

Replying to boklm:

There are two patches for review in branch bug_26323_v7:
https://gitweb.torproject.org/user/boklm/tor-browser-build.git/commit/?h=bug_26323_v7&id=676f75ecb97484368b340ee5d355aa422c2b0a7c

tor compilation for nightly builds breaks in this case with

configure: error: TOR_RUST_TARGET must be specified when cross-compiling with Rust enabled.

Oh, I forgot to test the nightly target.


I think a possible improvement we can do after this, is to share the gcc and rust builds between linux32 and linux64.

Hm, what is missing here? In particular, I wonder what the issue with GCC is as the build script at least should be the same (modulo the different hash in the bundle name that stems from somewhere else).

Yes, GCC is built exactly in the same way in both cases, the only difference is the list of packages installed in the containers, and the dpkg --add-architecture i386 we only run in the i686 case (which are causing the hash in the filename to differ).

That means we need to have two containers for that. Then I think we just can fold the i686 stuff that does make a difference into the x86_64 parts, so that we can avoid having two containers and two GCCs.

comment:21 in reply to:  17 Changed 3 months ago by gk

Replying to cypherpunks:

When are you going to build gmp, mpc, mpfr as Mozilla does?

There are no plans for that yet.

comment:22 Changed 3 months ago by gk

Keywords: tbb-8.5 added

Tickets on our radar for 8.5

comment:23 Changed 3 months ago by boklm

Keywords: TorBrowserTeam201903R added; TorBrowserTeam201903 removed
Status: needs_revisionneeds_review

I pushed a new revision of the patch in branch bug_26323_v9:
https://gitweb.torproject.org/user/boklm/tor-browser-build.git/commit/?h=bug_26323_v9&id=e72c3aff57a215f736e05f40f4fce3f5debde165

This should fix the build of tor in nightly, set DEBIAN_FRONTEND=noninteractive where we install packages, and share the gcc and rust builds between the i686 and x86_64 builds.

comment:24 Changed 3 months ago by gk

Keywords: TorBrowserTeam201903 added; TorBrowserTeam201903R removed
Status: needs_reviewneeds_revision

You are doing

+  mkdir -p /var/tmp/dist/lib64stdc++
+  cp /var/tmp/dist/gcc/lib64/libstdc++.so.6 /var/tmp/dist/lib64stdc++

and

-  # Add libstdc++ to LD_LIBRARY_PATH to avoid rust link issue (bug 27101)
-  export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$distdir/Tor/libstdc++/"
+  # Add 64bit libstdc++ to LD_LIBRARY_PATH to avoid rust link issue (bug 27101)
+  export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/var/tmp/dist/lib64stdc++"

I think we can get away without creating the lib64stdc++ directory and copying the 64bit version over by having /var/tmp/dist/gcc/lib64/ in the LD_LIBRARY_PATH.

comment:25 Changed 3 months ago by boklm

Keywords: TorBrowserTeam201903R added; TorBrowserTeam201903 removed

comment:26 Changed 3 months ago by boklm

Status: needs_revisionneeds_review

comment:27 Changed 3 months ago by boklm

Keywords: TorBrowserTeam201903 added; TorBrowserTeam201903R removed
Status: needs_reviewneeds_revision

comment:28 Changed 3 months ago by gk

I built the 32-bit bundles and used rust-1.26.1-6d974e.tar.gz. However, doing the 64-but ones results in yet another rust being build Building project rust - rust-1.26.1-b50db6.tar.gz. Thus, there is still something that prevents from using a single compiled Rust compiler for both architectures, it seems.

That's on commit e72c3aff57a215f736e05f40f4fce3f5debde165.

comment:29 in reply to:  28 Changed 3 months ago by boklm

Keywords: TorBrowserTeam201903R added; TorBrowserTeam201903 removed
Status: needs_revisionneeds_review

Replying to gk:

I built the 32-bit bundles and used rust-1.26.1-6d974e.tar.gz. However, doing the 64-but ones results in yet another rust being build Building project rust - rust-1.26.1-b50db6.tar.gz. Thus, there is still something that prevents from using a single compiled Rust compiler for both architectures, it seems.

That's on commit e72c3aff57a215f736e05f40f4fce3f5debde165.

In a previous branch I reverted by mistake the change to use the same packages for both i686 and x86_64 builds. This should be fixed in branch bug_26323_v11:
https://gitweb.torproject.org/user/boklm/tor-browser-build.git/commit/?h=bug_26323_v11&id=a76388bf16a6ff28f4427b47198c20c4aa8c113a

$ ./rbm/rbm showconf gcc filename --target alpha --target torbrowser-linux-x86_64                                                       
gcc-6.4.0-56c810.tar.gz
$ ./rbm/rbm showconf gcc filename --target alpha --target torbrowser-linux-i686  
gcc-6.4.0-56c810.tar.gz
$ ./rbm/rbm showconf rust filename --target alpha --target torbrowser-linux-i686
rust-1.26.1-6d974e.tar.gz
$ ./rbm/rbm showconf rust filename --target alpha --target torbrowser-linux-x86_64
rust-1.26.1-6d974e.tar.gz

comment:30 Changed 3 months ago by gk

Resolution: fixed
Status: needs_reviewclosed

Thanks. Looks good to me now. Let's test this in the upcoming alphas. Merged to master (commits 84e07663467ea304503f6a2e93d7d5930ad78cde and a76388bf16a6ff28f4427b47198c20c4aa8c113a).

comment:31 Changed 3 months ago by gk

Resolution: fixed
Status: closedreopened

comment:32 Changed 3 months ago by gk

Resolution: fixed
Status: reopenedclosed

While we are at it: there is no need for wheezy-i386 anymore, yay! Fixed with boklm's latest commit on v11 pushed to master (commit 8d4bbf894e3b0c380d4240a61fdd83caeb0c030d).

Note: See TracTickets for help on using tickets.