ELF2.0: Linkable struct
Jonathan Wakely
jwakely.gcc@gmail.com
Fri Jan 31 09:47:28 GMT 2025
On Fri, 31 Jan 2025 at 08:28, The Cuthour <cuthour@gmail.com> wrote:
>
>
>
> On 2025/01/31 17:05, Jonathan Wakely wrote:
> >
> >
> > On Fri, 31 Jan 2025, 06:50 The Cuthour via Gcc, <gcc@gcc.gnu.org
> > <mailto:gcc@gcc.gnu.org>> wrote:
> >
> >
> > Suppose we have the following two classes:
> >
> > === Vec.h ===
> > class Vec {
> > int x, y, z;
> > };
> > === end Vec.h ===
> >
> > === Pix.h ===
> > class Pix: Vec {
> > int r, g, b;
> > };
> > === end Pix.h ===
> >
> > If we add or remove a member variable in class Vec, it requires
> > recompiling not only Vec.cc but also Pix.cc. I believe this is
> > a problem. Pix.o should be relinkable.
> >
> >
> > To solve this problem, I propose the Linkable struct. The term
> > Linkable struct is proposed in analogy to Linkable function.
> > C language can be considered a language of Linkable functions.
> > C language enhances the relinkability of functions by
> > compromising the optimization of inline functions. C language
> > does not need Linkable structs because structures are declared
> > individually in C. Object-oriented languages need Linkable
> > structs because classes (structures) are described as
> > differences from their base classes.
> >
> > To achieve Linkable structs, I propose the Linkable constant.
> > This mechanism ensures that certain constants are determined
> > at link time and is realized by extending the ELF format. The
> > offsets of structure members are defined in a distributed
> > manner across object files using these constants, with their
> > values resolved at link time. The information for calculating
> > these constants is ideally stored in each object file in
> > Reverse Polish Notation (RPN) for each symbol. The Linkable
> > constant is also a compromise concerning the optimization of
> > inline access to structure members.
> >
> >
> > It also means that sizeof(Pix) is no longer a constant expression, which
> > breaks the rules of the C++ language.
> >
> > Imagine that Pix.cc contains:
> >
> > static_assert(sizeof (Pix) <= 12);
> >
> > The assertion passes when you compile it, but becomes invalid if you
> > don't recompile after changing Vec.h
> >
> > This is not feasible.
>
> I believe that sizeof(Pix) is also a linkable constant. It is a
> constant, and its value is determined at link time.
C++ requires constant expressions to be known during compilation, not
at link time.
More information about the Gcc
mailing list