| ; ----------------------------------------------------------------------- |
| ; |
| ; Copyright 1994-2008 H. Peter Anvin - All Rights Reserved |
| ; |
| ; This program is free software; you can redistribute it and/or modify |
| ; it under the terms of the GNU General Public License as published by |
| ; the Free Software Foundation, Inc., 53 Temple Place Ste 330, |
| ; Bostom MA 02111-1307, USA; either version 2 of the License, or |
| ; (at your option) any later version; incorporated herein by reference. |
| ; |
| ; ----------------------------------------------------------------------- |
| |
| ; |
| ; layout.inc |
| ; |
| ; Memory layout of segments |
| ; |
| |
| |
| ; Memory below 0800h is reserved for the BIOS and the MBR. |
| BSS_START equ 0800h |
| |
| ; Text starts at the load address of 07C00h. |
| TEXT_START equ 7C00h |
| |
| ; The secondary BSS section, above the text; we really wish we could |
| ; just make it follow .bcopy32 or hang off the end, |
| ; but it doesn't seem to work that way. |
| LATEBSS_START equ 0B800h |
| |
| ; Reserve memory for the stack. This causes checkov to abort the |
| ; compile if we violate this space. |
| STACK_SIZE equ 4096 |
| STACK_START equ TEXT_START-STACK_SIZE |
| |
| %ifdef MAP |
| [map all MAP] |
| %endif |
| |
| ; |
| ; The various sections and their relationship |
| ; |
| org TEXT_START |
| |
| ; Use .earlybss for things that MUST be in low memory. |
| section .earlybss nobits start=BSS_START |
| section .bcopy32 align=4 valign=16 follows=.data vfollows=.earlybss |
| section .config align=4 valign=16 follows=.bcopy32 vfollows=.bcopy32 |
| section .config.end nobits valign=4 vfollows=.config |
| |
| ; Use .bss for things that doesn't have to be in low memory; |
| ; with .bss1 and .bss2 to offload. .earlybss should be used |
| ; for things that absolutely have to be below 0x7c00. |
| section .bss nobits valign=16 vfollows=.config.end |
| |
| ; Warning here: RBFG build 22 randomly overwrites |
| ; memory location [0x5680,0x576c), possibly more. It |
| ; seems that it gets confused and screws up the |
| ; pointer to its own internal packet buffer and starts |
| ; writing a received ARP packet into low memory. |
| %if 0 ; IS_PXELINUX |
| section .rbfg nobits start=0x5680 |
| RBFG_brainfuck: resb 2048 ; Bigger than an Ethernet packet... |
| %endif |
| |
| ; For section following .rbfg |
| %if 0 ; IS_PXELINUX |
| section .bss2 nobits valign=16 vfollows=.rbfg |
| %else |
| section .bss2 nobits valign=16 vfollows=.bss |
| %endif |
| |
| section .text start=TEXT_START |
| ; NASM BUG: .data always follows .text; can't override |
| section .data align=16 ; follows=.text |
| |
| ; This empty section works around a NASM bug with regards |
| ; to follows= and nobits sections following a section which |
| ; has VMA != LMA. |
| section .advpad progbits align=512 follows=.config |
| |
| section .adv nobits align=512 follows=.advpad |
| |
| ; .uibss contains bss data which is guaranteed to be |
| ; safe to clobber during the loading of the image. This |
| ; is because while loading the primary image we will clobber |
| ; the spillover from the last fractional sector load. |
| section .uibss nobits align=16 follows=.adv |
| |
| ; Normal bss... |
| section .bss1 nobits align=16 follows=.uibss |
| |
| ; Reserve space for stack |
| section .stack nobits align=16 start=STACK_START |
| Stack resb STACK_SIZE |
| StackTop equ $ |