<div dir="ltr"><div dir="ltr">On Mon, Jul 26, 2021 at 3:40 PM Wael Yehia <<a href="mailto:wyehia@ca.ibm.com">wyehia@ca.ibm.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">-----"Steven Wu" <<a href="mailto:stevenwu@apple.com" target="_blank">stevenwu@apple.com</a>> wrote: -----<br>
To: "Wael Yehia" <<a href="mailto:wyehia@ca.ibm.com" target="_blank">wyehia@ca.ibm.com</a>><br>
From: "Steven Wu" <<a href="mailto:stevenwu@apple.com" target="_blank">stevenwu@apple.com</a>><br>
Date: 07/26/2021 04:03PM<br>
Cc: "Fangrui Song" <<a href="mailto:maskray@google.com" target="_blank">maskray@google.com</a>>, "LLVM-DEV LIST" <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
Subject: [EXTERNAL] Re: [llvm-dev] [libLTO] accessing llvm.global_ctors<br>
<br>
<br>
>> On Jul 26, 2021, at 10:59 AM, Wael Yehia <<a href="mailto:wyehia@ca.ibm.com" target="_blank">wyehia@ca.ibm.com</a>> wrote:<br>
>> <br>
>> <br>
>> <br>
>> <br>
>> -----"Steven Wu" <<a href="mailto:stevenwu@apple.com" target="_blank">stevenwu@apple.com</a>> wrote: -----<br>
>> To: "Wael Yehia" <<a href="mailto:wyehia@ca.ibm.com" target="_blank">wyehia@ca.ibm.com</a>><br>
>> From: "Steven Wu" <<a href="mailto:stevenwu@apple.com" target="_blank">stevenwu@apple.com</a>><br>
>> Date: 07/26/2021 12:22PM<br>
>> Cc: "Fangrui Song" <<a href="mailto:maskray@google.com" target="_blank">maskray@google.com</a>>, <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
>> Subject: [EXTERNAL] Re: [llvm-dev] [libLTO] accessing llvm.global_ctors<br>
>> <br>
>>> It also sounds like that you just need to know if the object file has constructor or not, but don't really care anything more than that?<br>
>> yes<br>
>> <br>
>> <br>
>>> Can you read the section name from the IRSymtab to figure out if that is a constructor/destructor or not?<br>
>> Is this a suggestion of how to implement the query I'm after?<br>
>> My initial thought was to simply check for the presence of the symbols `llvm.global_ctors` and `llvm.global_dtors` in the ModuleSymbolTable in the LTOModule. <br>
><br>
>The reason why I don't want to do that is because they are not real symbols and linker do not know how to resolve them. You could stamp a different attribute on them but the old linker will not be able to understand them.<br>
<br>
Just to be clear, i'm not proposing that these two symbols start being accessible through the `lto_module_get_[num_symbols|symbol_name|symbol_attribute]` functions (which would make them visible to a linker).<br>
I'm proposing something like:<br>
<br>
lto_bool_t lto_module_has_ctor_dtor(lto_module_t mod) {<br>
  return unwrap(mod)->hasCtorDtor();<br>
}<br>
<br>
bool LTOModule::hasCtorDtor() {<br>
   // either (1) traverse `ModuleSymbolTable SymTab` or <br>
   // (2) compute and cache the answer when LTOModule::parseSymbols runs<br>
}<br>
<br>
</blockquote></div><div><br></div>Do we need a new lto-c API? Can something like LLVMGetNamedGlobal be used?</div>