i.e. there are global keyed constructors emitted for global objects which have
trivial constructors which just zero the contents of the object
e.g.
gcc -Os foo.cxx of
---
static void * myPointer1(0);
void * myFunction1() { return myPointer1; }
struct MyStruct {
void * pointer;
};
static MyStruct myPointer2;
---
and readelf -S foo.o | grep ctor
shows nothing, while...
gcc -Os foo.cxx of
---
struct MyOtherStruct {
void * pointer;
MyOtherStruct(): pointer(0) {}
};
static MyOtherStruct myPointer3;
---
gives an readelf -S foo.o | grep ctor
[ 5] .ctors PROGBITS 0000000000000000 00000070
[ 6] .rela.ctors RELA 0000000000000000 00000700
and
nm foo.o | grep GLOBAL | c++filt | grep keyed | c++filt
000000000000001c t global constructors keyed to foo.cxx_00000000_A20C6F19
It'd be neat if the global static MyOtherStruct myPointer3 ctor could be
optimized away.
--
Summary: RFE: Possible to avoid emitting ctor sections for
trivial constructors of static objects ?
Product: gcc
Version: 4.1.2
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: caolanm at redhat dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31785