Does this patch fix the problem for you?
RTDyldMemoryManager.diff (577 Bytes)
Hi,
Thanks for the patch. It fixed the link error on lli.exe using the 64 bit tools. The build proceeded to the 82% mark and then failed with a couple of new errors from the assembler.
c:/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/4.8.1/…/…/…/…/x86_64-w64-mingw32/bin/as.exe: CMakeFiles/clangDynamicASTMatchers.dir/Registry.cpp.obj: too many sections (39110)
C:\Users\DennisC\AppData\Local\Temp\cc811i4n.s: Assembler messages:
C:\Users\DennisC\AppData\Local\Temp\cc811i4n.s: Fatal error: can’t write CMakeFiles/clangDynamicASTMatchers.dir/Registry.cpp.obj: File too big
c:/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/4.8.1/…/…/…/…/x86_64-w64-mingw32/bin/as.exe: CMakeFiles/clangDynamicASTMatchers.dir/Registry.cpp.obj: too many sections (39110)
C:\Users\DennisC\AppData\Local\Temp\cc811i4n.s: Fatal error: can’t close CMakeFiles/clangDynamicASTMatchers.dir/Registry.cpp.obj: File too big
tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/build.make:130: recipe for target `tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/Registry.cpp.obj’ failed
make[2]: *** [tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/Registry.cpp.obj] Error 1
CMakeFiles/Makefile2:10926: recipe for target `tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/all’ failed
make[1]: *** [tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/all] Error 2
Makefile:136: recipe for target `all’ failed
make: *** [all] Error 2
Does anyone have any ideas about what might be causing the Registry.cpp.obj file to have too many sections?
There were several warnings and notes generated when compiling Registry.cpp. The full output from the build step are copied below.
[ 82%] Building CXX object tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/Registry.cpp.obj
In file included from C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchers.h:50:0,
from C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/Dynamic/VariantValue.h:22,
from C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/Dynamic/Diagnostics.h:21,
from C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/Dynamic/Registry.h:20,
from c:/cmd_line_tools/llvm/tools/clang/lib/ASTMatchers/Dynamic/Registry.cpp:15:
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h: In member function 'bool clang::ast_matchers::in
ternal::ASTMatchFinder::matchesChildOf(const T&, const clang::ast_matchers::internal::DynTypedMatcher&, clang::ast_matchers::interna
l::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::TraversalKind, clang::ast_matchers::internal::ASTMatchFind
er::BindKind)’:
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:688:9: warning: typedef 'unsupported_type_for_rec
ursive_matching’ locally defined but not used [-Wunused-local-typedefs]
unsupported_type_for_recursive_matching);
^
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:57:39: note: in definition of macro 'TOOLING_COMP
ILE_ASSERT’
typedef CompileAssert<(bool(Expr))> Msg[bool(Expr) ? 1 : -1]
^
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h: In member function 'bool clang::ast_matchers::in
ternal::ASTMatchFinder::matchesDescendantOf(const T&, const clang::ast_matchers::internal::DynTypedMatcher&, clang::ast_matchers::in
ternal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::BindKind)’:
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:705:9: warning: typedef 'unsupported_type_for_rec
ursive_matching’ locally defined but not used [-Wunused-local-typedefs]
unsupported_type_for_recursive_matching);
^
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:57:39: note: in definition of macro 'TOOLING_COMP
ILE_ASSERT’
typedef CompileAssert<(bool(Expr))> Msg[bool(Expr) ? 1 : -1]
^
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h: In member function 'bool clang::ast_matchers::in
ternal::ASTMatchFinder::matchesAncestorOf(const T&, const clang::ast_matchers::internal::DynTypedMatcher&, clang::ast_matchers::inte
rnal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::AncestorMatchMode)’:
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:718:28: warning: typedef 'only_Decl_or_Stmt_allow
ed_for_recursive_matching’ locally defined but not used [-Wunused-local-typedefs]
only_Decl_or_Stmt_allowed_for_recursive_matching);
^
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:57:39: note: in definition of macro 'TOOLING_COMP
ILE_ASSERT’
typedef CompileAssert<(bool(Expr))> Msg[bool(Expr) ? 1 : -1]
^
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h: In member function 'clang::ast_matchers::interna
l::PolymorphicMatcherWithParam0<MatcherT, ReturnTypesF>::operator clang::ast_matchers::internal::Matcher() const’:
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:863:28: warning: typedef 'right_polymorphic_conve
rsion’ locally defined but not used [-Wunused-local-typedefs]
right_polymorphic_conversion);
^
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:57:39: note: in definition of macro 'TOOLING_COMP
ILE_ASSERT’
typedef CompileAssert<(bool(Expr))> Msg[bool(Expr) ? 1 : -1]
^
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h: In member function 'clang::ast_matchers::interna
l::PolymorphicMatcherWithParam1<MatcherT, P1, ReturnTypesF>::operator clang::ast_matchers::internal::Matcher() const’:
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:881:28: warning: typedef 'right_polymorphic_conve
rsion’ locally defined but not used [-Wunused-local-typedefs]
right_polymorphic_conversion);
^
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:57:39: note: in definition of macro 'TOOLING_COMP
ILE_ASSERT’
typedef CompileAssert<(bool(Expr))> Msg[bool(Expr) ? 1 : -1]
^
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h: In member function 'clang::ast_matchers::interna
l::PolymorphicMatcherWithParam2<MatcherT, P1, P2, ReturnTypesF>::operator clang::ast_matchers::internal::Matcher() const’:
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:902:28: warning: typedef 'right_polymorphic_conve
rsion’ locally defined but not used [-Wunused-local-typedefs]
right_polymorphic_conversion);
^
C:/cmd_line_tools/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h:57:39: note: in definition of macro 'TOOLING_COMP
ILE_ASSERT’
typedef CompileAssert<(bool(Expr))> Msg[bool(Expr) ? 1 : -1]
^
c:/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/4.8.1/…/…/…/…/x86_64-w64-mingw32/bin/as.exe: CMakeFiles/clangDynamicASTMatchers.dir
/Registry.cpp.obj: too many sections (39110)
C:\Users\DennisC\AppData\Local\Temp\cc811i4n.s: Assembler messages:
C:\Users\DennisC\AppData\Local\Temp\cc811i4n.s: Fatal error: can’t write CMakeFiles/clangDynamicASTMatchers.dir/Registry.cpp.obj: Fi
le too big
c:/mingw64/bin/…/lib/gcc/x86_64-w64-mingw32/4.8.1/…/…/…/…/x86_64-w64-mingw32/bin/as.exe: CMakeFiles/clangDynamicASTMatchers.dir
/Registry.cpp.obj: too many sections (39110)
C:\Users\DennisC\AppData\Local\Temp\cc811i4n.s: Fatal error: can’t close CMakeFiles/clangDynamicASTMatchers.dir/Registry.cpp.obj: Fi
le too big
tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/build.make:130: recipe for target `tools/clang/lib/ASTMat
chers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/Registry.cpp.obj’ failed
make[2]: *** [tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/Registry.cpp.obj] Error 1
CMakeFiles/Makefile2:10926: recipe for target `tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/all’ faile
d
make[1]: *** [tools/clang/lib/ASTMatchers/Dynamic/CMakeFiles/clangDynamicASTMatchers.dir/all] Error 2
Makefile:136: recipe for target `all’ failed
make: *** [all] Error 2
Thanks for any help you can offer.
Dennis Cote
Replying to myself.
It seems like this is a hard limit when using gcc and windows. Quoting from http://stackoverflow.com/questions/16596876/object-file-has-too-many-sections
The error "%B: too many sections (%d)"
comes from the functioncoff_compute_section_file_positions()
located in bfd/coffcode.h
. It’s produced when the output .obj
file (in COFF format) contains more than 32766 sections. There is no way to avoid this error, at least not if you want to use Windows’ PE/COFF object format; COFF files use only two bytesfor “NumberOfSections” in the file header.
So it seems to me that others should be hitting this limit as well. I would assume the number 39110 is the number of sections in Registry.cpp.obj.
I’m not sure how to proceed from here. I don’t know enough about the Clang internals to try to break Registry.cpp into smaller object files, or even if that is possible. Perhaps I just need to give up on windows…
Dennis Cote
Just a wild guess, maybe some of the sections are debug sections and if you build w/o debug information there will be less sections?
Alternatively, clang builds well under Visual C++ and you can later target MingW with -target flag.
Yaron