Two hda_verb.h files: Add more comments.
[coreboot.git] / src / arch / i386 / coreboot_ram.ld
1 /*
2  *      Memory map:
3  *
4  *      CONFIG_RAMBASE          : text segment
5  *                              : rodata segment
6  *                              : data segment
7  *                              : bss segment
8  *                              : stack
9  *                              : heap
10  */
11 /*
12  * Bootstrap code for the STPC Consumer
13  * Copyright (c) 1999 by Net Insight AB. All Rights Reserved.
14  */
15
16 /*
17  *      Written by Johan Rydberg, based on work by Daniel Kahlin.
18  *      Rewritten by Eric Biederman
19  *  2005.12 yhlu add coreboot_ram cross the vga font buffer handling
20  */
21
22 /* We use ELF as output format. So that we can debug the code in some form. */
23 INCLUDE ldoptions
24
25 ENTRY(_start)
26
27 SECTIONS
28 {
29         . = CONFIG_RAMBASE;
30         /* First we place the code and read only data (typically const declared).
31          * This could theoretically be placed in rom.
32          */
33         .text : {
34                 _text = .;
35                 *(.text);
36                 *(.text.*);
37                 . = ALIGN(16);
38                 _etext = .;
39         }
40
41         .rodata : {
42                 _rodata = .;
43                 . = ALIGN(4);
44                 console_drivers = .;
45                 *(.rodata.console_drivers)
46                 econsole_drivers = . ;
47                 . = ALIGN(4);
48                 pci_drivers = . ;
49                 *(.rodata.pci_driver)
50                 epci_drivers = . ;
51                 cpu_drivers = . ;
52                 *(.rodata.cpu_driver)
53                 ecpu_drivers = . ;
54                 *(.rodata)
55                 *(.rodata.*)
56                 /* kevinh/Ispiri - Added an align, because the objcopy tool
57                  * incorrectly converts sections that are not long word aligned.
58                  */
59                  . = ALIGN(4);
60
61                 _erodata = .;
62         }
63         /* After the code we place initialized data (typically initialized
64          * global variables). This gets copied into ram by startup code.
65          * __data_start and __data_end shows where in ram this should be placed,
66          * whereas __data_loadstart and __data_loadend shows where in rom to
67          * copy from.
68          */
69         .data : {
70                 _data = .;
71                 *(.data)
72                 _edata = .;
73         }
74
75         /* bss does not contain data, it is just a space that should be zero
76          * initialized on startup. (typically uninitialized global variables)
77          * crt0.S fills between _bss and _ebss with zeroes.
78          */
79         _bss = .;
80         .bss . : {
81                 *(.bss)
82                 *(.sbss)
83                 *(COMMON)
84         }
85         _ebss = .;
86         _end = .;
87
88         /* coreboot really "ends" here. Only heap and stack are placed after
89          * this line.
90          */
91
92         . = ALIGN(CONFIG_STACK_SIZE);
93
94         _stack = .;
95         .stack . : {
96                 /* Reserve a stack for each possible cpu */
97                 . += CONFIG_MAX_CPUS*CONFIG_STACK_SIZE;
98         }
99         _estack = .;
100
101         _heap = .;
102         .heap . : {
103                 /* Reserve CONFIG_HEAP_SIZE bytes for the heap */
104                 . = CONFIG_HEAP_SIZE ;
105                 . = ALIGN(4);
106         }
107         _eheap = .;
108
109         /* The ram segment. This includes all memory used by the memory
110          * resident copy of coreboot, except the tables that are produced on
111          * the fly, but including stack and heap.
112          */
113         _ram_seg = _text;
114         _eram_seg = _eheap;
115
116         /* CONFIG_RAMTOP is the upper address of cached memory (among other
117          * things). We must not exceed beyond that address, there be dragons.
118          */
119         _bogus = ASSERT( ( _eram_seg < (CONFIG_RAMTOP)) , "Please increase CONFIG_RAMTOP");
120
121         /* Discard the sections we don't need/want */
122
123         /DISCARD/ : {
124                 *(.comment)
125                 *(.note)
126                 *(.note.*)
127         }
128 }