void PIC16AsmPrinter::EmitExternsAndGlobals (Module &M) { // Emit declarations for external functions. O << "section.0" <<"\n"; for (Module::iterator I = M.begin(), E = M.end(); I != E; I++) { std::string Name = Mang->getValueName(I); if (Name.compare("abort") == 0) continue; if (I->isDeclaration()) { O << "\textern " <<Name << "\n"; O << "\textern " << Name << ".retval\n"; O << "\textern " << Name << ".args\n"; } else if (I->hasExternalLinkage()) { O << "\tglobal " << Name << "\n"; O << "\tglobal " << Name << ".retval\n"; O << "\tglobal " << Name << ".args\n"; } } // Emit header file to include declaration of library functions O << "\t#include C16IntrinsicCalls.INC\n"; // Emit declarations for external globals. for (Module::const_global_iterator I = M.global_begin(), E = M.global_end(); I != E; I++) { // Any variables reaching here with ".auto." in its name is a local scope // variable and should not be printed in global data section. std::string Name = Mang->getValueName(I); if (isLocalName (Name)) continue; if (I->isDeclaration()) O << "\textern "<< Name << "\n"; else if (I->hasCommonLinkage() || I->hasExternalLinkage()) O << "\tglobal "<< Name << "\n"; } }