[racket-dev] build hang on s390x

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Mon Feb 27 11:46:43 EST 2012

My guess is that something is going wrong with the GC's write barrier.

In "src/racket/gc2/newgc.c" around line 2677, if you change 1 to 0 in

  newgc->generations_available = 1;

does the build make further progress?

At Fri, 24 Feb 2012 21:44:34 -0500, James McCoy wrote:
> On Fri, Feb 24, 2012 at 10:15:40PM -0400, David Bremner wrote:
> > 
> > Hi, it's the debian guys again and their wacky architectures.
> > 
> > The build on the s390x (64 bit version) seems to hang at the following
> > place
> 
> (The s390 build works fine)
> 
> > /usr/bin/make ../gracket3m
> > make[6]: Entering directory 
> `/home/bremner/racket-5.2.1+dfsg1/build/gracket/gc2'
> > ../../racket/racket3m -cqu 
> /home/bremner/racket-5.2.1+dfsg1/src/gracket/gc2/../../racket/gc2/xform.rkt 
> --setup ../../racket/gc2 --cpp "gcc -E 
> -I/home/bremner/racket-5.2.1+dfsg1/src/gracket/gc2/../../racket/gc2 
> -I./../../racket/ 
> -I/home/bremner/racket-5.2.1+dfsg1/src/gracket/gc2/../../racket/include/     
> -Dwx_xt -MMD"  --keep-lines -o xsrc/grmain.c +D 
> INITIAL_COLLECTS_DIRECTORY='"'"`cd 
> /home/bremner/racket-5.2.1+dfsg1/src/gracket/gc2/../../../collects; pwd`"'"' 
> /home/bremner/racket-5.2.1+dfsg1/src/gracket/gc2/../grmain.c
> 
> It's getting stuck in the following loop in src/racket/gc2/newgc.c:repair_heap
> 
> 3988           switch(page->page_type) {
> 3989             case PAGE_TAGGED:
> 3990               while(start < end) {
> 3991                 objhead *info = (objhead *)start;
> 3992
> 3993                 if(info->mark) {
> 3994                   void *obj_start = OBJHEAD_TO_OBJPTR(start);
> 3995                   unsigned short tag = *(unsigned short *)obj_start;
> 3996                   ASSERT_TAG(tag);
> 3997                   info->mark = 0;
> 3998                   fixup_table[tag](obj_start, gc);
> 3999                 } else {
> 4000                   info->dead = 1;
> 4001 #ifdef KILLING_DEBUG
> 4002                   killing_debug(gc, page, info);
> 4003 #endif
> 4004                 }
> 4005                 start += info->size;
> 4006               }
> 
> because info->size is 0.  This is while processing the first page from
> gc->gen1_pages.
> 
> -- 
> James
> GPG Key: 4096R/331BA3DB 2011-12-05 James McCoy <jamessan at debian.org>
> 
> ------------------------------------------------------------------------------
> [application/pgp-signature "signature.asc"] [~/Desktop & open] [~/Temp & open]
> _________________________
>   Racket Developers list:
>   http://lists.racket-lang.org/dev

Posted on the dev mailing list.