binary compatibility ABI (was: Re: [boehm-gc] Import 6.3 alpha 1)
Andrew Haley
aph@redhat.com
Wed Sep 10 08:50:00 GMT 2003
Jeff Sturm writes:
> On Tue, 9 Sep 2003, Andrew Haley wrote:
> > It seems to me that the right way to handle access to fields is
> > automatically to generate access methods for them. Unlike the
> > traditional Java access methods getFoo() and putFoo(), these methods
> > will return the address [Footnote 1] of a field rather than access the
> > contents of a field.
>
> I like this idea...
>
> > The symbol that is the name of a static field will no longer need to
> > be exported; all CNI code will use the access methods to get at static
> > fields. That way we will get full binary compatibility for CNI code,
> > and we don't have to touch the C++ compiler.
>
> Additionally it'll help avoid the win32 declspec mess. And by making the
> static field private, you get a cheaper relocation for PIC code.
Right.
> For instance fields, you'll want to avoid generating the usual null
> pointer check that precedes a non-virtual call. That should be simple,
> however. Perhaps check DECL_ARTIFICIAL.
Yes, true. That's worth a look.
> > jint *Body::count() __attribute__((pure));
> > jint *Body::count()
> > {
> > _Jv_InitClass (&class$);
> > return &count$;
> > }
>
> Is this legal for a pure function? I mean, the _Jv_InitClass call clearly
> has side effects.
Oops. Good catch!
> > [2] "__attribute__((pure))" ensures that the optimizer knows that for
> > any particular object the address of a field won't change.
>
> Why not __attribute__((const))? If I understand correctly, pure functions
> are only subject to CSE and loop optimizations provided global memory
> isn't modified.
Again, good point. I'll experiment with this.
> > [4] With whole-program optimization and inlining, these access methods
> > will disappear. This overcomes any objection that this technique will
> > be inefficient when statically compiling an executable.
>
> Even without inlining, you're likely trading some dcache pressure for
> icache, so it might be a wash.
That's true. We'll see.
Andrew.
More information about the Java
mailing list