[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[no subject]


From: jdp@xxxxxxxxxxx (John Polstra)
Newsgroups: muc.lists.freebsd.hackers,mpc.lists.freebsd.hackers
Subject: Re: Process virtual memory question
Date: 11 Jan 2001 18:43:05 +0100
Organization: Polstra & Co., Seattle, WA

In article <Pine.SOL.4.21.0101111008490.22923-100000@jade>, Zhiui
Zhang <zzhang@xxxxxxxxxxxxxxxxx> 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 Polstra                                               jdp@xxxxxxxxxxx
  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@xxxxxxxxxxx
with "unsubscribe freebsd-hackers" in the body of the message