Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using mold for Chromium discussion. #336

Open
Alex313031 opened this issue Feb 9, 2022 · 35 comments
Open

Using mold for Chromium discussion. #336

Alex313031 opened this issue Feb 9, 2022 · 35 comments

Comments

@Alex313031
Copy link

Hello, Im working on a chromium fork called Thorium > https://github.com/Alex313031/Thorium and would like to test using mold instead of lld during linking of the .so files and executables. How would I do this? I know this was one of the inspirations of the creator when making mold. Do I need to install or build/install mold first, or is it included in a chromium checkout? Can I just modify the main BUILD.gn to use LDFLAGS+= [ "-fuse-ld=mold", ]?

@matu3ba
Copy link

matu3ba commented Feb 10, 2022

Please explain what you tried from the instructions in the README.

@Alex313031
Copy link
Author

@matu3ba Okay, I have compiled it with stripping, -03, lto, and -march=haswell and -mtune=haswell for max performance :)
I then set -fuse-ld=/usr/local/bin/mold in the main BUILD.gn for Thorium.
Seems to work, but now another question. How do I pass llvm flags to it, as it doest recognize the mllvm option. Is mold one on one compatible with llvm flags, or is there something else I need to do?

For example, my main BUILD.gn normally has some loop optimizations I added like "-Wl,-mllvm,-aggressive-ext-opt" and "-Wl,-mllvm,-enable-loop-distribute",
I have tried omitting the -Wl, ommitting the -mllvm, and ommiting both, but mold doesn't recognize them, wheras lld does, and I have the same set as cflags for clang, which also recognizes it.

@rui314
Copy link
Owner

rui314 commented Feb 14, 2022

Are you trying LTO? LTO is probably too new to try. We don't and unlikely to support mllvm options as they are LLVM-specific options.

@monarc99
Copy link

i tried to compile chromium with mold. I use this patch to remove the mllvm options.

https://github.com/stha09/chromium-patches/blob/master/chromium-100-compiler.patch

After that the compile stops with the error:


ninja: Entering directory `out/Release'
[2040/50333] LINK ./chrome_sandbox
FAILED: chrome_sandbox 
python3 "../../build/toolchain/gcc_link_wrapper.py" --output="./chrome_sandbox" -- clang++ -pie -fuse-ld=lld -Wl,--fatal-warnings -Wl,--build-id=sha1 -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--icf=all -Wl,--color-diagnostics -flto=thin -Wl,--thinlto-jobs=all -Wl,--thinlto-cache-dir=thinlto-cache -Wl,--thinlto-cache-policy=cache_size=10\%:cache_size_bytes=40g:cache_size_files=100000 -Wl,-mllvm,-import-instr-limit=5 -fwhole-program-vtables -no-canonical-prefixes -rdynamic -nostdlib++ -Wl,--lto-O0 -Wl,-z,defs -Wl,--as-needed -fsanitize=cfi-vcall -fsanitize=cfi-icall -pie -Wl,--disable-new-dtags -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -lgomp -fuse-ld=mold -DLLVM_USE_LINKER=mold -o "./chrome_sandbox" -Wl,--start-group @"./chrome_sandbox.rsp"  -Wl,--end-group  -ldl -lpthread -lrt
mold: fatal: unknown command line option: --thinlto-cache-dir=thinlto-cache
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
[2045/50333] ACTION //chrome/common:available_offline_content_mojom_shared__generator(//build/toolchain/linux/unbundle:default)
ninja: build stopped: subcommand failed.


@Alex313031
Copy link
Author

Alex313031 commented Apr 17, 2022

@monarc99 You need to remove the thinlto cache lines in //chromium/src/build/config/compiler/BUILD.gn
Search for these lines in that file and add a # in front to comment it out. Lines
grouped together are right under each other.

cache_policy = "cache_size=10%:cache_size_bytes=40g:cache_size_files=100000"

"/lldltocache:" +
rebase_path("$root_out_dir/thinlto-cache", root_build_dir),
"/lldltocachepolicy:$cache_policy",

[ "-Wl,--thinlto-cache-dir=" +
rebase_path("$root_out_dir/thinlto-cache", root_build_dir) ]

ldflags += [ "-Wl,--thinlto-cache-policy=$cache_policy" ]

rui314 added a commit that referenced this issue Apr 18, 2022
They are defined as aliases for
--plugin-opt=thinlto-{single-module,cache-dir,cache-policy}.

#336
@rui314
Copy link
Owner

rui314 commented Apr 18, 2022

Now mold should be able to handle --thinlto-cache-dir=thinlto-cache with the above patch.

@rui314
Copy link
Owner

rui314 commented Apr 19, 2022

Reported the issue to GCC: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105305

@DAC324
Copy link

DAC324 commented Jun 3, 2022

Meanwhile, the chromium developers have clearly committed themselves to not support building chromium with mold: https://bugs.chromium.org/p/chromium/issues/detail?id=1280356#c1

Apparently as a consequence, they are now blocking mold as with the latest (as of today) chromium development version 104.0.5099.0, it is not possible to get a working flatc binary anymore. Flatc is compiled during the chromium build process from bundled sources.
With -fuse-ld=mold, I get a non-working flatc binary:

flatc: malloc.c:4302: _int_malloc: Assertion `(unsigned long) (size) >= (unsigned long) (nb)' failed.

Thus, all flatc calls during the build process fail, and chromium cannot be built.
Cross-checked: When I set -fuse-ld=ld.lld, flatc does not throw such errors.

@rui314
Copy link
Owner

rui314 commented Jun 4, 2022

@DAC324 Thanks, let me take a look. What is your gn args?

@DAC324
Copy link

DAC324 commented Jun 6, 2022

I am building in an Arch-like manner with a PKGBUILD file.
gn is called like below:

LC_ALL=C buildtools/linux64/gn gen out/Release -v --args="${_flags[*]}" --script-executable=/usr/bin/python

Where the _flags are like this:

_flags=(
        'angle_enable_abseil=false'
        'use_sysroot=false'
        'custom_toolchain="//build/toolchain/linux/unbundle:default"'
        'host_toolchain="//build/toolchain/linux/unbundle:default"'
        'is_debug=false'
        'is_official_build=false'
        'is_component_build=true'     # must be false for official build
        'enable_widevine=false'
        'enable_hangout_services_extension=false'
        "ffmpeg_branding=\"ChromeOS\""
        "google_api_key=\"${_google_api_key}\""
         "google_default_client_id=\"${_google_default_client_id}\""
         "google_default_client_secret=\"${_google_default_client_secret}\""
        'disable_fieldtrial_testing_config=false'
        'blink_enable_generated_code_formatting=false'
        'blink_symbol_level=0'
        'enable_iterator_debugging=false'
        # Ungoogling
        'enable_mdns=false'
        #'enable_one_click_signin=false'
        'enable_reading_list=false'
        'enable_remoting=false'
        'enable_reporting=false'
        'enable_service_discovery=false'
        'enable_swiftshader=false'
        'use_aura=true'
        'use_gtk=true'
        'gtk_version=3'
        'link_pulseaudio=true'
        'treat_warnings_as_errors=false'
        'enable_nacl=false'
        'use_custom_libcxx=false' # use true if you want use bundled RE2
        'use_vaapi=true'
        'proprietary_codecs=true' # prerequisite for the following lines
        'enable_platform_hevc=true'
        'enable_platform_ac3_eac3_audio=true'
        'enable_platform_mpeg_h_audio=true'
        'enable_platform_dolby_vision=true'
        'enable_mse_mpeg2ts_stream_parser=true'
        'clang_use_chrome_plugins=true'
        'use_gold=false'
        'use_dbus=true'
        'use_thin_lto=false' # must be true for official build
        'enable_pseudolocales=false'
        'enable_platform_hevc=true'
        'dcheck_always_on=false'
        'dcheck_is_configurable=false'
        'use_system_harfbuzz=true'
        'use_system_freetype=true'
        'use_system_lcms2=true'
        'use_system_libdrm=true'
        'use_system_libjpeg=true'
        'use_system_minigbm=true'
        'use_system_libpng=true'
#        'use_system_libsync=true'            # not included in Arch
        'use_system_libopenjpeg2=true'
        'use_xkbcommon = true'
        'use_dawn=true'
        'build_dawn_tests=false'
# WebRTC stuff
        'rtc_use_h264=true'
        # Don't use bundled sources (not possible)
        #'rtc_build_json=false'               #not possible as there are dependencies
        'rtc_build_libevent=false'
        # 'rtc_build_libvpx=false'
        # 'rtc_build_opus=false'
        # 'rtc_build_ssl=false'               #not possible(prevented by an assert)
        )

@DAC324
Copy link

DAC324 commented Jun 21, 2022

With mold 1.3.0 from Git, compiling chromium works again.
What you will have to do is (in a PKGBUILD derived from https://aur.archlinux.org/packages/chromium-dev):

# use mold as linker which is much faster
ln -sf /usr/bin/mold ${_clang_path}/mold
_lld="mold"

@DAC324
Copy link

DAC324 commented Jul 8, 2022

And the next round goes on :(
As already described, Chromium developers do not like mold. So from time to time, they implement "features" to let it fail with the latest sources.
Here's a recent one:

/usr/bin/python "../../build/toolchain/gcc_link_wrapper.py" --output="./chrome_crashpad_handler" -- /opt/.cache/yay/chromium-dev/src/chromium-105.0.5153.0/third_party/llvm-build/Release+Asserts/bin/clang++ -fuse-ld=/opt/.cache/yay/chromium-dev/src/chromium-105.0.5153.0/third_party/llvm-build/Release+Asserts/bin/mold -Wl,--fatal-warnings -Wl,--build-id -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,--icf=all -Wl,--color-diagnostics -Wl,--no-call-graph-profile-sort -m64 -no-canonical-prefixes -Wl,-O2 -Wl,--gc-sections -rdynamic -Wl,-z,defs -Wl,--as-needed -pie -Wl,--disable-new-dtags -Wl,-rpath=\$ORIGIN -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -o "./chrome_crashpad_handler" -Wl,--start-group @"./chrome_crashpad_handler.rsp" ./libbase.so ./libabsl.so ./libboringssl.so ./libperfetto.so ./libchrome_zlib.so ./libprotobuf_lite.so -Wl,--end-group  -latomic -ldl -lpthread -lrt -lgmodule-2.0 -lglib-2.0 -lgobject-2.0 -lgthread-2.0
FAILED: chrome_crashpad_handler 
/usr/bin/python "../../build/toolchain/gcc_link_wrapper.py" --output="./chrome_crashpad_handler" -- /opt/.cache/yay/chromium-dev/src/chromium-105.0.5153.0/third_party/llvm-build/Release+Asserts/bin/clang++ -fuse-ld=/opt/.cache/yay/chromium-dev/src/chromium-105.0.5153.0/third_party/llvm-build/Release+Asserts/bin/mold -Wl,--fatal-warnings -Wl,--build-id -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,--icf=all -Wl,--color-diagnostics -Wl,--no-call-graph-profile-sort -m64 -no-canonical-prefixes -Wl,-O2 -Wl,--gc-sections -rdynamic -Wl,-z,defs -Wl,--as-needed -pie -Wl,--disable-new-dtags -Wl,-rpath=\$ORIGIN -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -o "./chrome_crashpad_handler" -Wl,--start-group @"./chrome_crashpad_handler.rsp" ./libbase.so ./libabsl.so ./libboringssl.so ./libperfetto.so ./libchrome_zlib.so ./libprotobuf_lite.so -Wl,--end-group  -latomic -ldl -lpthread -lrt -lgmodule-2.0 -lglib-2.0 -lgobject-2.0 -lgthread-2.0
mold: error: undefined symbol: pcre_config
>>> referenced by /usr/lib64/libglib-2.0.so

mold: error: undefined symbol: pcre_study
>>> referenced by /usr/lib64/libglib-2.0.so

mold: error: undefined symbol: icu_71::TimeZone::getGMT()
>>> referenced by libbase.so

mold: error: undefined symbol: icu_71::Calendar::set(int, int, int, int, int, int)
>>> referenced by libbase.so

mold: error: undefined symbol: pcre_dfa_exec
>>> referenced by /usr/lib64/libglib-2.0.so

mold: error: undefined symbol: event_base_loopbreak
>>> referenced by libbase.so

mold: error: undefined symbol: icu_71::UMemory::operator new(unsigned long)
>>> referenced by libbase.so

mold: error: undefined symbol: icu_71::Calendar::setTimeInMillis(double, UErrorCode&)
>>> referenced by libbase.so

mold: error: undefined symbol: pcre_exec
>>> referenced by /usr/lib64/libglib-2.0.so

mold: error: undefined symbol: icu_71::Calendar::set(UCalendarDateFields, int)
>>> referenced by libbase.so

mold: error: undefined symbol: pcre_get_stringnumber
>>> referenced by /usr/lib64/libglib-2.0.so

mold: error: undefined symbol: icu_71::Calendar::getTimeInMillis(UErrorCode&) const
>>> referenced by libbase.so

mold: error: undefined symbol: pcre_fullinfo
>>> referenced by /usr/lib64/libglib-2.0.so

mold: error: undefined symbol: icu_71::GregorianCalendar::GregorianCalendar(icu_71::Locale const&, UErrorCode&)
>>> referenced by libbase.so

mold: error: undefined symbol: icu_71::Calendar::get(UCalendarDateFields, UErrorCode&) const
>>> referenced by libbase.so

mold: error: undefined symbol: icu_71::Calendar::setLenient(signed char)
>>> referenced by libbase.so

mold: error: undefined symbol: event_add
>>> referenced by libbase.so

mold: error: undefined symbol: pcre_get_stringtable_entries
>>> referenced by /usr/lib64/libglib-2.0.so

mold: error: undefined symbol: icu_71::GregorianCalendar::GregorianCalendar(icu_71::TimeZone const&, icu_71::Locale const&, UErrorCode&)
>>> referenced by libbase.so

mold: error: undefined symbol: pcre_compile2
>>> referenced by /usr/lib64/libglib-2.0.so

mold: error: undefined symbol: event_base_set
>>> referenced by libbase.so

mold: error: undefined symbol: event_del
>>> referenced by libbase.so

mold: error: undefined symbol: event_base_loop
>>> referenced by libbase.so

mold: error: undefined symbol: event_set
>>> referenced by libbase.so

mold: error: undefined symbol: event_base_new
>>> referenced by libbase.so

mold: error: undefined symbol: pcre_free
>>> referenced by /usr/lib64/libglib-2.0.so

mold: error: undefined symbol: event_get_fd
>>> referenced by libbase.so

mold: error: undefined symbol: event_base_free
>>> referenced by libbase.so

mold: error: undefined symbol: icu_71::Locale::getUS()
>>> referenced by libbase.so

@DAC324
Copy link

DAC324 commented Aug 5, 2022

Update: These unresolved symbol errors seem to have been fixed with mold-1.4.0.

@rui314
Copy link
Owner

rui314 commented Aug 6, 2022

Cool, thank you for trying the latest version.

@DAC324
Copy link

DAC324 commented Aug 6, 2022

As I said, the Chromium developers do not like mold for reasons unknown to me.

Now that version 1.4.0 does not have that unresolved symbols problem anymore, a new blocker was introduced:

clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)

@rui314
Copy link
Owner

rui314 commented Aug 6, 2022

I'd think you shouldn't speculate their feelings. That they do not support mold doesn't necessarily mean they dislike it. It's just unsupported.

If you can share me the details of the error, I might be able to fix the issue for you.

@DAC324
Copy link

DAC324 commented Aug 6, 2022

Here's the full report:

chromium-dev/src/chromium-106.0.5219.0/third_party/llvm-build/Release+Asserts/bin/clang++ -MMD -MF obj/third_party/blink/renderer/core/core/prefetched_signed_exchange_manager.o.d -DUSE_UDEV -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_OZONE=1 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DCR_CLANG_REVISION=\"llvmorg-16-init-572-gdde41c6c-3\" -DCOMPONENT_BUILD -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DBLINK_CORE_IMPLEMENTATION=1 -DUSE_V8_CONTEXT_SNAPSHOT -DV8_CONTEXT_SNAPSHOT_FILENAME=\"v8_context_snapshot.bin\" -DV8_USE_EXTERNAL_STARTUP_DATA -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_40 -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_40 -DLIBYUV_DISABLE_NEON -DGL_GLEXT_PROTOTYPES -DUSE_GLX -DUSE_EGL -DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_WAYLAND_KHR -DBLINK_IMPLEMENTATION=1 -DINSIDE_BLINK -DABSL_CONSUME_DLL -DBORINGSSL_SHARED_LIBRARY -DUSING_SYSTEM_ICU=1 -DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC -DU_IMPORT=U_EXPORT -DGOOGLE_PROTOBUF_NO_RTTI -DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER -DGOOGLE_PROTOBUF_INTERNAL_DONATE_STEAL_INLINE=0 -DHAVE_PTHREAD -DPROTOBUF_USE_DLLS -DWEBRTC_ENABLE_SYMBOL_EXPORT -DWEBRTC_ENABLE_AVX2 -DWEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=0 -DWEBRTC_CHROMIUM_BUILD -DWEBRTC_POSIX -DWEBRTC_LINUX -DABSL_ALLOCATOR_NOTHROW=1 -DWEBRTC_USE_BUILTIN_ISAC_FIX=0 -DWEBRTC_USE_BUILTIN_ISAC_FLOAT=1 -DWEBRTC_USE_X11 -DWEBRTC_USE_PIPEWIRE -DWEBRTC_USE_GIO -DLOGGING_INSIDE_WEBRTC -DSK_CODEC_DECODES_PNG -DSK_CODEC_DECODES_WEBP -DSK_ENCODE_PNG -DSK_ENCODE_WEBP -DSK_ENABLE_SKSL -DSK_UNTIL_CRBUG_1187654_IS_FIXED -DSK_USER_CONFIG_HEADER=\"../../skia/config/SkUserConfig.h\" -DSK_WIN_FONTMGR_NO_SIMULATIONS -DSK_GL -DSK_CODEC_DECODES_JPEG -DSK_ENCODE_JPEG -DSK_HAS_WUFFS_LIBRARY -DSK_VULKAN=1 -DSKIA_DLL -DSKCMS_API=__attribute__\(\(visibility\(\"default\"\)\)\) -DSK_SUPPORT_GPU=1 -DSK_GPU_WORKAROUNDS_HEADER=\"gpu/config/gpu_driver_bug_workaround_autogen.h\" -DUSING_V8_SHARED -DV8_COMPRESS_POINTERS -DV8_COMPRESS_POINTERS_IN_SHARED_CAGE -DV8_31BIT_SMIS_ON_64BIT_ARCH -DV8_ENABLE_SANDBOX -DV8_SANDBOXED_POINTERS -DV8_DEPRECATION_WARNINGS -DCPPGC_CAGED_HEAP -DCPPGC_YOUNG_GENERATION -DLEVELDB_PLATFORM_CHROMIUM=1 -DLEVELDB_SHARED_LIBRARY -DCRASHPAD_ZLIB_SOURCE_EXTERNAL -DWTF_USE_WEBAUDIO_PFFFT=1 -DUSE_SYSTEM_LIBJPEG -DUSING_V8_BASE_SHARED -DUSING_V8_PLATFORM_SHARED -I../.. -Igen -I../../third_party/perfetto/include -Igen/third_party/perfetto/build_config -Igen/third_party/perfetto -Igen/shim_headers/icui18n_shim -Igen/shim_headers/icuuc_shim -I../../third_party/libyuv/include -I../../third_party/jsoncpp/source/include -Igen/shim_headers/opus_shim -Igen/shim_headers/ffmpeg_shim -Igen/shim_headers/openh264_shim -Igen/shim_headers/libpng_shim -Igen/shim_headers/libwebp_shim -I../../third_party/vulkan-deps/vulkan-headers/src/include -I../../third_party/wayland/src/src -I../../third_party/wayland/include/src -I../../third_party/wayland/include/protocol -Igen/shim_headers/re2_shim -I../../third_party/khronos -I../../gpu -Igen/third_party/dawn/include -I../../third_party/dawn/include -Igen/shim_headers/snappy_shim -I../../third_party/abseil-cpp -I../../third_party/boringssl/src/include -I../../third_party/protobuf/src -Igen/protoc_out -I../../third_party/ced/src -I../../net/third_party/quiche/overrides -I../../net/third_party/quiche/src/quiche/common/platform/default -I../../net/third_party/quiche/src -Igen/net/third_party/quiche/src -I../../third_party/webrtc_overrides -I../../third_party/webrtc -Igen/third_party/webrtc -I../../third_party/skia -I../../third_party/wuffs/src/release/c -I../../third_party/vulkan/include -I../../v8/include -Igen/v8/include -I../../third_party/libwebm/source -I../../third_party/mesa_headers -I../../third_party/leveldatabase -I../../third_party/leveldatabase/src -I../../third_party/leveldatabase/src/include -I../../third_party/libaom/source/libaom -I../../third_party/crashpad/crashpad -I../../third_party/crashpad/crashpad/compat/linux -I../../third_party/crashpad/crashpad/compat/non_win -I../../third_party/zlib -I../../third_party/iccjpeg -I../../third_party/ots/src/include -Wall -Wextra -Wimplicit-fallthrough -Wunreachable-code-aggressive -Wthread-safety -Wno-missing-field-initializers -Wno-unused-parameter -Wloop-analysis -Wno-unneeded-internal-declaration -Wenum-compare-conditional -Wno-psabi -Wno-ignored-pragma-optimize -Wno-unqualified-std-cast-call -Wno-deprecated-builtins -Wshadow -fno-delete-null-pointer-checks -fno-ident -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -funwind-tables -fPIC -pthread -fcolor-diagnostics -fmerge-all-constants -fcrash-diagnostics-dir=../../tools/clang/crashreports -mllvm -instcombine-lower-dbg-declare=0 -ffp-contract=off -m64 -msse3 -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -ffile-compilation-dir=. -no-canonical-prefixes -ftrivial-auto-var-init=pattern -fno-omit-frame-pointer -fvisibility=hidden -Xclang -add-plugin -Xclang find-bad-constructs -Xclang -plugin-arg-find-bad-constructs -Xclang raw-ref-template-as-trivial-member -Xclang -plugin-arg-find-bad-constructs -Xclang check-ipc -Wheader-hygiene -Wstring-conversion -Wtautological-overlap-compare -Wexit-time-destructors -Xclang -add-plugin -Xclang blink-gc-plugin -Wglobal-constructors -Xclang -plugin-arg-find-bad-constructs -Xclang check-layout-object-methods -O2 -fdata-sections -ffunction-sections -fno-unique-section-names -g0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/sysprof-4 -Wconversion -Wno-float-conversion -Wno-sign-conversion -Wno-implicit-float-conversion -Wno-implicit-int-conversion -DPROTOBUF_ALLOW_DEPRECATED=1 -I/usr/include/nss -I/usr/include/nspr -Wno-shadow -I/usr/include/libpng16 -I/usr/include/libxml2 -I/usr/include/libxml2 -std=c++17 -Wno-trigraphs -fno-exceptions -fno-rtti -fvisibility-inlines-hidden -Wno-deprecated-declarations -O3 -pipe -fstack-protector-strong -fno-plt -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -march=x86-64-v2 -mtune=sandybridge -I/usr/include -D__DATE__=  -D__TIME__=  -D__TIMESTAMP__=   -O3 -pipe -fstack-protector-strong -fno-plt -Wp,-D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -march=x86-64-v2 -mtune=sandybridge -I/usr/include -Wp,-U_GLIBCXX_ASSERTIONS -Wno-builtin-macro-redefined -c ../../third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc -o obj/third_party/blink/renderer/core/core/prefetched_signed_exchange_manager.o
PLEASE submit a bug report to https://crbug.com and run tools/clang/scripts/process_crashreports.py (only works inside Google) which will upload a report and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.	Program arguments: /opt/.cache/yay/chromium-dev/src/chromium-106.0.5219.0/third_party/llvm-build/Release+Asserts/bin/clang++ -Wall -Wextra -Wimplicit-fallthrough -Wunreachable-code-aggressive -Wthread-safety -Wno-missing-field-initializers -Wno-unused-parameter -Wloop-analysis -Wno-unneeded-internal-declaration -Wenum-compare-conditional -Wno-psabi -Wno-ignored-pragma-optimize -Wno-unqualified-std-cast-call -Wno-deprecated-builtins -Wshadow -fno-delete-null-pointer-checks -fno-ident -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -funwind-tables -fPIC -pthread -fmerge-all-constants -fcrash-diagnostics-dir=../../tools/clang/crashreports -mllvm -instcombine-lower-dbg-declare=0 -ffp-contract=off -m64 -msse3 -Wno-builtin-macro-redefined -ffile-compilation-dir=. -no-canonical-prefixes -ftrivial-auto-var-init=pattern -fno-omit-frame-pointer -fvisibility=hidden -Xclang -add-plugin -Xclang find-bad-constructs -Xclang -plugin-arg-find-bad-constructs -Xclang raw-ref-template-as-trivial-member -Xclang -plugin-arg-find-bad-constructs -Xclang check-ipc -Wheader-hygiene -Wstring-conversion -Wtautological-overlap-compare -Wexit-time-destructors -Xclang -add-plugin -Xclang blink-gc-plugin -Wglobal-constructors -Xclang -plugin-arg-find-bad-constructs -Xclang check-layout-object-methods -O2 -fdata-sections -ffunction-sections -fno-unique-section-names -g0 -Wconversion -Wno-float-conversion -Wno-sign-conversion -Wno-implicit-float-conversion -Wno-implicit-int-conversion -Wno-shadow -std=c++17 -Wno-trigraphs -fno-exceptions -fno-rtti -fvisibility-inlines-hidden -Wno-deprecated-declarations -O3 -pipe -fstack-protector-strong -fno-plt -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -march=x86-64-v2 -mtune=sandybridge -O3 -pipe -fstack-protector-strong -fno-plt -Wformat -Werror=format-security -fstack-clash-protection -fcf-protection -march=x86-64-v2 -mtune=sandybridge -Wno-builtin-macro-redefined -fcolor-diagnostics -DUSE_UDEV -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_OZONE=1 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -DCR_CLANG_REVISION=\"llvmorg-16-init-572-gdde41c6c-3\" -DCOMPONENT_BUILD -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DBLINK_CORE_IMPLEMENTATION=1 -DUSE_V8_CONTEXT_SNAPSHOT -DV8_CONTEXT_SNAPSHOT_FILENAME=\"v8_context_snapshot.bin\" -DV8_USE_EXTERNAL_STARTUP_DATA -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_40 -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_40 -DLIBYUV_DISABLE_NEON -DGL_GLEXT_PROTOTYPES -DUSE_GLX -DUSE_EGL -DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_WAYLAND_KHR -DBLINK_IMPLEMENTATION=1 -DINSIDE_BLINK -DABSL_CONSUME_DLL -DBORINGSSL_SHARED_LIBRARY -DUSING_SYSTEM_ICU=1 -DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC -DU_IMPORT=U_EXPORT -DGOOGLE_PROTOBUF_NO_RTTI -DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER -DGOOGLE_PROTOBUF_INTERNAL_DONATE_STEAL_INLINE=0 -DHAVE_PTHREAD -DPROTOBUF_USE_DLLS -DWEBRTC_ENABLE_SYMBOL_EXPORT -DWEBRTC_ENABLE_AVX2 -DWEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=0 -DWEBRTC_CHROMIUM_BUILD -DWEBRTC_POSIX -DWEBRTC_LINUX -DABSL_ALLOCATOR_NOTHROW=1 -DWEBRTC_USE_BUILTIN_ISAC_FIX=0 -DWEBRTC_USE_BUILTIN_ISAC_FLOAT=1 -DWEBRTC_USE_X11 -DWEBRTC_USE_PIPEWIRE -DWEBRTC_USE_GIO -DLOGGING_INSIDE_WEBRTC -DSK_CODEC_DECODES_PNG -DSK_CODEC_DECODES_WEBP -DSK_ENCODE_PNG -DSK_ENCODE_WEBP -DSK_ENABLE_SKSL -DSK_UNTIL_CRBUG_1187654_IS_FIXED -DSK_USER_CONFIG_HEADER=\"../../skia/config/SkUserConfig.h\" -DSK_WIN_FONTMGR_NO_SIMULATIONS -DSK_GL -DSK_CODEC_DECODES_JPEG -DSK_ENCODE_JPEG -DSK_HAS_WUFFS_LIBRARY -DSK_VULKAN=1 -DSKIA_DLL -DSKCMS_API=__attribute__((visibility(\"default\"))) -DSK_SUPPORT_GPU=1 -DSK_GPU_WORKAROUNDS_HEADER=\"gpu/config/gpu_driver_bug_workaround_autogen.h\" -DUSING_V8_SHARED -DV8_COMPRESS_POINTERS -DV8_COMPRESS_POINTERS_IN_SHARED_CAGE -DV8_31BIT_SMIS_ON_64BIT_ARCH -DV8_ENABLE_SANDBOX -DV8_SANDBOXED_POINTERS -DV8_DEPRECATION_WARNINGS -DCPPGC_CAGED_HEAP -DCPPGC_YOUNG_GENERATION -DLEVELDB_PLATFORM_CHROMIUM=1 -DLEVELDB_SHARED_LIBRARY -DCRASHPAD_ZLIB_SOURCE_EXTERNAL -DWTF_USE_WEBAUDIO_PFFFT=1 -DUSE_SYSTEM_LIBJPEG -DUSING_V8_BASE_SHARED -DUSING_V8_PLATFORM_SHARED -I../.. -Igen -I../../third_party/perfetto/include -Igen/third_party/perfetto/build_config -Igen/third_party/perfetto -Igen/shim_headers/icui18n_shim -Igen/shim_headers/icuuc_shim -I../../third_party/libyuv/include -I../../third_party/jsoncpp/source/include -Igen/shim_headers/opus_shim -Igen/shim_headers/ffmpeg_shim -Igen/shim_headers/openh264_shim -Igen/shim_headers/libpng_shim -Igen/shim_headers/libwebp_shim -I../../third_party/vulkan-deps/vulkan-headers/src/include -I../../third_party/wayland/src/src -I../../third_party/wayland/include/src -I../../third_party/wayland/include/protocol -Igen/shim_headers/re2_shim -I../../third_party/khronos -I../../gpu -Igen/third_party/dawn/include -I../../third_party/dawn/include -Igen/shim_headers/snappy_shim -I../../third_party/abseil-cpp -I../../third_party/boringssl/src/include -I../../third_party/protobuf/src -Igen/protoc_out -I../../third_party/ced/src -I../../net/third_party/quiche/overrides -I../../net/third_party/quiche/src/quiche/common/platform/default -I../../net/third_party/quiche/src -Igen/net/third_party/quiche/src -I../../third_party/webrtc_overrides -I../../third_party/webrtc -Igen/third_party/webrtc -I../../third_party/skia -I../../third_party/wuffs/src/release/c -I../../third_party/vulkan/include -I../../v8/include -Igen/v8/include -I../../third_party/libwebm/source -I../../third_party/mesa_headers -I../../third_party/leveldatabase -I../../third_party/leveldatabase/src -I../../third_party/leveldatabase/src/include -I../../third_party/libaom/source/libaom -I../../third_party/crashpad/crashpad -I../../third_party/crashpad/crashpad/compat/linux -I../../third_party/crashpad/crashpad/compat/non_win -I../../third_party/zlib -I../../third_party/iccjpeg -I../../third_party/ots/src/include -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/sysprof-4 -DPROTOBUF_ALLOW_DEPRECATED=1 -I/usr/include/nss -I/usr/include/nspr -I/usr/include/libpng16 -I/usr/include/libxml2 -I/usr/include/libxml2 -D_FORTIFY_SOURCE=2 -I/usr/include -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -D_FORTIFY_SOURCE=2 -I/usr/include -Wp,-U_GLIBCXX_ASSERTIONS -c -MMD -MF obj/third_party/blink/renderer/core/core/prefetched_signed_exchange_manager.o.d -fcolor-diagnostics -o obj/third_party/blink/renderer/core/core/prefetched_signed_exchange_manager.o ../../third_party/blink/renderer/core/loader/prefetched_signed_exchange_manager.cc
1.	<eof> parser at end of file
#0 0x000055d80db2c89f (/opt/.cache/yay/chromium-dev/src/chromium-106.0.5219.0/third_party/llvm-build/Release+Asserts/bin/clang+++0x39e589f)
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)
clang version 16.0.0 (https://github.com/llvm/llvm-project/ dde41c6c560b67165c7ac884815cd50fdce446f8)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/.cache/yay/chromium-dev/src/chromium-106.0.5219.0/third_party/llvm-build/Release+Asserts/bin
clang++: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: ../../tools/clang/crashreports/prefetched_signed_exchange_manager-5c0390.cpp
clang++: note: diagnostic msg: ../../tools/clang/crashreports/prefetched_signed_exchange_manager-5c0390.sh
clang++: note: diagnostic msg: 

********************

Cross checking now if reverting to ld.lld avoids this crash.

@DAC324
Copy link

DAC324 commented Aug 6, 2022

Update: Looks like it is not related to mold as this error occurs with ld.lld as well :(

@DAC324
Copy link

DAC324 commented Oct 3, 2022

Next round:

/usr/bin/python "../../build/toolchain/gcc_solink_wrapper.py" --readelf="readelf" --nm="nm"  --sofile="./libcloud_policy_proto_generated_compile.so" --tocfile="./libcloud_policy_proto_generated_compile.so.TOC" --output="./libcloud_policy_proto_generated_compile.so" -- /opt/.cache/yay/chromium-dev/src/chromium-108.0.5317.0/third_party/llvm-build/Release+Asserts/bin/clang++ -shared -Wl,-soname="libcloud_policy_proto_generated_compile.so" -fuse-ld=/opt/.cache/yay/chromium-dev/src/chromium-108.0.5317.0/third_party/llvm-build/Release+Asserts/bin/mold -Wl,--fatal-warnings -Wl,--build-id -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,--icf=all -Wl,--color-diagnostics -Wl,--no-call-graph-profile-sort -m64 -no-canonical-prefixes -Wl,-O2 -Wl,--gc-sections -rdynamic -Wl,-z,defs -Wl,--as-needed -Wl,-rpath=\$ORIGIN -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -o "./libcloud_policy_proto_generated_compile.so" @"./libcloud_policy_proto_generated_compile.so.rsp" 
FAILED: libcloud_policy_proto_generated_compile.so libcloud_policy_proto_generated_compile.so.TOC 
/usr/bin/python "../../build/toolchain/gcc_solink_wrapper.py" --readelf="readelf" --nm="nm"  --sofile="./libcloud_policy_proto_generated_compile.so" --tocfile="./libcloud_policy_proto_generated_compile.so.TOC" --output="./libcloud_policy_proto_generated_compile.so" -- /opt/.cache/yay/chromium-dev/src/chromium-108.0.5317.0/third_party/llvm-build/Release+Asserts/bin/clang++ -shared -Wl,-soname="libcloud_policy_proto_generated_compile.so" -fuse-ld=/opt/.cache/yay/chromium-dev/src/chromium-108.0.5317.0/third_party/llvm-build/Release+Asserts/bin/mold -Wl,--fatal-warnings -Wl,--build-id -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,--icf=all -Wl,--color-diagnostics -Wl,--no-call-graph-profile-sort -m64 -no-canonical-prefixes -Wl,-O2 -Wl,--gc-sections -rdynamic -Wl,-z,defs -Wl,--as-needed -Wl,-rpath=\$ORIGIN -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -o "./libcloud_policy_proto_generated_compile.so" @"./libcloud_policy_proto_generated_compile.so.rsp" 
mold: error: undefined symbol: google::protobuf::Arena::AllocateAlignedWithCleanup(unsigned long, std::type_info const*)
>>> referenced by policy_common_definitions.pb.cc
>>>               obj/components/policy/proto/libpolicy_common_definitions_compile_proto.a(obj/components/policy/proto/policy_common_definitions_compile_proto/policy_common_definitions.pb.o):(enterprise_management::StringList::_InternalParse(char const*, google::protobuf::internal::ParseContext*))>>> referenced by cloud_policy.pb.cc
>>>               obj/components/policy/cloud_policy_proto_generated_compile_proto/cloud_policy.pb.o:(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >* google::protobuf::internal::InternalMetadata::mutable_unknown_fields_slow<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >())>>> referenced by policy_common_definitions.pb.cc
>>>               obj/components/policy/proto/libpolicy_common_definitions_compile_proto.a(obj/components/policy/proto/policy_common_definitions_compile_proto/policy_common_definitions.pb.o):(void google::protobuf::internal::RepeatedPtrFieldBase::MergeFromInnerLoop<google::protobuf::RepeatedPtrField<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::TypeHandler>(void**, void**, int, int))
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
[4/32933] /usr/bin/python "../../build/toolchain/gcc_solink_wrapper.py" --readelf="readelf" --nm="nm"  --sofile="./libbase.so" --tocfile="./libbase.so.TOC" --output="./libbase.so" -- /opt/.cache/yay/chromium-dev/src/chromium-108.0.5317.0/third_party/llvm-build/Release+Asserts/bin/clang++ -shared -Wl,-soname="libbase.so" -fuse-ld=/opt/.cache/yay/chromium-dev/src/chromium-108.0.5317.0/third_party/llvm-build/Release+Asserts/bin/mold -Wl,--fatal-warnings -Wl,--build-id -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,--icf=all -Wl,--color-diagnostics -Wl,--no-call-graph-profile-sort -m64 -no-canonical-prefixes -rdynamic -Wl,-z,defs -Wl,--as-needed -Wl,-rpath=\$ORIGIN -Wl,-O2 -Wl,--gc-sections -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -o "./libbase.so" @"./libbase.so.rsp" 
FAILED: libbase.so libbase.so.TOC 
/usr/bin/python "../../build/toolchain/gcc_solink_wrapper.py" --readelf="readelf" --nm="nm"  --sofile="./libbase.so" --tocfile="./libbase.so.TOC" --output="./libbase.so" -- /opt/.cache/yay/chromium-dev/src/chromium-108.0.5317.0/third_party/llvm-build/Release+Asserts/bin/clang++ -shared -Wl,-soname="libbase.so" -fuse-ld=/opt/.cache/yay/chromium-dev/src/chromium-108.0.5317.0/third_party/llvm-build/Release+Asserts/bin/mold -Wl,--fatal-warnings -Wl,--build-id -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,--icf=all -Wl,--color-diagnostics -Wl,--no-call-graph-profile-sort -m64 -no-canonical-prefixes -rdynamic -Wl,-z,defs -Wl,--as-needed -Wl,-rpath=\$ORIGIN -Wl,-O2 -Wl,--gc-sections -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -o "./libbase.so" @"./libbase.so.rsp" 
mold: error: undefined symbol: protozero::MessageHandleBase::MessageHandleBase(protozero::Message*)
>>> referenced by logging.cc
>>>               obj/base/base/logging.o:(void trace_event_internal::AddTypedTraceEvent<logging::LogMessage::~LogMessage()::$_0>(char, unsigned char const*, perfetto::StaticString, logging::LogMessage::~LogMessage()::$_0&&))>>> referenced by memory_pressure_listener.cc
>>>               obj/base/base/memory_pressure_listener.o:(base::MemoryPressureListener::Notify(base::MemoryPressureListener::MemoryPressureLevel))>>> referenced by memory_pressure_listener.cc
>>>               obj/base/base/memory_pressure_listener.o:(base::MemoryPressureListener::Notify(base::MemoryPressureListener::MemoryPressureLevel))>>> referenced 28 more times

mold: error: undefined symbol: perfetto::base::TaskRunner::~TaskRunner()
>>> referenced by perfetto_task_runner.cc
>>>               obj/base/base/perfetto_task_runner.o:(base::tracing::PerfettoTaskRunner::~PerfettoTaskRunner())
mold: error: undefined symbol: perfetto::Platform::~Platform()
>>> referenced by perfetto_platform.cc
>>>               obj/base/base/perfetto_platform.o:(base::tracing::PerfettoPlatform::~PerfettoPlatform())
mold: error: undefined symbol: perfetto::TracedValue::~TracedValue()
>>> referenced by file.cc
>>>               obj/base/base/file.o:(base::File::WriteIntoTrace(perfetto::TracedValue) const)>>> referenced by file_path.cc
>>>               obj/base/base/file_path.o:(base::FilePath::WriteIntoTrace(perfetto::TracedValue) const)>>> referenced by location.cc
>>>               obj/base/base/location.o:(base::Location::WriteIntoTrace(perfetto::TracedValue) const)>>> referenced 11 more times

mold: error: undefined symbol: perfetto::TracedDictionary::AddItem(perfetto::DynamicString)
>>> referenced by values.cc
>>>               obj/base/base/values.o:(base::Value::Dict::WriteIntoTrace(perfetto::TracedValue) const)
mold: error: undefined symbol: protozero::ScatteredStreamWriter::~ScatteredStreamWriter()
>>> referenced by user_metrics.cc
>>>               obj/base/base/user_metrics.o:(base::trace_event::TraceEventHandle trace_event_internal::AddTraceEvent<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(char, unsigned char const*, char const*, char const*, unsigned long, unsigned int, unsigned long, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&))>>> referenced by stack_sampling_profiler.cc
>>>               obj/base/base/stack_sampling_profiler.o:(base::trace_event::TraceEventHandle trace_event_internal::AddTraceEvent<int&>(char, unsigned char const*, char const*, char const*, unsigned long, unsigned int, unsigned long, char const*, int&))>>> referenced by trace_arguments.cc
>>>               obj/base/base/trace_arguments.o:(base::trace_event::TraceArguments::operator=(base::trace_event::TraceArguments&&))>>> referenced 7 more times

mold: error: undefined symbol: perfetto::Platform::Shutdown()
>>> referenced by perfetto_platform.cc
>>>               obj/base/base/perfetto_platform.o
mold: error: undefined symbol: perfetto::internal::BaseTrackEventInternedDataIndex::~BaseTrackEventInternedDataIndex()
>>> referenced by logging.cc
>>>               obj/base/base/logging.o:(base::trace_event::InternedSourceLocation::~InternedSourceLocation())>>> referenced by logging.cc
>>>               obj/base/base/logging.o:(perfetto::TrackEventInternedDataIndex<base::trace_event::InternedSourceLocation, 4ul, base::trace_event::TraceSourceLocation, perfetto::BigInternedDataTraits>::~TrackEventInternedDataIndex())>>> referenced by logging.cc
>>>               obj/base/base/logging.o:(perfetto::TrackEventInternedDataIndex<base::trace_event::InternedLogMessage, 20ul, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, perfetto::BigInternedDataTraits>::~TrackEventInternedDataIndex())>>> referenced 11 more times

clang++: error: linker command failed with exit code 1 (use -v to see invocation)

@SebastianSpeitel
Copy link

I'm using gentoo and following the guide to just add -fuse-ld=mold -Wl,-O1 -Wl,--as-needed to my LDFLAGS the build fails because mold gets invoked with an unknown -m argument:

FAILED: bytecode_builtins_list_generator 
python3.10 "../../build/toolchain/gcc_link_wrapper.py" --output="./bytecode_builtins_list_generator" -- x86_64-pc-linux-gnu-clang++ -pie -fuse-ld=lld -Wl,--build-id=sha1 -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--icf=all -Wl,--color-diagnostics -flto=thin -Wl,--thinlto-jobs=all -Wl,--thinlto-cache-dir=thinlto-cache -Wl,--thinlto-cache-policy=cache_size=10\%:cache_size_bytes=40g:cache_size_files=100000 -Wl,-mllvm,-import-instr-limit=30 -fwhole-program-vtables -Wl,--no-call-graph-profile-sort -no-canonical-prefixes -rdynamic -Wl,-z,defs -Wl,--as-needed -Wl,--lto-O0 -pie -Wl,--disable-new-dtags -fuse-ld=mold -Wl,-O1 -Wl,--as-needed -o "./bytecode_builtins_list_generator" -Wl,--start-group @"./bytecode_builtins_list_generator.rsp"  -Wl,--end-group  -latomic -ldl -lpthread -lrt
mold: fatal: unknown -m argument: llvm
x86_64-pc-linux-gnu-clang++: error: linker command failed with exit code 1 (use -v to see invocation)

@rui314
Copy link
Owner

rui314 commented Oct 26, 2022

-mllvm is an clang/lld specific flag. Maybe they have hard-coded that flag to the Chromium build script, unfortunately.

@selfisekai
Copy link

ok, with this patch it almost works on 119.0.6045.199

--- ./build/config/compiler/compiler.gni.orig
+++ ./build/config/compiler/compiler.gni
@@ -37,6 +37,9 @@
   # The default linker everywhere else.
   use_lld = is_clang && current_os != "zos"
 
+  # enable together with use_lld
+  use_mold = false
+
   # If true, optimize for size.
   # Default to favoring speed over size for platforms not listed below.
   optimize_for_size = !is_high_end_android && (is_android || is_castos)
--- ./build/config/compiler/pgo/BUILD.gn.orig
+++ ./build/config/compiler/pgo/BUILD.gn
@@ -143,13 +143,8 @@
       if (is_win) {
         ldflags = [ "-mllvm:-enable-ext-tsp-block-placement=1" ]
       } else {
-        ldflags = [ "-Wl,-mllvm,-enable-ext-tsp-block-placement=1" ]
       }
     } else {
-      cflags += [
-        "-mllvm",
-        "-enable-ext-tsp-block-placement=1",
-      ]
     }
   }
 }
--- ./build/config/compiler/BUILD.gn.orig
+++ ./build/config/compiler/BUILD.gn
@@ -384,7 +384,9 @@
       }
     }
 
-    if (use_lld) {
+    if (use_mold) {
+      ldflags += [ "-fuse-ld=mold" ]
+    } else if (use_lld) {
       ldflags += [ "-fuse-ld=lld" ]
       if (lld_path != "") {
         ldflags += [ "-B$lld_path" ]
@@ -601,7 +603,6 @@
       if (is_win) {
         ldflags += [ "-mllvm:-instcombine-lower-dbg-declare=0" ]
       } else {
-        ldflags += [ "-Wl,-mllvm,-instcombine-lower-dbg-declare=0" ]
       }
     }
 
@@ -717,7 +714,6 @@
     # binary size than the default setting of 100.
     # TODO(gbiv): We ideally shouldn't need to specify this; ThinLTO
     # should be able to better manage binary size increases on its own.
-    import_instr_limit = 30
 
     if (is_win) {
       ldflags += [
@@ -726,7 +722,6 @@
         "/lldltocache:" +
             rebase_path("$root_out_dir/thinlto-cache", root_build_dir),
         "/lldltocachepolicy:$cache_policy",
-        "-mllvm:-disable-auto-upgrade-debug-info",
       ]
     } else {
       ldflags += [ "-flto=thin" ]
@@ -766,14 +761,11 @@
         import_instr_limit = 5
       }
 
-      ldflags += [ "-Wl,-mllvm,-import-instr-limit=$import_instr_limit" ]
-
       if (!is_chromeos) {
         # TODO(https://crbug.com/972449): turn on for ChromeOS when that
         # toolchain has this flag.
         # We only use one version of LLVM within a build so there's no need to
         # upgrade debug info, which can be expensive since it runs the verifier.
-        ldflags += [ "-Wl,-mllvm,-disable-auto-upgrade-debug-info" ]
       }
     }
 
@@ -893,7 +885,6 @@
         is_android && host_os == "linux",
         "MLGO is currently only supported for targeting Android on a linux host")
     if (use_thin_lto) {
-      ldflags += [ "-Wl,-mllvm,-enable-ml-inliner=release" ]
     }
   }
 
@@ -1438,7 +1429,6 @@
     # This can be removed once https://bugs.llvm.org/show_bug.cgi?id=40348
     # has been resolved, and -mno-outline is obeyed by the linker during
     # ThinLTO.
-    ldflags += [ "-Wl,-mllvm,-enable-machine-outliner=never" ]
   }
 
   asmflags = cflags

with the last issue being:

ninja: job failed: "python3" "../../build/toolchain/gcc_link_wrapper.py" --output="./chromedriver.unstripped" -- clang++ -fuse-ld=mold -Wl,--build-id=sha1 -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--icf=all -Wl,--color-diagnostics -flto=thin -Wl,--thinlto-jobs=all -Wl,--thinlto-cache-dir=thinlto-cache -Wl,--thinlto-cache-policy=cache_size=10\%:cache_size_bytes=40g:cache_size_files=100000 -fwhole-program-vtables -Wl,--undefined-version -Wl,--no-call-graph-profile-sort -m64 -no-canonical-prefixes -Wl,-O2 -Wl,--gc-sections -rdynamic -Wl,-z,defs -Wl,--as-needed -Wl,--lto-O0 -pie -Wl,--disable-new-dtags -Wl,--as-needed,-O1,--sort-common -Wl,-z,pack-relative-relocs -o "./chromedriver.unstripped" -Wl,--start-group @"./chromedriver.unstripped.rsp"  -Wl,--end-group  -latomic -ldl -lpthread -lrt -lgmodule-2.0 -lgobject-2.0 -lgthread-2.0 -lglib-2.0 -lintl -ljsoncpp -licui18n -licuuc -licudata -lsmime3 -lnss3 -lnssutil3 -lplds4 -lplc4 -lnspr4 -lz -levent -lresolv -lgio-2.0 -ljpeg -lopus -lavcodec -lavformat -lavutil -ldav1d -lX11 -lXcomposite -lXdamage -lXext -lXfixes -lXrender -lXrandr -lXtst -lpipewire-0.3 -lgbm -lEGL -ldrm -lminizip -lfontconfig -lexpat -lwebp -lwebpdemux -lwebpmux -lfreetype -lharfbuzz-subset -lharfbuzz -lxcb -lxkbcommon -ldbus-1 
mold: fatal: cannot open obj/services/tracing/public/cpp/cpp/posix_system_producer.o: No file descriptors available
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: subcommand failed

@ishitatsuyuki
Copy link
Contributor

Sounds like you need ulimit -n unlimited or even adjust the hard limit in /etc/security/limits.conf if the former is not sufficient.

@kvaster
Copy link

kvaster commented Dec 13, 2023

I've adjust limits very big values, but I still get 'Too many open files' error :( Seems that it's another reason...

@ishitatsuyuki
Copy link
Contributor

Another potential knob to tune is /proc/sys/fs/file-max in case your distro's default might be like 65k.

@blackteahamburger
Copy link

blackteahamburger commented Feb 2, 2024

I have the same problem Too many open files. My ulimit -Hn, ulimit -Sn and /proc/sys/fs/nr_open are 1073741816, /proc/sys/fs/file-max is 9223372036854775807, are they not big enough?

I think this could be a bug.

@rui314
Copy link
Owner

rui314 commented Feb 3, 2024

Are you using fuse or some special filesystem?

@Alex313031 Alex313031 changed the title Perhaps a dumb question: how to use mold for chromium. Using mold for Chromium discussion. Feb 4, 2024
@blackteahamburger
Copy link

I'm using ext4.

@rui314
Copy link
Owner

rui314 commented Feb 17, 2024

No fuse or some other overlay filesystem on top of ext4? The issue here is that we close a file descriptor immediately after we open a file and mmap it to memory. mmap'ed file is not usually counted towards the number of opened files. Therefore, "too many open files" error should not usually occur for mold.

However, if there's something in your system that intercepts file operations and keep file descriptors open as long as their corresponding files are kept mmap'ed, that's not the case. Some overlay filesystem does that and can cause "too many open files" error.

@blackteahamburger
Copy link

blackteahamburger commented Feb 17, 2024

I am running on native hardware PC (Laptop) under Gentoo, should no fuse or some other overlay filesystem.

Edit: Finally find the reason:

chromium_compile() {
	# Final link uses lots of file descriptors.
	ulimit -n 2048

not enough for mold.

@apprehensions
Copy link

Building chromium with mold causes a mksnapshot segfault:

[1920/1920] ACTION //v8:run_mksnapshot_default(//build/toolchain/linux/unbundle:default)
ninja: job failed: python3 ../../v8/tools/run.py ./mksnapshot --turbo_instruction_scheduling --stress-turbo-late-spilling --target_os=linux --target_arch=x64 --embedded_src gen/v8/embedded.S --embedded_variant Default --random-seed 314159265 --startup_blob snapshot_blob.bin --no-native-code-counters
Return code is -11
ninja: subcommand failed

@rui314
Copy link
Owner

rui314 commented May 24, 2024

@apprehensions I couldn't reproduce the issue. What is your mold version? I tested it with mold 2.31.0.

@apprehensions
Copy link

I am using the same mold version. I am also using musl, which could be the issue.

@rui314
Copy link
Owner

rui314 commented May 24, 2024

Ah, maybe. What is your distro and version?

@apprehensions
Copy link

KISS Linux Community

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests