[AsmPrinter] Delete redundant .type foo, @function when emitting an ifunc

In MCAsmStreamer:

.type foo,@function   # <--- this is redundant
.type foo,@gnu_indirect_function

In MCELFStreamer, the latter STT_GNU_IFUNC overrides STT_FUNC.

llvm-svn: 368823
This commit is contained in:
Fangrui Song 2019-08-14 10:30:27 +00:00
parent 15e26d1fe9
commit 8caa0aaa4d
2 changed files with 5 additions and 7 deletions

View File

@ -1313,11 +1313,10 @@ void AsmPrinter::emitGlobalIndirectSymbol(Module &M,
// Set the symbol type to function if the alias has a function type.
// This affects codegen when the aliasee is not a function.
if (IsFunction) {
OutStreamer->EmitSymbolAttribute(Name, MCSA_ELF_TypeFunction);
if (isa<GlobalIFunc>(GIS))
OutStreamer->EmitSymbolAttribute(Name, MCSA_ELF_TypeIndFunction);
}
if (IsFunction)
OutStreamer->EmitSymbolAttribute(Name, isa<GlobalIFunc>(GIS)
? MCSA_ELF_TypeIndFunction
: MCSA_ELF_TypeFunction);
EmitVisibility(Name, GIS.getVisibility());

View File

@ -10,6 +10,5 @@ entry:
; CHECK-NEXT: foo_ifunc:
@foo = ifunc i32 (i32), i64 ()* @foo_ifunc
; CHECK: .type foo,@function
; CHECK-NEXT: .type foo,@gnu_indirect_function
; CHECK: .type foo,@gnu_indirect_function
; CHECK-NEXT: .set foo, foo_ifunc