[LLVMdev] Question about ctors, dtors and sections on Windows

Joe Groff arcata at gmail.com
Fri Sep 14 17:42:17 PDT 2012

On Mon, Sep 10, 2012 at 12:05 PM, Kai <kai at redstar.de> wrote:
> On Windows, functions from llvm.global_ctors are placed in section .CRT$XCU,
> which is automatically called by the MS C Runtime. However, functions from
> llvm.global_dtors are placed in section .dtors which is unknown to the
> runtime. Therefore only ctors are called. Is this expected behaviour?
> My expectation was that the dtors placed in .CRT$XTU which are the C
> terminator functions. Maybe there is a way to customize this?

Hi Kai. I submitted the patch to use the .CRT$XCU section for ctors on
Win32; I did not do so for dtors because I was unaware of .CRT$XTU. My
apologies. If you look in lib/MC/MCObjectFileInfo.cpp:417, you can see
the following logic:


  if (T.getOS() == Triple::Win32) {
    StaticCtorSection =
                          COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
  } else {
    StaticCtorSection =
                          COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
                          COFF::IMAGE_SCN_MEM_READ |

The logic just needs to be replicated to set StaticDtorSection
appropriately for Win32 targets. Sorry again for the oversight.


More information about the llvm-dev mailing list