Skip to content

Revert "[MachO] Preserve weak linkage for aliases" - #212009

Merged
cofibrant merged 1 commit into
mainfrom
revert-198148-fix-196047-macho-weak-alias
Jul 25, 2026
Merged

Revert "[MachO] Preserve weak linkage for aliases"#212009
cofibrant merged 1 commit into
mainfrom
revert-198148-fix-196047-macho-weak-alias

Conversation

@cofibrant

Copy link
Copy Markdown
Member

Reverts #198148

As #212001 points out, #198148's approach to merging the linkage flags is incorrect. I propose we revert for now, build an understanding of the work required to support this properly and try again.

@cofibrant

Copy link
Copy Markdown
Member Author

CC @syhhyl

@llvmorg-github-actions

llvmorg-github-actions Bot commented Jul 25, 2026

Copy link
Copy Markdown

@llvm/pr-subscribers-llvm-mc

@llvm/pr-subscribers-backend-aarch64

Author: Nathan Corbyn (cofibrant)

Changes

Reverts llvm/llvm-project#198148

As #212001 points out, #198148's approach to merging the linkage flags is incorrect. I propose we revert for now, build an understanding of the work required to support this properly and try again.


Full diff: https://github.com/llvm/llvm-project/pull/212009.diff

3 Files Affected:

  • (modified) llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (+1-3)
  • (modified) llvm/lib/MC/MachObjectWriter.cpp (+1-6)
  • (removed) llvm/test/CodeGen/AArch64/macho-weak-alias.ll (-17)
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index e544fa4d4414a..11d39fcff0ff7 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -2644,9 +2644,7 @@ void AsmPrinter::emitGlobalAlias(const Module &M, const GlobalAlias &GA) {
     return;
   }
 
-  if (MAI.isMachO())
-    emitLinkage(&GA, Name);
-  else if (GA.hasExternalLinkage() || !MAI.getWeakRefDirective())
+  if (GA.hasExternalLinkage() || !MAI.getWeakRefDirective())
     OutStreamer->emitSymbolAttribute(Name, MCSA_Global);
   else if (GA.hasWeakLinkage() || GA.hasLinkOnceLinkage())
     OutStreamer->emitSymbolAttribute(Name, MCSA_WeakReference);
diff --git a/llvm/lib/MC/MachObjectWriter.cpp b/llvm/lib/MC/MachObjectWriter.cpp
index 657f6f40fd9e9..e274d886c22d8 100644
--- a/llvm/lib/MC/MachObjectWriter.cpp
+++ b/llvm/lib/MC/MachObjectWriter.cpp
@@ -443,12 +443,7 @@ void MachObjectWriter::writeNlist(MachSymbolData &MSD, const MCAssembler &Asm) {
   // The Mach-O streamer uses the lowest 16-bits of the flags for the 'desc'
   // value.
   bool EncodeAsAltEntry = IsAlias && OrigSymbol.isAltEntry();
-  uint16_t Flags = Symbol->getEncodedFlags(EncodeAsAltEntry);
-  // Preserve the aliasee's flags while adding alias-specific flags,
-  // such as N_WEAK_DEF emitted by .weak_definition.
-  if (IsAlias)
-    Flags |= OrigSymbol.getEncodedFlags(EncodeAsAltEntry);
-  W.write<uint16_t>(Flags);
+  W.write<uint16_t>(Symbol->getEncodedFlags(EncodeAsAltEntry));
   if (is64Bit())
     W.write<uint64_t>(Address);
   else
diff --git a/llvm/test/CodeGen/AArch64/macho-weak-alias.ll b/llvm/test/CodeGen/AArch64/macho-weak-alias.ll
deleted file mode 100644
index a936cea618b38..0000000000000
--- a/llvm/test/CodeGen/AArch64/macho-weak-alias.ll
+++ /dev/null
@@ -1,17 +0,0 @@
-; RUN: llc -mtriple=aarch64-apple-macosx13.0.0 -filetype=obj %s -o %t.o
-; RUN: llvm-nm -m %t.o | FileCheck %s
-
-define internal void @foo_internal() {
-  ret void
-}
-
-@foo_default = weak_odr alias void (), ptr @foo_internal
-@foo_hidden = weak_odr hidden alias void (), ptr @foo_internal
-
-define weak_odr hidden void @foo_defined() {
-  ret void
-}
-
-; CHECK-DAG: weak external _foo_default
-; CHECK-DAG: weak private external _foo_hidden
-; CHECK-DAG: weak private external _foo_defined

syhhyl

This comment was marked as low quality.

@cofibrant
cofibrant merged commit 0bf3638 into main Jul 25, 2026
15 of 16 checks passed
@cofibrant
cofibrant deleted the revert-198148-fix-196047-macho-weak-alias branch July 25, 2026 11:20
@llvm-ci

llvm-ci commented Jul 25, 2026

Copy link
Copy Markdown

LLVM Buildbot has detected a new failure on builder clang-arm64-windows-msvc running on linaro-armv8-windows-msvc-04 while building llvm at step 6 "test-build-unified-tree-check-all".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/161/builds/12451

Here is the relevant piece of the build log for the reference
Step 6 (test-build-unified-tree-check-all) failure: test (failure)
******************** TEST 'LLVM :: tools/llvm-debuginfod-find/timeout.test' FAILED ********************
Exit Code: 1

Command Output (stdout):
--
# RUN: at line 3
rm -rf C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\build\test\tools\llvm-debuginfod-find\Output\timeout.test.tmp
# executed command: rm -rf 'C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\build\test\tools\llvm-debuginfod-find\Output\timeout.test.tmp'
# RUN: at line 4
mkdir -p C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\build\test\tools\llvm-debuginfod-find\Output\timeout.test.tmp/debuginfod-cache
# executed command: mkdir -p 'C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\build\test\tools\llvm-debuginfod-find\Output\timeout.test.tmp/debuginfod-cache'
# RUN: at line 7
env DEBUGINFOD_TIMEOUT=1  env DEBUGINFOD_CACHE=C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\build\test\tools\llvm-debuginfod-find\Output\timeout.test.tmp/debuginfod-cache  env DEBUGINFOD_HEADERS_FILE=C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\llvm-project\llvm\test\tools\llvm-debuginfod-find/Inputs/headers    "C:\Users\tcwg\scoop\apps\python\current\python.exe" C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\llvm-project\llvm\test\tools\llvm-debuginfod-find/Inputs/delay_req.py c:\users\tcwg\llvm-worker\clang-arm64-windows-msvc\build\bin\llvm-debuginfod-find.exe --debuginfo 0 | c:\users\tcwg\llvm-worker\clang-arm64-windows-msvc\build\bin\filecheck.exe C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\llvm-project\llvm\test\tools\llvm-debuginfod-find\timeout.test
# executed command: env DEBUGINFOD_TIMEOUT=1 env 'DEBUGINFOD_CACHE=C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\build\test\tools\llvm-debuginfod-find\Output\timeout.test.tmp/debuginfod-cache' env 'DEBUGINFOD_HEADERS_FILE=C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\llvm-project\llvm\test\tools\llvm-debuginfod-find/Inputs/headers' 'C:\Users\tcwg\scoop\apps\python\current\python.exe' 'C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\llvm-project\llvm\test\tools\llvm-debuginfod-find/Inputs/delay_req.py' 'c:\users\tcwg\llvm-worker\clang-arm64-windows-msvc\build\bin\llvm-debuginfod-find.exe' --debuginfo 0
# .---command stderr------------
# | 127.0.0.1 - - [25/Jul/2026 13:09:38] "GET /buildid/00/debuginfo HTTP/1.1" 501 -
# `-----------------------------
# executed command: 'c:\users\tcwg\llvm-worker\clang-arm64-windows-msvc\build\bin\filecheck.exe' 'C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\llvm-project\llvm\test\tools\llvm-debuginfod-find\timeout.test'
# .---command stderr------------
# | C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\llvm-project\llvm\test\tools\llvm-debuginfod-find\timeout.test:13:13: error: CHECK-SAME: expected string not found in input
# | CHECK-SAME: Timeout was reached
# |             ^
# | <stdin>:5:13: note: scanning from here
# | Build ID 00: Failed to receive HTTP response
# |             ^
# | <stdin>:5:14: note: possible intended match here
# | Build ID 00: Failed to receive HTTP response
# |              ^
# | 
# | Input file: <stdin>
# | Check file: C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\llvm-project\llvm\test\tools\llvm-debuginfod-find\timeout.test
# | 
# | -dump-input=help explains the following input dump.
# | 
# | Input was:
# | <<<<<<
# |            1: warning: could not parse debuginfod header: C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\llvm-project\llvm\test\tools\llvm-debuginfod-find/Inputs/headers:3
# |  
# |            2: warning: could not parse debuginfod header: C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\llvm-project\llvm\test\tools\llvm-debuginfod-find/Inputs/headers:4
# |  
# |            3: warning: could not parse debuginfod header: C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\llvm-project\llvm\test\tools\llvm-debuginfod-find/Inputs/headers:5
# |  
# |            4: warning: could not parse debuginfod header: C:\Users\tcwg\llvm-worker\clang-arm64-windows-msvc\llvm-project\llvm\test\tools\llvm-debuginfod-find/Inputs/headers:6
# |  
# |            5: Build ID 00: Failed to receive HTTP response
# |  
# | same:13'0                {                                    search range start (exclusive)
# | same:13'1                                                     error: no match found in search range
# | same:13'2                  ?                                  possible intended match
# |            6:  
...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants