Date: Thu, 11 Jan 2001 09:42:22 -0800 (PST) From: John Polstra <jdp@polstra.com> To: hackers@freebsd.org Cc: zzhang@cs.binghamton.edu Subject: Re: Process virtual memory question Message-ID: <200101111742.f0BHgMt10004@vashon.polstra.com> In-Reply-To: <Pine.SOL.4.21.0101111008490.22923-100000@jade> References: <Pine.SOL.4.21.0101111008490.22923-100000@jade>
next in thread | previous in thread | raw e-mail | index | archive | help
In article <Pine.SOL.4.21.0101111008490.22923-100000@jade>, Zhiui Zhang <zzhang@cs.binghamton.edu> wrote: > Although the 4.4 BSD design and implementation book says the text > part of a process starts from 0x0000,0000, it actually starts from > some place around 0x800,0000 (or 0x8048000 to be exact). What's in > the area between 0 - 0x800,0000? Why do we not use it if it is left > empty as shown by /proc/pid/map? How is the magic number 0x8048000 > determined? Thanks. Processes used to be mapped at address 0 when we used the a.out object file format. We changed the starting address to 0x8048000 when we switched to the ELF format. That magic address came from SVR4, the first system to use ELF. I am not 100% sure why the SVR4 developers chose that address. I think it may have been so that they could map libc and the dynamic linker at the fixed address 0, thereby avoiding the need to do any run-time relocations on them. In any case, all ELF-based systems on the x86 architecture seem to use this same address. On other architecutures such as the Alpha it is entirely different, of course. John -- John Polstra jdp@polstra.com John D. Polstra & Co., Inc. Seattle, Washington USA "Disappointment is a good sign of basic intelligence." -- Chögyam Trungpa To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200101111742.f0BHgMt10004>