From owner-freebsd-current Tue Sep 3 10:47:34 2002 Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 722BE37B400; Tue, 3 Sep 2002 10:47:26 -0700 (PDT) Received: from apollo.backplane.com (apollo.backplane.com [216.240.41.2]) by mx1.FreeBSD.org (Postfix) with ESMTP id F38BB43E65; Tue, 3 Sep 2002 10:47:25 -0700 (PDT) (envelope-from dillon@apollo.backplane.com) Received: from apollo.backplane.com (localhost [127.0.0.1]) by apollo.backplane.com (8.12.5/8.12.4) with ESMTP id g83HlMPQ092395; Tue, 3 Sep 2002 10:47:22 -0700 (PDT) (envelope-from dillon@apollo.backplane.com) Received: (from dillon@localhost) by apollo.backplane.com (8.12.5/8.12.4/Submit) id g83HlLUS092382; Tue, 3 Sep 2002 10:47:21 -0700 (PDT) (envelope-from dillon) Date: Tue, 3 Sep 2002 10:47:21 -0700 (PDT) From: Matthew Dillon Message-Id: <200209031747.g83HlLUS092382@apollo.backplane.com> To: Peter Wemm , ticso@cicely.de, Alexander Kabaev , ticso@cicely5.cicely.de, des@FreeBSD.ORG, current@FreeBSD.ORG Subject: Re: alpha tinderbox failure - kernel is broken. References: <20020903163714.049602A7D6@canning.wemm.org> Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG 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