diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake index 964fa59c0bae..133e8ef3d8a1 100644 --- a/llvm/cmake/modules/HandleLLVMOptions.cmake +++ b/llvm/cmake/modules/HandleLLVMOptions.cmake @@ -232,6 +232,13 @@ if(MSVC) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10000000") elseif(MINGW) # FIXME: Also cygwin? set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--stack,16777216") + + # Pass -mbig-obj to mingw gas on Win64. COFF has a 2**16 section limit, and + # on Win64, every COMDAT function creates at least 3 sections: .text, .pdata, + # and .xdata. + if (CMAKE_SIZEOF_VOID_P EQUAL 8) + append("-Wa,-mbig-obj" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) + endif() endif() if( MSVC )