mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-19 11:41:53 +00:00
Correct PrivateLinkage for COFF
- Use storage class C_STAT for 'PrivateLinkage' The storage class for PrivateLinkage should equal to the Internal Linkage. - Set 'PrivateGlobalPrefix' from "L" to ".L" for MM_WinCOFF (includes x86_64) MM_WinCOFF has empty GlobalPrefix '\0' so PrivateGlobalPrefix "L" may conflict to the normal symbol name starting with 'L'. Based on a patch by Han Sangjin! Manually updated test cases. llvm-svn: 284096
This commit is contained in:
parent
6441d42855
commit
b5d0510883
@ -286,11 +286,11 @@ public:
|
||||
case MM_None:
|
||||
return "";
|
||||
case MM_ELF:
|
||||
case MM_WinCOFF:
|
||||
return ".L";
|
||||
case MM_Mips:
|
||||
return "$";
|
||||
case MM_MachO:
|
||||
case MM_WinCOFF:
|
||||
case MM_WinCOFFX86:
|
||||
return "L";
|
||||
}
|
||||
|
@ -57,10 +57,10 @@ bool X86AsmPrinter::runOnMachineFunction(MachineFunction &MF) {
|
||||
SetupMachineFunction(MF);
|
||||
|
||||
if (Subtarget->isTargetCOFF()) {
|
||||
bool Intrn = MF.getFunction()->hasInternalLinkage();
|
||||
bool Local = MF.getFunction()->hasLocalLinkage();
|
||||
OutStreamer->BeginCOFFSymbolDef(CurrentFnSym);
|
||||
OutStreamer->EmitCOFFSymbolStorageClass(Intrn ? COFF::IMAGE_SYM_CLASS_STATIC
|
||||
: COFF::IMAGE_SYM_CLASS_EXTERNAL);
|
||||
OutStreamer->EmitCOFFSymbolStorageClass(
|
||||
Local ? COFF::IMAGE_SYM_CLASS_STATIC : COFF::IMAGE_SYM_CLASS_EXTERNAL);
|
||||
OutStreamer->EmitCOFFSymbolType(COFF::IMAGE_SYM_DTYPE_FUNCTION
|
||||
<< COFF::SCT_COMPLEX_TYPE_SHIFT);
|
||||
OutStreamer->EndCOFFSymbolDef();
|
||||
|
@ -10,7 +10,7 @@ entry:
|
||||
}
|
||||
|
||||
; CHECK-LABEL: caller
|
||||
; CHECK: ldr [[REG:r[0-9]+]], [[CPI:LCPI[_0-9]+]]
|
||||
; CHECK: ldr [[REG:r[0-9]+]], [[CPI:\.LCPI[_0-9]+]]
|
||||
; CHECK: bx [[REG]]
|
||||
; CHECK: .p2align 2
|
||||
; CHECK: [[CPI]]:
|
||||
|
@ -22,7 +22,7 @@ define i32 @f() {
|
||||
; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
||||
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
||||
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:LCPI[0-9]+_[0-9]+]]
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
||||
|
||||
; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
|
||||
|
||||
@ -43,7 +43,7 @@ define i32 @e() {
|
||||
; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
||||
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
||||
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:LCPI[0-9]+_[0-9]+]]
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
||||
|
||||
; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
|
||||
|
||||
@ -64,7 +64,7 @@ define i32 @d() {
|
||||
; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
||||
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
||||
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:LCPI[0-9]+_[0-9]+]]
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
||||
|
||||
; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
|
||||
|
||||
@ -85,7 +85,7 @@ define i32 @c() {
|
||||
; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
||||
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
||||
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:LCPI[0-9]+_[0-9]+]]
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
||||
|
||||
; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
|
||||
|
||||
@ -106,7 +106,7 @@ define i32 @b() {
|
||||
; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
||||
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
||||
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:LCPI[0-9]+_[0-9]+]]
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
||||
|
||||
; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
|
||||
|
||||
@ -127,7 +127,7 @@ define i16 @a() {
|
||||
; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
||||
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
||||
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:LCPI[0-9]+_[0-9]+]]
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
||||
|
||||
; CHECK-NEXT: ldrh r0, {{\[}}[[TLS]], [[SLOT]]]
|
||||
|
||||
@ -148,7 +148,7 @@ define i8 @Z() {
|
||||
; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
|
||||
; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
|
||||
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:LCPI[0-9]+_[0-9]+]]
|
||||
; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
|
||||
|
||||
; CHECK-NEXT: ldrb r0, {{\[}}[[TLS]], [[SLOT]]]
|
||||
|
||||
|
@ -28,6 +28,6 @@ entry:
|
||||
define private x86_fastcallcc void @dontCrash() {
|
||||
; The name is fairly arbitrary since it is private. Just don't crash.
|
||||
; CHECK32-LABEL: {{^}}L@dontCrash@0:
|
||||
; CHECK64-LABEL: {{^}}LdontCrash:
|
||||
; CHECK64-LABEL: {{^}}.LdontCrash:
|
||||
ret void
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user