RFR(XS): 8148353: [linux-sparc] Crash in libawt.so on Linux SPARC

Dean Long dean.long at oracle.com
Wed Feb 24 00:22:04 UTC 2016

Vladimir, my understanding is that this is just because of the way LONG 
and DOUBLE are represented internally, and doesn't mean we use two 
native stack slots.  So we are forcing C2 to treat int args as longs:

JRT_BLOCK_ENTRY(void, OptoRuntime::new_array_C(Klass* array_type, int 
len, JavaThread *thread))

we generate code as if it was

JRT_BLOCK_ENTRY(void, OptoRuntime::new_array_C(Klass* array_type, 
int64_t len, JavaThread *thread))

and we wrap a ConvI2LNode around "len" when we call.


On 2/23/2016 1:32 PM, Vladimir Kozlov wrote:
> Code in sharedRuntime_sparc.cpp looks fine but I am worry about 
> CCallingConventionRequiresIntsAsLongs change. You get additional slots 
> on stack which is not expected on sparc:
>     if (CCallingConventionRequiresIntsAsLongs && f->isa_int()) {
>       fields[cnt++] = TypeLong::LONG;
>       fields[cnt] = Type::HALF; // Must add an additional half for a 
> long.
> I found next text which says that integer values takes one stack slot 
> only (but it does requires sign extension to 64 bits):
> https://docs.oracle.com/cd/E26502_01/html/E28387/gentextid-2734.html#scrolltoc 
> Thanks,
> Vladimir
> On 2/23/16 8:28 AM, Roland Westrelin wrote:
>> Another webrev because using L5 is not necessary when the argument is 
>> moved from register to register:
>> http://cr.openjdk.java.net/~roland/8148353/webrev.02/
>> Roland.

More information about the hotspot-compiler-dev mailing list