Object file questions

Johannes Pfau via D.gnu d.gnu at puremagic.com
Thu Aug 14 12:03:08 PDT 2014


Am Thu, 14 Aug 2014 17:53:32 +0000
schrieb "Timo Sintonen" <t.sintonen at luukku.com>:

> On Thursday, 14 August 2014 at 17:13:23 UTC, Johannes Pfau wrote:
> > Am Thu, 14 Aug 2014 10:07:04 +0000
> > schrieb "Timo Sintonen" <t.sintonen at luukku.com>:
> >
> >> I have been looking at object files to see if I can reduce the 
> >> memory usage for minimum systems. There are two things I have 
> >> noticed:
> >> 
> >> 1. In the data segment there is some source code as ascii text 
> >> from a template in gcc/atomics.d . This is in the actual data 
> >> segment and not in debug info segments and goes into the data 
> >> segment of the executable. I do not see any code using this 
> >> data. Why is this in the executable and is it possible to 
> >> remove it?
> >> 
> >
> > Strange, could you post a testcase?
> It seems this comes from libdruntime and it exists in object.o 
> and core/atomic.o, Testcase is to compile minlibd library as it 
> is currently in the repo using the makefile as such.
> But I think it will be in any object file that imports 
> gcc.atomics and uses the template in there.
> 

If you're referring to this:
http://dpaste.dzfl.pl/fe75e8c7dfca

This seems to be the const variable in __sync_op_and. Try to change the
code to "immutable __sync_op_and = " or "enum __sync_op_and = " and
file a bug report.

> >
> >> 2. In the data segment there is also __init for all types. I 
> >> assume that they contain the initial values that are copied 
> >> when a new object of this type is created.
> >
> > Correct, it's for '.init' (there's especially 
> > __..._TypeInfo_init which
> > is the initializer for typeinfo. I've implemented -fno-rtti in 
> > a private
> > git branch to get rid of typeinfo)
> >
> >> Is this data mutable and should it really be in data segment 
> >> and not in rodata?
> >> 
> >
> > I think it should be in rodata.
> 
> So it is not a bug and not a feature. It is just because it does 
> not matter? Maybe a feature request?

Seems to happen only for the TypeInfo init symbols. I can't run the
testsuite right now, but try this:

diff --git a/gcc/d/d-decls.cc b/gcc/d/d-decls.cc
index bd6f5f9..45d433a 100644
--- a/gcc/d/d-decls.cc
+++ b/gcc/d/d-decls.cc
@@ -274,6 +274,8 @@ TypeInfoDeclaration::toSymbol (void)
       // given TypeInfo.  It is the actual data, not a reference
       gcc_assert (TREE_CODE (TREE_TYPE (csym->Stree)) ==
REFERENCE_TYPE); TREE_TYPE (csym->Stree) = TREE_TYPE (TREE_TYPE
(csym->Stree));
+      TREE_CONSTANT (csym->Stree) = true;
+      TREE_READONLY (csym->Stree) = true;
       relayout_decl (csym->Stree);
       TREE_USED (csym->Stree) = 1;



More information about the D.gnu mailing list