summaryrefslogtreecommitdiff
path: root/lib/Target/X86/X86ATTAsmPrinter.cpp
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2007-01-16 16:41:57 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2007-01-16 16:41:57 +0000
commitd05ca657da029d2d3d902cdb035b311e11fd240c (patch)
tree1e8761ca28cc947b78b6f8836605e65b081354a3 /lib/Target/X86/X86ATTAsmPrinter.cpp
parentcb9009993b20ab41fab56518d666ba69533db4b3 (diff)
downloadllvm-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-xlib/Target/X86/X86ATTAsmPrinter.cpp27
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);
+ }
}
}