Author: esmeyi Date: 2023-07-26T19:27:54+02:00 New Revision: 6ce6dcf233ead31f1776a57a3dc80f722cfe2864
URL: https://github.com/llvm/llvm-project/commit/6ce6dcf233ead31f1776a57a3dc80f722cfe2864 DIFF: https://github.com/llvm/llvm-project/commit/6ce6dcf233ead31f1776a57a3dc80f722cfe2864.diff LOG: [XCOFF] Enable available_externally linkage for functions. Summary: D80642 added support for emitting AvailableExternally Linkage on AIX. However, an assertion of "Trying to get csect representation of this symbol but none was set." occurred when a function is declared as available_externally. This is due to we missing to generate a csect for the function. This patch fixes it. Reviewed By: hubert.reinterpretcast, shchenz Differential Revision: https://reviews.llvm.org/D156213 Signed-off-by: Esme Yi <esme...@ibm.com> (cherry picked from commit e83b8a5e711a663c44e80965da5c747e08dea497) Added: llvm/test/CodeGen/PowerPC/aix-available-externally-linkage-fun.ll Modified: llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp Removed: ################################################################################ diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp index 3994552884c4f6..647f570ab807e1 100644 --- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp +++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp @@ -2628,12 +2628,12 @@ MCSymbol *TargetLoweringObjectFileXCOFF::getFunctionEntryPointSymbol( // function entry point csect instead. And for function delcarations, the // undefined symbols gets treated as csect with XTY_ER property. if (((TM.getFunctionSections() && !Func->hasSection()) || - Func->isDeclaration()) && + Func->isDeclarationForLinker()) && isa<Function>(Func)) { return getContext() .getXCOFFSection( NameStr, SectionKind::getText(), - XCOFF::CsectProperties(XCOFF::XMC_PR, Func->isDeclaration() + XCOFF::CsectProperties(XCOFF::XMC_PR, Func->isDeclarationForLinker() ? XCOFF::XTY_ER : XCOFF::XTY_SD)) ->getQualNameSymbol(); diff --git a/llvm/test/CodeGen/PowerPC/aix-available-externally-linkage-fun.ll b/llvm/test/CodeGen/PowerPC/aix-available-externally-linkage-fun.ll new file mode 100644 index 00000000000000..f87184f7b4bf45 --- /dev/null +++ b/llvm/test/CodeGen/PowerPC/aix-available-externally-linkage-fun.ll @@ -0,0 +1,51 @@ +; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ +; RUN: -mattr=-altivec < %s | FileCheck %s + +; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ +; RUN: -mattr=-altivec < %s | FileCheck %s + +; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr4 \ +; RUN: -mattr=-altivec -filetype=obj -o %t.o < %s +; RUN: llvm-readobj --symbols %t.o | FileCheck --check-prefix=OBJ %s + +; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr4 \ +; RUN: -mattr=-altivec -filetype=obj -o %t64.o < %s +; RUN: llvm-readobj --symbols %t64.o | FileCheck --check-prefix=OBJ %s + +define available_externally i32 @foo(i32 %a) { +entry: + ret i32 %a +} + +; CHECK: .extern .foo[PR] +; CHECK: .extern foo[DS] + +; OBJ: Name: .foo +; OBJ-NEXT: Value (RelocatableAddress): 0x0 +; OBJ-NEXT: Section: N_UNDEF +; OBJ-NEXT: Type: 0x0 +; OBJ-NEXT: StorageClass: C_EXT (0x2) +; OBJ-NEXT: NumberOfAuxEntries: 1 +; OBJ-NEXT: CSECT Auxiliary Entry { +; OBJ-NEXT: Index: 2 +; OBJ-NEXT: SectionLen: 0 +; OBJ-NEXT: ParameterHashIndex: 0x0 +; OBJ-NEXT: TypeChkSectNum: 0x0 +; OBJ-NEXT: SymbolAlignmentLog2: 0 +; OBJ-NEXT: SymbolType: XTY_ER (0x0) +; OBJ-NEXT: StorageMappingClass: XMC_PR (0x0) + +; OBJ: Name: foo +; OBJ-NEXT: Value (RelocatableAddress): 0x0 +; OBJ-NEXT: Section: N_UNDEF +; OBJ-NEXT: Type: 0x0 +; OBJ-NEXT: StorageClass: C_EXT (0x2) +; OBJ-NEXT: NumberOfAuxEntries: 1 +; OBJ-NEXT: CSECT Auxiliary Entry { +; OBJ-NEXT: Index: 4 +; OBJ-NEXT: SectionLen: 0 +; OBJ-NEXT: ParameterHashIndex: 0x0 +; OBJ-NEXT: TypeChkSectNum: 0x0 +; OBJ-NEXT: SymbolAlignmentLog2: 0 +; OBJ-NEXT: SymbolType: XTY_ER (0x0) +; OBJ-NEXT: StorageMappingClass: XMC_DS (0xA) _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits