Object alignment, was: cygwin failures - assertion "!(addr & FLAGS)" failed:

Billinghurst, David (CRTS) David.Billinghurst@riotinto.com
Sun May 5 16:51:00 GMT 2002


cygwin readers: This is about porting java to cygwin for gcc-3.2
(and perhaps gcc-3.1.1 if the changes are small).
So we need objects to be 8-byte aligned so that the low three bits
of the address are 0? Are there any ways around this, as I don't 
think that this is the default on cygwin. 
I seem to recall that:
 - objects are only 4-byte aligned by default. 
 - it is necessary to rebuild ld to ensure 8-byte alignment
 - there are performance benefits for 8-byte (or even 16-byte)
 alignment, but arguements against.
There is much discussion over a long period in the cygwin archives,
which I will obviously have to re-read in the next little while.
-----Original Message-----
From: Tom Tromey [mailto:tromey@redhat.com]
Sent: Saturday, 4 May 2002 6:31 
To: Billinghurst, David (CRTS)
Cc: java@gcc.gnu.org
Subject: Re: cygwin failures - assertion "!(addr & FLAGS)" failed:
>>>>> "David" == Billinghurst, David (CRTS) <David.Billinghurst@riotinto.com> writes:

David> At last a real bug in the cygwin libjava testsuite. Most of the 
David> compilation tests pass, but all (that I could find) executable 
David> tests fail with 
David> assertion "!(addr & FLAGS)" failed: file "/usr/local/src/gcc3.1/libjava/java/lang/natObject.cc", line 772
My understanding is that we use the lowest 3 bits to keep some
information about the thin locks. If this assertion fails, it means
that we've found an object which isn't suitably aligned. I think this
can mean one of two things:
1. There is a bug in the allocator (unlikely), or
2. The compiler isn't properly aligning an object which it lays out
 statically. For instance this could happen with some Class object
A bug along these lines was fixed pretty recently:
2002年04月18日 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
	* class.c (make_class_data): Set DECL_ALIGN on static class data,
	for hash synchronization.
	* expr.c (java_expand_expr): Set DECL_ALIGN on static array objects.
	* decl.c (java_init_decl_processing): Don't set TYPE_ALIGN for
	class_type_node.
If you already have this patch then I guess there's another such bug :-(
Tom


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /