[PATCH] D33868: [Solaris] emit .init_array instead of .ctors on Solaris (Sparc/x86)
Fedor Sergeev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 3 14:23:09 PDT 2017
fedor.sergeev added a comment.
In https://reviews.llvm.org/D33868#772185, @davide wrote:
> Can you add a test?
Sure, will do it.
Can you tell me where should I add it - test/Target?
I was planning to add some clang tests, but that can only happen after more changes to clang (enabling -fuse-init-array by default).
> Also, I'd like to know the following: does the Solaris linker (whatever it's called) support mixing'n'matching of `.ctors` and `.init_array` ?
> (gold implements some logic to merge them in order to ensure all the global constructors are called even if you have some objects file with `.ctors `and some others with `.init_array` as input.
Solaris ld does not do any merging of .ctors and .init_array:
] old-g++ -c ctor1.cc
] elfdump -c ctor1.o | egrep "ctors|init_array"
Section Header[6]: sh_name: .ctors
Section Header[7]: sh_name: .rel.ctors
] clang++ -c ctor2.cc
] elfdump -c ctor2.o | egrep "ctors|init_array"
Section Header[6]: sh_name: .init_array
Section Header[7]: sh_name: .rel.init_array
.ctors are being handled purely by crtbegin.o
] old-g++ ctor1.o ctor2.o
] elfdump -c a.out | egrep "ctors|init_array"
Section Header[21]: sh_name: .init_array
Section Header[23]: sh_name: .ctors
] ./a.out
I() <--- from init_array
C() <--- from ctors
main
] new-g++ ctor1.o ctor2.o
] elfdump -c a.out | egrep "ctors|init_array"
Section Header[21]: sh_name: .init_array
Section Header[23]: sh_name: .ctors
] ./a.out
I()
main
But that is an overall problem of a Solaris system that results in g++ incompatibility between versions.
If you have an object with .ctors you have to link it with ctors-handling g++ runtime ("old" one).
Changing behavior of clang/llvm does not make anything worse here, since it is ctors that misbehaves and this change allows to get rid of ctors.
https://reviews.llvm.org/D33868
More information about the llvm-commits
mailing list