This is the proper code for this method, thanks to Reid for getting CVS working
authorChris Lattner <sabre@nondot.org>
Mon, 22 Nov 2004 16:54:54 +0000 (16:54 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 22 Nov 2004 16:54:54 +0000 (16:54 +0000)
again.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18103 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ExecutionEngine/ExecutionEngine.h

index adc2b2f5c774e8a010939a848ffbac0bf4b882a1..dd83a8a522889987518a7653d4ab74a4c29b49f4 100644 (file)
@@ -93,11 +93,20 @@ public:
     }
   }
 
-  /// FIXME: I have no idea if this is right, I just implemented it to get
-  /// the build to compile because it is called by JIT/Emitter.cpp.
-  void updateGlobalMapping(const GlobalValue *GV, void*Addr) {
-    GlobalAddressMap[GV] = Addr;
-    GlobalAddressReverseMap[Addr] = GV;
+  /// updateGlobalMapping - Replace an existing mapping for GV with a new
+  /// address.  This updates both maps as required.
+  void updateGlobalMapping(const GlobalValue *GV, void *Addr) {
+    void *&CurVal = GlobalAddressMap[GV];
+    if (CurVal && !GlobalAddressReverseMap.empty())
+      GlobalAddressReverseMap.erase(CurVal);
+    CurVal = Addr;
+
+    // If we are using the reverse mapping, add it too
+    if (!GlobalAddressReverseMap.empty()) {
+      const GlobalValue *&V = GlobalAddressReverseMap[Addr];
+      assert((V == 0 || GV == 0) && "GlobalMapping already established!");
+      V = GV;
+    }
   }
 
   /// getPointerToGlobalIfAvailable - This returns the address of the specified