[cfe-dev] Clarification for __cxx_global_var_initN and _GLOBAL__I_a
salvatore benedetto
salvatore.benedetto at gmail.com
Tue Sep 11 14:35:52 PDT 2012
Hi there,
I'm using clang to cross compile my firmware for an ARM based cpu.
I need to set up the C++ environment myself, which means I have
to call the constructors of all static objects.
After a bit of searching on the matter I saw that GCC have a
specific ELF section for this (.ctors*), where constructors address are
laid out in an array etc... so I was looking for the same on clang.
By looking at the generated ELF I found not such section, and
by looking at the disassembled code I instead noticed the __cxx_global_var_initN
symbols, and a quick grep on clang source code brought me to
CreateGlobalInitOrDestructFunction which seems to generate the calls themselves.
Still by looking at the dissambled I noticed the _GLOBAL__I_a routine where
all the calls to the various __cxx_global_var_initN are placed. So far so good.
Unfortunately though I get more than one _GLOBAL__I_a symbol in the
final binary,
and a simple call to _GLOBAL__I_a in my startup code does not work.
Are they placed in a particular section?
Now, I could keep digging in the clang and libcxxabi code base until eventually
(hopefully) I find the answer :-) but I would really appreciate if
someone can point me
to a document that explain how this process works and what I need to
get it done?
Thanks,
Salvatore
More information about the cfe-dev
mailing list