* --disable-high-entropy-va is not accepted on 32-bit ld, it should be added only on 64-bit. * New Cygwin linker driver was not passing --large-address-aware on 32-bit * Microsoft-style calling convention name mangling (such as stdcall Name@N) was disabled on Cygwin, regression from 21.1. This would have been an issue on x86_64 as well with vectorcall I think
76 lines
3.5 KiB
Diff
76 lines
3.5 KiB
Diff
From 9aa120518b3fa4288b590f697013a98bce615545 Mon Sep 17 00:00:00 2001
|
|
From: Tomohiro Kashiwada <kikairoya@gmail.com>
|
|
Date: Sun, 14 Sep 2025 06:40:12 +0900
|
|
Subject: [PATCH] [Clang][Cygwin] Use correct mangling rule (#158404)
|
|
|
|
In
|
|
https://github.com/llvm/llvm-project/commit/45ca613c135ea7b5fbc63bff003f20bf20f62081,
|
|
whether to mangle names based on calling conventions according to
|
|
Microsoft conventions was refactored to a bool in the TargetInfo. Cygwin
|
|
targets also require this mangling, but were missed, presumably due to
|
|
lack of test coverage of these targets. This commit enables the name
|
|
mangling for Cygwin, and also enables test coverage of this mangling on
|
|
Cygwin targets.
|
|
|
|
(cherry picked from commit 4abcbb053f8adaf48dbfff677e8ccda1f6d52b33)
|
|
---
|
|
clang/lib/Basic/Targets/X86.h | 2 ++
|
|
clang/test/CodeGen/mangle-windows.c | 6 ++++--
|
|
clang/test/CodeGenCXX/mangle-windows.cpp | 3 +++
|
|
3 files changed, 9 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/clang/lib/Basic/Targets/X86.h b/clang/lib/Basic/Targets/X86.h
|
|
index ebc59c92f4..a7be080695 100644
|
|
--- a/clang/lib/Basic/Targets/X86.h
|
|
+++ b/clang/lib/Basic/Targets/X86.h
|
|
@@ -649,6 +649,7 @@ public:
|
|
: X86_32TargetInfo(Triple, Opts) {
|
|
this->WCharType = TargetInfo::UnsignedShort;
|
|
this->WIntType = TargetInfo::UnsignedInt;
|
|
+ this->UseMicrosoftManglingForC = true;
|
|
DoubleAlign = LongLongAlign = 64;
|
|
resetDataLayout("e-m:x-p:32:32-p270:32:32-p271:32:32-p272:64:64-i64:64-"
|
|
"i128:128-f80:32-n8:16:32-a:0:32-S32",
|
|
@@ -986,6 +987,7 @@ public:
|
|
: X86_64TargetInfo(Triple, Opts) {
|
|
this->WCharType = TargetInfo::UnsignedShort;
|
|
this->WIntType = TargetInfo::UnsignedInt;
|
|
+ this->UseMicrosoftManglingForC = true;
|
|
}
|
|
|
|
void getTargetDefines(const LangOptions &Opts,
|
|
diff --git a/clang/test/CodeGen/mangle-windows.c b/clang/test/CodeGen/mangle-windows.c
|
|
index 046b1e8815..e1b06e72a9 100644
|
|
--- a/clang/test/CodeGen/mangle-windows.c
|
|
+++ b/clang/test/CodeGen/mangle-windows.c
|
|
@@ -1,8 +1,10 @@
|
|
// RUN: %clang_cc1 -emit-llvm %s -o - -triple=i386-pc-win32 | FileCheck %s
|
|
-// RUN: %clang_cc1 -emit-llvm %s -o - -triple=i386-mingw32 | FileCheck %s
|
|
+// RUN: %clang_cc1 -emit-llvm %s -o - -triple=i386-mingw32 | FileCheck %s
|
|
+// RUN: %clang_cc1 -emit-llvm %s -o - -triple=i386-cygwin | FileCheck %s
|
|
// RUN: %clang_cc1 -emit-llvm %s -o - -triple=i386-pc-windows-msvc-elf | FileCheck %s --check-prefix=ELF32
|
|
// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-pc-win32 | FileCheck %s --check-prefix=X64
|
|
-// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-mingw32 | FileCheck %s --check-prefix=X64
|
|
+// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-mingw32 | FileCheck %s --check-prefix=X64
|
|
+// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-cygwin | FileCheck %s --check-prefix=X64
|
|
// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-pc-windows-msvc-elf | FileCheck %s --check-prefix=ELF64
|
|
|
|
// CHECK: target datalayout = "e-m:x-{{.*}}"
|
|
diff --git a/clang/test/CodeGenCXX/mangle-windows.cpp b/clang/test/CodeGenCXX/mangle-windows.cpp
|
|
index 3d5a1e9a86..737abcf6e3 100644
|
|
--- a/clang/test/CodeGenCXX/mangle-windows.cpp
|
|
+++ b/clang/test/CodeGenCXX/mangle-windows.cpp
|
|
@@ -4,6 +4,9 @@
|
|
// RUN: %clang_cc1 -emit-llvm %s -o - -triple=i386-mingw32 | \
|
|
// RUN: FileCheck --check-prefix=ITANIUM %s
|
|
|
|
+// RUN: %clang_cc1 -emit-llvm %s -o - -triple=i386-cygwin | \
|
|
+// RUN: FileCheck --check-prefix=ITANIUM %s
|
|
+
|
|
void __stdcall f1(void) {}
|
|
// WIN: define dso_local x86_stdcallcc void @"?f1@@YGXXZ"
|
|
// ITANIUM: define dso_local x86_stdcallcc void @"\01__Z2f1v@0"
|
|
--
|
|
2.51.0.windows.1
|
|
|