The difference between type 6 and type 7 is that type 7 is not "base relative", as far as I can see. The code in dlopen.c looks like this:
#if 0 case COFFReloc_I386_dir32nb: #ifdef DLDEBUG fprintf(stderr,"DL: reloc absolute nb: loc %p = %p\n", loc,ptr); #endif ((int32 *)loc)[0]+=((INT32)ptr) - global_imagebase; break; #endif
I assume the reason for the #if 0 is that nobody has been able to verify if this implementation is correct, since the M$ compiler didn't generate this kind of relocation.