Index: coregrind/m_debuginfo/debuginfo.c
===================================================================
--- coregrind/m_debuginfo/debuginfo.c	(revision 11050)
+++ coregrind/m_debuginfo/debuginfo.c	(working copy)
@@ -470,7 +470,7 @@
    into VG_AR_DINFO, and the new DebugInfo is added to
    debugInfo_list. */
 static
-DebugInfo* find_or_create_DebugInfo_for ( UChar* filename, UChar* memname )
+DebugInfo* find_or_create_DebugInfo_for ( UChar* filename, UChar* memname, Addr base)
 {
    DebugInfo* di;
    vg_assert(filename);
@@ -480,7 +480,11 @@
           && ( (memname && di->memname) 
                   ? 0==VG_(strcmp)(memname, di->memname)
                   : True ))
-         break;
+	if (base == 0
+	    || (base != 0 && di->have_rx_map && di->rx_map_avma == base))
+	  {
+	    break;
+	  }
    }
    if (!di) {
       di = alloc_DebugInfo(filename, memname);
@@ -765,7 +769,7 @@
 
    /* See if we have a DebugInfo for this filename.  If not,
       create one. */
-   di = find_or_create_DebugInfo_for( filename, NULL/*membername*/ );
+   di = find_or_create_DebugInfo_for( filename, NULL/*membername*/, is_rx_map?a:0);
    vg_assert(di);
 
    if (is_rx_map) {
@@ -1072,7 +1077,7 @@
    discard_syms_in_range( avma_obj, total_size );
 
    { void* pdbimage = (void*)sr_Res(sres);
-     DebugInfo* di = find_or_create_DebugInfo_for(exename, NULL/*membername*/ );
+     DebugInfo* di = find_or_create_DebugInfo_for(exename, NULL/*membername*/, 0 /*base*/);
 
      /* this di must be new, since we just nuked any old stuff in the range */
      vg_assert(di && !di->have_rx_map && !di->have_rw_map);
@@ -1129,7 +1134,7 @@
 
       Bool       ok;
       DebugInfo* di;
-      di = find_or_create_DebugInfo_for( file_name, mem_name );
+      di = find_or_create_DebugInfo_for( file_name, mem_name, 0/*base*/);
       vg_assert(di);
 
       if (code_len > 0) {
