rjmccall added inline comments.

================
Comment at: lib/CodeGen/CGBlocks.cpp:1276
+    InitVar->setSection(".CRT$XCLa");
+    CGM.addUsedGlobal(InitVar);
+  }
----------------
DHowett-MSFT wrote:
> rjmccall wrote:
> > Is the priority system not good enough?
> My reading of the LLVM language reference leads me to believe it’s only 
> ordered per-module. If that’s the case, the benefit of emitting into `XC*` is 
> that it provides guaranteed order over all linker input.
> 
> `llvm.global_ctors` excerpt:
> 
> > The functions referenced by this array will be called in ascending order of 
> > priority (i.e. lowest first) when the module is loaded.
> 
> Now if the priority system _is_ guaranteed over all linker input, will that 
> guarantee hold for mixed Clang and CL objects?
Init priorities on ELF are preserved in the section name like 
`.init_array.200`, and the sections get sorted by that in the image — it's 
really a very similar trick to how it works with `.CRT$XC`.  Of the major 
formats, I think it's just Mach-O that doesn't have any built-in prioritization 
mechanism across object files.  But I don't know if LLVM actually tries to 
translate init priorities over into `.CRT$XC` suffices when targeting PE/COFF, 
and arguably that's good: init priorities as presented in LLVM right now are 
pretty specific to the ELF mechanism.  Long-term, maybe `llvm.global_ctors` 
should be generalized so that on ELF targets it takes an integer priority, on 
PE/COFF targets it takes a string, and on Mach-O it doesn't take anything at 
all; but I won't hold up this patch for that.

On the other hand, I tend to agree that maybe the best solution is for the 
backend to just take care of this and automatically create a global initializer 
to install non-function (or maybe non-function & `unnamed_addr`) `dllimport`ed 
symbols in global data.


Repository:
  rC Clang

https://reviews.llvm.org/D50144



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to