Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Sep 2002 10:47:21 -0700 (PDT)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        Peter Wemm <peter@wemm.org>, ticso@cicely.de, Alexander Kabaev <ak03@gte.com>, ticso@cicely5.cicely.de, des@FreeBSD.ORG, current@FreeBSD.ORG
Subject:   Re: alpha tinderbox failure - kernel is broken. 
Message-ID:  <200209031747.g83HlLUS092382@apollo.backplane.com>
References:  <20020903163714.049602A7D6@canning.wemm.org> 

next in thread | previous in thread | raw e-mail | index | archive | help
    From the ktrace output it looks like the alpha is confused about
    the datasize limit calculation.  The program data appears to start
    at the 4G mark so it is likely that the confusion is with the
    'data_addr' variable whos calculation was changed slightly.

    In that rev data_addr was set to the first data segment's address.
    In the original code the data_addr was set to the last data segment's
    address.

    Try making the following change, from:

                        if (prot & VM_PROT_WRITE) {
                                data_size += seg_size;
                                if (data_addr == 0)
                                        data_addr = seg_addr;
                        } else {  
                                text_size += seg_size;
                                if (text_addr == 0)
                                        text_addr = seg_addr;
                        }

    To:

                        if (prot & VM_PROT_WRITE) {
                                data_size += seg_size;
				data_addr = seg_addr;
                        } else {  
                                text_size += seg_size;
                                if (text_addr == 0)
                                        text_addr = seg_addr;
                        }


    And see if that fixes the problem.  I'm not sure why the alpha
    is separating its first and last data segments by 4G of VM, some
    debugging would be helpful:

                        if (prot & VM_PROT_WRITE) {
				printf("LOAD DATASEG %p %ld\n", (void *)seg_addr, seg_size);
                                data_size += seg_size;
                                if (data_addr == 0)
                                        data_addr = seg_addr;
                        } else {  
				printf("LOAD TEXTSEG %p %ld\n", (void *)seg_addr, seg_size);
                                text_size += seg_size;
                                if (text_addr == 0)
                                        text_addr = seg_addr;
                        }

					-Matt


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200209031747.g83HlLUS092382>