Skip to content

Commit

Permalink
Bug 1841902 - Patch ld64 to avoid dead-stripping rust compiler_builti…
Browse files Browse the repository at this point in the history
…ns atoms. r=firefox-build-system-reviewers,ahochheiden

Sent upstream at tpoechtrager/cctools-port#135.

Differential Revision: https://phabricator.services.mozilla.com/D182833
  • Loading branch information
glandium committed Jul 11, 2023
1 parent beec4e1 commit 084dce5
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
2 changes: 2 additions & 0 deletions taskcluster/scripts/misc/build-cctools-port.sh
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ export CXX="$CXX --sysroot=$MOZ_FETCHES_DIR/sysroot"

# Configure crosstools-port
cd $CROSSTOOLS_CCTOOLS_DIR
patch -p2 < $GECKO_PATH/taskcluster/scripts/misc/cctools.patch

# Force re-libtoolization to overwrite files with the new libtool bits.
perl -pi -e 's/(LIBTOOLIZE -c)/\1 -f/' autogen.sh
./autogen.sh
Expand Down
17 changes: 17 additions & 0 deletions taskcluster/scripts/misc/cctools.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
diff --git a/cctools/ld64/src/ld/Resolver.cpp b/cctools/ld64/src/ld/Resolver.cpp
index bfb67a3..d5b1c67 100644
--- a/cctools/ld64/src/ld/Resolver.cpp
+++ b/cctools/ld64/src/ld/Resolver.cpp
@@ -1178,9 +1178,10 @@ void Resolver::deadStripOptimize(bool force)
// unset liveness, so markLive() will recurse
(const_cast<ld::Atom*>(atom))->setLive(0);
}
- // <rdar://problem/49468634> if doing LTO, mark all libclang_rt* mach-o atoms as live since the backend may suddenly codegen uses of them
+ // <rdar://problem/49468634> if doing LTO, mark all libclang_rt* mach-o atoms as live since the backend may suddenly codegen uses of them.
+ // Likewise with rust compiler_builtins atoms. They may come from a libcompiler_builtins-<hash>.a lib, or from a compiler_builtins-... member of a rust static library.
else if ( _haveLLVMObjs && !force && (atom->contentType() != ld::Atom::typeLTOtemporary) ) {
- if ( strstr(atom->safeFilePath(), "libclang_rt") != nullptr ) {
+ if ( strstr(atom->safeFilePath(), "libclang_rt") != nullptr || strstr(atom->safeFilePath(), "compiler_builtins") != nullptr ) {
_deadStripRoots.insert(atom);
}
}

0 comments on commit 084dce5

Please sign in to comment.