mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-06 06:33:24 +00:00
WinCOFF: Add support for -ffunction-sections
This is a pretty straight forward translation for COFF, we just need to stick the function in a COMDAT section marked as IMAGE_COMDAT_SELECT_NODUPLICATES. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204565 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2ca626570f
commit
77df5169a8
@ -768,18 +768,23 @@ static const char *getCOFFSectionNameForUniqueGlobal(SectionKind Kind) {
|
||||
const MCSection *TargetLoweringObjectFileCOFF::
|
||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
Mangler &Mang, const TargetMachine &TM) const {
|
||||
// If we have -ffunction-sections then we should emit the global value to a
|
||||
// uniqued section specifically for it.
|
||||
// TODO: Implement -fdata-sections.
|
||||
bool EmitUniquedSection = Kind.isText() && TM.getFunctionSections();
|
||||
|
||||
// If this global is linkonce/weak and the target handles this by emitting it
|
||||
// into a 'uniqued' section name, create and return the section now.
|
||||
if (GV->isWeakForLinker()) {
|
||||
if (GV->isWeakForLinker() || EmitUniquedSection) {
|
||||
const char *Name = getCOFFSectionNameForUniqueGlobal(Kind);
|
||||
unsigned Characteristics = getCOFFSectionFlags(Kind);
|
||||
|
||||
Characteristics |= COFF::IMAGE_SCN_LNK_COMDAT;
|
||||
MCSymbol *Sym = TM.getSymbol(GV, Mang);
|
||||
return getContext().getCOFFSection(Name, Characteristics,
|
||||
Kind, Sym->getName(),
|
||||
COFF::IMAGE_COMDAT_SELECT_ANY);
|
||||
return getContext().getCOFFSection(
|
||||
Name, Characteristics, Kind, Sym->getName(),
|
||||
GV->isWeakForLinker() ? COFF::IMAGE_COMDAT_SELECT_ANY
|
||||
: COFF::IMAGE_COMDAT_SELECT_NODUPLICATES);
|
||||
}
|
||||
|
||||
if (Kind.isText())
|
||||
|
@ -3,6 +3,7 @@
|
||||
; RUN: llc < %s -mtriple=i386-apple-darwin10 -relocation-model=static | FileCheck %s -check-prefix=DARWIN-STATIC
|
||||
; RUN: llc < %s -mtriple=x86_64-apple-darwin10 | FileCheck %s -check-prefix=DARWIN64
|
||||
; RUN: llc < %s -mtriple=i386-unknown-linux-gnu -fdata-sections | FileCheck %s -check-prefix=LINUX-SECTIONS
|
||||
; RUN: llc < %s -mtriple=i686-pc-win32 -ffunction-sections | FileCheck %s -check-prefix=WIN32-SECTIONS
|
||||
|
||||
|
||||
; int G1;
|
||||
@ -176,3 +177,10 @@
|
||||
; LINUX-SECTIONS: .LG14:
|
||||
; LINUX-SECTIONS: .asciz "foo"
|
||||
; LINUX-SECTIONS: .size .LG14, 4
|
||||
|
||||
define void @G15() {
|
||||
ret void
|
||||
}
|
||||
|
||||
; WIN32-SECTIONS: .section .text,"xr",one_only,_G15
|
||||
; WIN32-SECTIONS: .globl _G15
|
||||
|
Loading…
x
Reference in New Issue
Block a user