@@ -4748,14 +4748,16 @@ fn create_module_map(ccx: @crate_ctxt) -> ValueRef {
4748
4748
}
4749
4749
4750
4750
4751
- fn decl_crate_map ( sess : session:: session , mapname : str ,
4751
+ fn decl_crate_map ( sess : session:: session , mapmeta : link :: link_meta ,
4752
4752
llmod : ModuleRef ) -> ValueRef {
4753
4753
let targ_cfg = sess. targ_cfg ;
4754
4754
let int_type = T_int ( targ_cfg) ;
4755
4755
let mut n_subcrates = 1 ;
4756
4756
let cstore = sess. cstore ;
4757
4757
while cstore:: have_crate_data ( cstore, n_subcrates) { n_subcrates += 1 ; }
4758
- let mapname = if sess. building_library { mapname } else { "toplevel" } ;
4758
+ let mapname = if sess. building_library {
4759
+ mapmeta. name + "_" + mapmeta. vers + "_" + mapmeta. extras_hash
4760
+ } else { "toplevel" } ;
4759
4761
let sym_name = "_rust_crate_map_" + mapname;
4760
4762
let arrtype = T_array ( int_type, n_subcrates as uint ) ;
4761
4763
let maptype = T_struct ( [ int_type, arrtype] ) ;
@@ -4766,13 +4768,15 @@ fn decl_crate_map(sess: session::session, mapname: str,
4766
4768
ret map;
4767
4769
}
4768
4770
4769
- // FIXME use hashed metadata instead of crate names once we have that
4770
4771
fn fill_crate_map ( ccx : @crate_ctxt , map : ValueRef ) {
4771
4772
let mut subcrates: [ ValueRef ] = [ ] ;
4772
4773
let mut i = 1 ;
4773
4774
let cstore = ccx. sess . cstore ;
4774
4775
while cstore:: have_crate_data ( cstore, i) {
4775
- let nm = "_rust_crate_map_" + cstore:: get_crate_data ( cstore, i) . name ;
4776
+ let cdata = cstore:: get_crate_data ( cstore, i) ;
4777
+ let nm = "_rust_crate_map_" + cdata. name +
4778
+ "_" + cstore:: get_crate_vers ( cstore, i) +
4779
+ "_" + cstore:: get_crate_hash ( cstore, i) ;
4776
4780
let cr = str:: as_c_str ( nm, { |buf|
4777
4781
llvm:: LLVMAddGlobal ( ccx. llmod , ccx. int_type , buf)
4778
4782
} ) ;
@@ -4857,7 +4861,7 @@ fn trans_crate(sess: session::session, crate: @ast::crate, tcx: ty::ctxt,
4857
4861
lib:: llvm:: associate_type ( tn, "taskptr" , taskptr_type) ;
4858
4862
let tydesc_type = T_tydesc ( targ_cfg) ;
4859
4863
lib:: llvm:: associate_type ( tn, "tydesc" , tydesc_type) ;
4860
- let crate_map = decl_crate_map ( sess, link_meta. name , llmod) ;
4864
+ let crate_map = decl_crate_map ( sess, link_meta, llmod) ;
4861
4865
let dbg_cx = if sess. opts . debuginfo {
4862
4866
option:: some ( debuginfo:: mk_ctxt ( llmod_id) )
4863
4867
} else {
0 commit comments