public inbox for java@gcc.gnu.org
 help / color / mirror / Atom feed
* I need help with gc
@ 2002-04-26  3:00 Martin Kahlert
  0 siblings, 0 replies; 2+ messages in thread
From: Martin Kahlert @ 2002-04-26  3:00 UTC (permalink / raw)
  To: java

Hi!
i get a SegFault on Linux in 
#0  GC_mark_from (mark_stack_top=0x85c5000, mark_stack=0x85c5000,
mark_stack_limit=0x85cd000) at ../../../gcc-3.1-20020423/boehm-gc/mark.c:654
654               deferred = *limit;
(gdb) p limit
$1 = (word *) 0x8569048

This is an address inside a fortran common block which is layed out like this:

      COMMON /BLANK/ NODPRE,NODPLC,NODPST
      INTEGER NODPRE(4096), NODPLC(2048), NODPST(2048)
      REAL*8 VALUE(1024)
      COMPLEX*16 ZVALUE(512)
      CHARACTER CHRARR(8192)

      EQUIVALENCE (VALUE(1),NODPLC(1),ZVALUE(1),CHRARR(1))
C

and also addressed from C by
extern struct
{
    int padding_pre[4096];
    union
    {
        char    carray[8192];
        int     iarray[2048];
        double  darray[1024];
        Complex zarray[512];
    } userdata;
    int padding_post[2048];
} blank_;

In the application blank.padding_pre = 0x8566220.
Thus limit is somewhere in the middle of NODPRE or blank_padding_pre.
Is this an error?  

I found that because i mprotected a region around NODPLC / blank_userdata
 with PROT_NONE in order to catch errors in my code.

The full stack frame is this:
#0  GC_mark_from (mark_stack_top=0x85c5000, mark_stack=0x85c5000, mark_stack_limit=0x85cd000) at ../../../gcc-3.1-20020423/boehm-gc/mark.c:654
#1  0x40642ad2 in GC_mark_some (cold_gc_frame=0x8568e50 "") at ../../../gcc-3.1-20020423/boehm-gc/mark.c:289
#2  0x4063f025 in GC_stopped_mark (stop_func=0x8568e50 <blank_+11312>) at ../../../gcc-3.1-20020423/boehm-gc/alloc.c:489
#3  0x4063ed9c in GC_try_to_collect_inner (stop_func=0x4063e950 <GC_never_stop_func>) at ../../../gcc-3.1-20020423/boehm-gc/alloc.c:350
#4  0x40645105 in GC_init_inner () at ../../../gcc-3.1-20020423/boehm-gc/misc.c:673
#5  0x406410d4 in GC_init_gcj_malloc (mp_index=0, mp=0x1fc) at ../../../gcc-3.1-20020423/boehm-gc/gcj_mlc.c:60
#6  0x4063e452 in _Jv_InitGC() () at ../../../gcc-3.1-20020423/libjava/boehm.cc:465
#7  0x405ca741 in _Jv_CreateJavaVM(void*) () at ../../../gcc-3.1-20020423/libjava/prims.cc:892
#8  0x405cd665 in JNI_CreateJavaVM (vm=0x1fc, penv=0x1fc, args=0xbfff9cf0) at ../../../gcc-3.1-20020423/libjava/jni.cc:2262
#9  0x0805cbf6 in loadJVM () at c_code/vti.c:660
....

Is this behaviour correct and i just cannot mprotect static data and use the gc or is it an error?

Thanks for any help,
Martin.

-- 
The early bird catches the worm. If you want something else for       
breakfast, get up late

^ permalink raw reply	[flat|nested] 2+ messages in thread

* RE: I need help with gc
@ 2002-04-26 11:41 Boehm, Hans
  0 siblings, 0 replies; 2+ messages in thread
From: Boehm, Hans @ 2002-04-26 11:41 UTC (permalink / raw)
  To: 'martin.kahlert@infineon.com', java

You clearly cannot protect regions that contain pointers, since the
collector needs to see those.

By default, the collector will scan all static data for pointers.  You can
tell it not to do so by calling GC_exclude_static_roots on the right address
range before you protect part of the data.  If you have large static
C/Fortran arrays that are known not to contain pointers to the garbage
collected heap, it may be a good idea to do so anyway.  (Due to the way the
heap expansion heuristics work, this may reduce the heap size instead of
reducing GC time.  But one way or another it should improve GC performance.
And it will reduce the probability of misidentified pointers.)

Clearly none of his applies if gcj is ever configured with a different
garbage collector.

Hans
 
> -----Original Message-----
> From: Martin Kahlert [mailto:martin.kahlert@infineon.com]
> Sent: Friday, April 26, 2002 1:55 AM
> To: java@gcc.gnu.org
> Subject: I need help with gc
> 
> 
> Hi!
> i get a SegFault on Linux in 
> #0  GC_mark_from (mark_stack_top=0x85c5000, mark_stack=0x85c5000,
> mark_stack_limit=0x85cd000) at 
> ../../../gcc-3.1-20020423/boehm-gc/mark.c:654
> 654               deferred = *limit;
> (gdb) p limit
> $1 = (word *) 0x8569048
> 
> This is an address inside a fortran common block which is 
> layed out like this:
> 
>       COMMON /BLANK/ NODPRE,NODPLC,NODPST
>       INTEGER NODPRE(4096), NODPLC(2048), NODPST(2048)
>       REAL*8 VALUE(1024)
>       COMPLEX*16 ZVALUE(512)
>       CHARACTER CHRARR(8192)
> 
>       EQUIVALENCE (VALUE(1),NODPLC(1),ZVALUE(1),CHRARR(1))
> C
> 
> and also addressed from C by
> extern struct
> {
>     int padding_pre[4096];
>     union
>     {
>         char    carray[8192];
>         int     iarray[2048];
>         double  darray[1024];
>         Complex zarray[512];
>     } userdata;
>     int padding_post[2048];
> } blank_;
> 
> In the application blank.padding_pre = 0x8566220.
> Thus limit is somewhere in the middle of NODPRE or blank_padding_pre.
> Is this an error?  
> 
> I found that because i mprotected a region around NODPLC / 
> blank_userdata
>  with PROT_NONE in order to catch errors in my code.
> 
> The full stack frame is this:
> #0  GC_mark_from (mark_stack_top=0x85c5000, 
> mark_stack=0x85c5000, mark_stack_limit=0x85cd000) at 
> ../../../gcc-3.1-20020423/boehm-gc/mark.c:654
> #1  0x40642ad2 in GC_mark_some (cold_gc_frame=0x8568e50 "") 
> at ../../../gcc-3.1-20020423/boehm-gc/mark.c:289
> #2  0x4063f025 in GC_stopped_mark (stop_func=0x8568e50 
> <blank_+11312>) at ../../../gcc-3.1-20020423/boehm-gc/alloc.c:489
> #3  0x4063ed9c in GC_try_to_collect_inner 
> (stop_func=0x4063e950 <GC_never_stop_func>) at 
> ../../../gcc-3.1-20020423/boehm-gc/alloc.c:350
> #4  0x40645105 in GC_init_inner () at 
> ../../../gcc-3.1-20020423/boehm-gc/misc.c:673
> #5  0x406410d4 in GC_init_gcj_malloc (mp_index=0, mp=0x1fc) 
> at ../../../gcc-3.1-20020423/boehm-gc/gcj_mlc.c:60
> #6  0x4063e452 in _Jv_InitGC() () at 
> ../../../gcc-3.1-20020423/libjava/boehm.cc:465
> #7  0x405ca741 in _Jv_CreateJavaVM(void*) () at 
> ../../../gcc-3.1-20020423/libjava/prims.cc:892
> #8  0x405cd665 in JNI_CreateJavaVM (vm=0x1fc, penv=0x1fc, 
> args=0xbfff9cf0) at ../../../gcc-3.1-20020423/libjava/jni.cc:2262
> #9  0x0805cbf6 in loadJVM () at c_code/vti.c:660
> ....
> 
> Is this behaviour correct and i just cannot mprotect static 
> data and use the gc or is it an error?
> 
> Thanks for any help,
> Martin.
> 
> -- 
> The early bird catches the worm. If you want something else for       
> breakfast, get up late
> 

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-04-26 17:09 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-26  3:00 I need help with gc Martin Kahlert
2002-04-26 11:41 Boehm, Hans

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).