Is linkonce underused?
Matt Austern
austern@apple.com
Tue Dec 17 15:44:00 GMT 2002
On Tuesday, December 17, 2002, at 02:06 PM, H. J. Lu wrote:
> On Tue, Dec 17, 2002 at 01:34:50PM -0800, Matt Austern wrote:
>> Consider the following C++ source file:
>> void check(const void*);
>> template <class T> T* identity(T* p) { check(p); return p; }
>> void foo() { identity((double*) 0); }
>>
>> Using the top of the 3.3 release branch to compile this
>> on Linus, and using the options -O0 -g -S, it's easy to
>> see what gets placed in which sections.
>>
>> _Z8identityIdEPt_S1_ gets placed in a linkonce section,
>> as it ought to be. However, it's the only thing in that
>> linkonce section. This is puzzling, because that
>> template instantiation has two other parts: debug
>> information, and EH information. One would think that
>> these should all be retained or discarded as a group.
>> It's nice that we'll only have one copy of the actual
>> code for identity<double> even if it's instantiated in
>> a hundred translation units, but it's a shame that we'll
>> still get a hundred copies of the EH information and the
>> debug information.
>>
>> Am I misunderstanding something? If not, is there some
>> reason we aren't using linkonce for EH and debug
>> information?
>
> GRP_COMDAT can be used for that. It is available in ELF. I'd like to
> see gcc support it.
Has anyone done any preliminary design work on this? Apple
is doing some work that's relevant to it, and we'd hate to
duplicate anyone else's effort.
--Matt
More information about the Gcc
mailing list