Skip to content

Commit

Permalink
[XCOFF] Enable available_externally linkage for functions.
Browse files Browse the repository at this point in the history
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.yi@ibm.com>
(cherry picked from commit e83b8a5)
  • Loading branch information
EsmeYi authored and tru committed Jul 26, 2023
1 parent 7e68c9e commit 6ce6dcf
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 2 deletions.
4 changes: 2 additions & 2 deletions llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
51 changes: 51 additions & 0 deletions llvm/test/CodeGen/PowerPC/aix-available-externally-linkage-fun.ll
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit 6ce6dcf

Please sign in to comment.