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 | 4f01b783a3ca5b2544fe1b1677b5bcf6d91c6d2c (patch) | |
| tree | c2f1cc6fb429dc3d092104ea775e8f95132691fe /llvm/lib/Target/X86/X86ATTAsmPrinter.cpp | |
| parent | c7b2ab9bdfbaa1a1acd188136d5539d6badf56ce (diff) | |
| download | bcm5719-llvm-4f01b783a3ca5b2544fe1b1677b5bcf6d91c6d2c.tar.gz bcm5719-llvm-4f01b783a3ca5b2544fe1b1677b5bcf6d91c6d2c.zip | |
Emit symbol type information for ELF/COFF targets
llvm-svn: 33256
Diffstat (limited to 'llvm/lib/Target/X86/X86ATTAsmPrinter.cpp')
| -rwxr-xr-x | llvm/lib/Target/X86/X86ATTAsmPrinter.cpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp index 096f712eba3..02faf7cdb39 100755 --- a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/llvm/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); + } } } |

