From 8aa1ebcddaa783a48cf3cd35923be11c9248bc53 Mon Sep 17 00:00:00 2001
From: Zuzana Baranova <xbaranov@fi.muni.cz>
Date: Sun, 23 Jun 2019 08:41:44 +0000
Subject: [PATCH] RT: Move DiOS-specific link_bitcode parts into NativeDiosCC.

---
 divine/rt/dios-cc.cpp | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/divine/rt/dios-cc.cpp b/divine/rt/dios-cc.cpp
index 5a32729b0..5a797b33a 100644
--- a/divine/rt/dios-cc.cpp
+++ b/divine/rt/dios-cc.cpp
@@ -91,7 +91,24 @@ auto NativeDiosCC::link_dios_native( bool cxx )
 
 std::unique_ptr< llvm::Module > NativeDiosCC::link_bitcode()
 {
-    return cc::link_bitcode< rt::DiosCC, true >( _files, _clang, _po.libSearchPath );
+    auto drv = std::make_unique< DiosCC >( _clang.context() );
+    std::unique_ptr< llvm::Module > m = Native::do_link_bitcode< rt::DiosCC >();
+    drv->link( std::move( m ) );
+    drv->linkLibs( DiosCC::defaultDIVINELibs );
+
+    m = drv->takeLinked();
+
+    for ( auto& func : *m )
+        if ( func.isDeclaration() && !whitelisted( func ) )
+            throw cc::CompileError( "Symbol undefined (function): " + func.getName().str() );
+
+    for ( auto& val : m->globals() )
+        if ( auto G = dyn_cast< llvm::GlobalVariable >( &val ) )
+            if ( !G->hasInitializer() && !whitelisted( *G ) )
+                throw cc::CompileError( "Symbol undefined (global variable): " + G->getName().str() );
+
+    verifyModule( *m );
+    return m;
 }
 
 void NativeDiosCC::link()
-- 
GitLab