This is the mail archive of the
java-prs@sourceware.cygnus.com
mailing list for the Java project.
libgcj/65: Uninitialized global variables
- To: java-gnats at sourceware dot cygnus dot com
- Subject: libgcj/65: Uninitialized global variables
- From: patha at ida dot liu dot se
- Date: 7 Oct 1999 19:26:24 -0000
- Reply-To: patha at ida dot liu dot se
- Resent-Cc: java-prs at sourceware dot cygnus dot com, green at cygnus dot com,
- Resent-Reply-To: gnats-admin@sourceware.cygnus.com, patha@ida.liu.se
- Resent-To: tromey at cygnus dot com
>Number: 65
>Category: libgcj
>Synopsis: Uninitialized global variables
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: tromey
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Oct 07 12:30:00 PDT 1999
>Closed-Date:
>Last-Modified:
>Originator: Patrik Hägglund
>Release: 2.95.1
>Organization:
>Environment:
sparc-sun-solaris2.7
gcc-2.95.1 compiled with --enable-threads
boehm-gc replaced with gc5.0a3
(gc4.13a2 doesn't work on solaris2.7)
>Description:
I found three uninitialized global variabels in natClass.cc
around line 60:
// Some constants we use to look up the class initializer.
static _Jv_Utf8Const *void_signature = _Jv_makeUtf8Const ("()V", 3);
static _Jv_Utf8Const *clinit_name = _Jv_makeUtf8Const ("<clinit>", 8);
static _Jv_Utf8Const *init_name = _Jv_makeUtf8Const ("<init>", 6);
(gdb) bt
#0 _Jv_equalUtf8Consts (a=0x0, b=0x7fad558a) at ../../../libjava/prims.cc:89
#1 0x7faa73bc in _Jv_GetMethodLocal (klass=0x2e120, name=0x0, signature=0x0)
at ../../../libjava/java/lang/natClass.cc:534
#2 0x7faa7370 in java::lang::Class::hackRunInitializers (this=0x2e120)
at ../../../libjava/java/lang/natClass.cc:423
#3 0x7faa3f68 in java.lang.Class.hackTrampoline (this=0x2e120, what=1,
old_exception=0x0) at ../../../libjava/java/lang/Class.java:137
#4 0x7faa6854 in java::lang::Class::initializeClass (this=0x2e120)
at ../../../libjava/java/lang/natClass.cc:496
#5 0x7faa3f40 in java.lang.Class.hackTrampoline (this=0x2e120, what=0,
old_exception=0x0) at ../../../libjava/java/lang/Class.java:135
#6 0x7faa6810 in java::lang::Class::initializeClass (this=0x7fb14710)
at ../../../libjava/java/lang/natClass.cc:482
#7 0x7faa7424 in _Jv_InitClass (klass=0x7fb14710)
at ../../../libjava/java/lang/natClass.cc:572
#8 0x7fa3040c in _Jv_AllocObject (c=0x7fb14710, size=32)
at ../../../libjava/prims.cc:266
#9 0x7faa9f20 in _Jv_AllocString (len=6) at ../../../libjava/include/cni.h:31
#10 0x7faa975c in _Jv_NewStringUtf8Const (str=0x0)
at ../../../libjava/java/lang/natString.cc:226
#11 0x7faa665c in java::lang::Class::resolveConstants (this=0x7fb14710)
at ../../../libjava/java/lang/natClass.cc:399
#12 0x7faa6730 in java::lang::Class::initializeClass (this=0x7fb14710)
at ../../../libjava/java/lang/natClass.cc:447
#13 0x7faa7424 in _Jv_InitClass (klass=0x7fb14710)
at ../../../libjava/java/lang/natClass.cc:572
#14 0x7fa3040c in _Jv_AllocObject (c=0x7fb14710, size=24)
at ../../../libjava/prims.cc:266
#15 0x7faa9f20 in _Jv_AllocString (len=2) at ../../../libjava/include/cni.h:31
#16 0x7faa975c in _Jv_NewStringUtf8Const (str=0x0)
at ../../../libjava/java/lang/natString.cc:226
#17 0x7faa665c in java::lang::Class::resolveConstants (this=0x7fb1560c)
at ../../../libjava/java/lang/natClass.cc:399
#18 0x7faa6730 in java::lang::Class::initializeClass (this=0x7fb1560c)
at ../../../libjava/java/lang/natClass.cc:447
#19 0x7faa3f40 in java.lang.Class.hackTrampoline (this=0x7fb1560c, what=0,
old_exception=0x0) at ../../../libjava/java/lang/Class.java:135
#20 0x7faa6810 in java::lang::Class::initializeClass (this=0x2e440)
at ../../../libjava/java/lang/natClass.cc:482
#21 0x7faa3f40 in java.lang.Class.hackTrampoline (this=0x2e440, what=0,
old_exception=0x0) at ../../../libjava/java/lang/Class.java:135
#22 0x7faa6810 in java::lang::Class::initializeClass (this=0x2e490)
at ../../../libjava/java/lang/natClass.cc:482
#23 0x7faa3f40 in java.lang.Class.hackTrampoline (this=0x2e490, what=0,
old_exception=0x0) at ../../../libjava/java/lang/Class.java:135
#24 0x7faa6810 in java::lang::Class::initializeClass (this=0x7fb13654)
at ../../../libjava/java/lang/natClass.cc:482
#25 0x7faa7424 in _Jv_InitClass (klass=0x7fb13654)
at ../../../libjava/java/lang/natClass.cc:572
#26 0x7fa2fad8 in JvRunMain (klass=0x2c2f4, argc=1, argv=0xffbedfa4)
at ../../../libjava/prims.cc:266
#27 0x16448 in main (argc=1, argv=0xffbedfa4)
I tried to use functions with static local variables as described
by Stroustrup, p 217, but I didn't liked the solution. It is
probably better to initialize globals explicitly somewhere. You
probably know where to do this better than I.
Before, I mangaged to avoid this bug by using
CXXFLAGS/CFLAGS=-O3. This doesn't work with --enable-threads,
though.
Using the trick with functions described above, one more bug of
the same kind was revealed. However, I can't easily spot the
offending variable in this case.
(gdb) bt
#0 _Jv_FindArrayClass (element=0x2e3f0)
at ../../../libjava/java/lang/natClass.cc:717
#1 0x7fa2f9a0 in _Jv_FindClassFromSignature (sig=0x1b131 "[I", loader=0x0)
at ../../../libjava/prims.cc:535
#2 0x7fa2f998 in _Jv_FindClassFromSignature (sig=0x1b130 "[[I", loader=0x0)
at ../../../libjava/prims.cc:535
#3 0x7faa6824 in java::lang::Class::resolveConstants (this=0x2c0a4)
at ../../../libjava/java/lang/natClass.cc:406
#4 0x7faa69a4 in java::lang::Class::initializeClass (this=0x2c0a4)
at ../../../libjava/java/lang/natClass.cc:447
#5 0x7faa75a4 in _Jv_InitClass (klass=0x2c0a4)
at ../../../libjava/java/lang/natClass.cc:572
#6 0x7fa3040c in _Jv_AllocObject (c=0x2c0a4, size=40)
at ../../../libjava/prims.cc:266
#7 0x15cf0 in Test::main ()
#8 0x7faa8298 in java::lang::FirstThread::run (this=0x7f7cbf00)
at ../../../libjava/java/lang/natFirstThread.cc:55
#9 0x7fa64b08 in java.lang.Thread.run_ (this=0x7f7cbf00)
at ../../../libjava/java/lang/Thread.java:119
#10 0x7faac138 in java::lang::Thread::run__ (obj=0x7f7cbf00)
at ../../../libjava/java/lang/natThread.cc:257
#11 0x7fabc840 in _Jv_ThreadStart (thread=0x7f7cbf00,
meth=0x7faac12c <java::lang::Thread::run__(java::lang::Object *)>)
at ../../../libjava/no-threads.cc:25
#12 0x7faac1b0 in java::lang::Thread::start (this=0x7f7cbf00)
at ../../../libjava/java/lang/natThread.cc:270
#13 0x7fa2fe94 in JvRunMain (klass=0x2c2f4, argc=2138890236, argv=0xffbedfa8)
at ../../../libjava/prims.cc:589
#14 0x16448 in main (argc=1, argv=0xffbedfa4)
(gdb) p element->name
$5 = (_Jv_Utf8Const *) 0x0
>How-To-Repeat:
Try to compile and run this program:
public class Hello {
public static void main(String[] args) {
System.out.println("Hej");
}
}
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted: