eliminate lengths from record bodies
[oota-llvm.git] / lib / Linker / LinkArchives.cpp
index 583e1940ad9234f459657194f312a3ab08e45bbb..95ac1ab1fd9d6de45cb033f6f8ba53cc524ba60a 100644 (file)
@@ -43,13 +43,13 @@ GetAllUndefinedSymbols(Module *M, std::set<std::string> &UndefinedSymbols) {
   // If the program doesn't define a main, try pulling one in from a .a file.
   // This is needed for programs where the main function is defined in an
   // archive, such f2c'd programs.
-  Function *Main = M->getMainFunction();
-  if (Main == 0 || Main->isExternal())
+  Function *Main = M->getFunction("main");
+  if (Main == 0 || Main->isDeclaration())
     UndefinedSymbols.insert("main");
 
   for (Module::iterator I = M->begin(), E = M->end(); I != E; ++I)
     if (I->hasName()) {
-      if (I->isExternal())
+      if (I->isDeclaration())
         UndefinedSymbols.insert(I->getName());
       else if (!I->hasInternalLinkage()) {
         assert(!I->hasDLLImportLinkage()
@@ -60,7 +60,7 @@ GetAllUndefinedSymbols(Module *M, std::set<std::string> &UndefinedSymbols) {
   for (Module::global_iterator I = M->global_begin(), E = M->global_end();
        I != E; ++I)
     if (I->hasName()) {
-      if (I->isExternal())
+      if (I->isDeclaration())
         UndefinedSymbols.insert(I->getName());
       else if (!I->hasInternalLinkage()) {
         assert(!I->hasDLLImportLinkage()
@@ -88,7 +88,7 @@ GetAllUndefinedSymbols(Module *M, std::set<std::string> &UndefinedSymbols) {
 ///  TRUE  - An error occurred.
 ///  FALSE - No errors.
 bool
-Linker::LinkInArchive(const sys::Path &Filename) {
+Linker::LinkInArchive(const sys::Path &Filename, bool &is_native) {
 
   // Make sure this is an archive file we're dealing with
   if (!Filename.isArchive())
@@ -118,6 +118,11 @@ Linker::LinkInArchive(const sys::Path &Filename) {
   if (!arch)
     return error("Cannot read archive '" + Filename.toString() +
                  "': " + ErrMsg);
+  if (!arch->isBytecodeArchive()) {
+    is_native = true;
+    return false;
+  }
+  is_native = false;
 
   // Save a set of symbols that are not defined by the archive. Since we're
   // entering a loop, there's no point searching for these multiple times. This