diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2007-01-16 16:41:57 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2007-01-16 16:41:57 +0000 |
commit | d05ca657da029d2d3d902cdb035b311e11fd240c (patch) | |
tree | 1e8761ca28cc947b78b6f8836605e65b081354a3 /lib/Target/X86/X86ATTAsmPrinter.cpp | |
parent | cb9009993b20ab41fab56518d666ba69533db4b3 (diff) | |
download | llvm-d05ca657da029d2d3d902cdb035b311e11fd240c.tar.gz llvm-d05ca657da029d2d3d902cdb035b311e11fd240c.tar.bz2 llvm-d05ca657da029d2d3d902cdb035b311e11fd240c.tar.xz |
Emit symbol type information for ELF/COFF targets
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33256 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86ATTAsmPrinter.cpp')
-rwxr-xr-x | lib/Target/X86/X86ATTAsmPrinter.cpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/lib/Target/X86/X86ATTAsmPrinter.cpp b/lib/Target/X86/X86ATTAsmPrinter.cpp index 096f712eba..02faf7cdb3 100755 --- a/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/X86ATTAsmPrinter.cpp @@ -16,6 +16,7 @@ #define DEBUG_TYPE "asm-printer" #include "X86ATTAsmPrinter.h" #include "X86.h" +#include "X86COFF.h" #include "X86MachineFunctionInfo.h" #include "X86TargetMachine.h" #include "X86TargetAsmInfo.h" @@ -128,7 +129,17 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) { if (F->hasHiddenVisibility()) if (const char *Directive = TAI->getHiddenDirective()) O << Directive << CurrentFnName << "\n"; - + + if (Subtarget->isTargetELF()) + O << "\t.type " << CurrentFnName << ",@function\n"; + else if (Subtarget->isTargetCygMing()) { + O << "\t.def\t " << CurrentFnName + << ";\t.scl\t" << + (F->getLinkage() == Function::InternalLinkage ? COFF::C_STAT : COFF::C_EXT) + << ";\t.type\t" << (COFF::DT_FCN << COFF::N_BTSHFT) + << ";\t.endef\n"; + } + O << CurrentFnName << ":\n"; // Add some workaround for linkonce linkage on Cygwin\MinGW if (Subtarget->isTargetCygMing() && @@ -289,10 +300,16 @@ void X86ATTAsmPrinter::printOperand(const MachineInstr *MI, unsigned OpNo, } O << Name; - if (Subtarget->isPICStyleGOT() && isCallOp && isa<Function>(GV)) { - // Assemble call via PLT for non-local symbols - if (!isHidden || isExt) - O << "@PLT"; + if (isCallOp && isa<Function>(GV)) { + if (Subtarget->isPICStyleGOT()) { + // Assemble call via PLT for non-local symbols + if (!isHidden || GV->isExternal()) + O << "@PLT"; + } + if (Subtarget->isTargetCygMing() && GV->isExternal()) { + // Save function name for later type emission + FnStubs.insert(Name); + } } } |