GNU Linux-libre 6.7.9-gnu
[releases.git] / arch / x86 / boot / setup.ld
1 /*
2  * setup.ld
3  *
4  * Linker script for the i386 setup code
5  */
6 OUTPUT_FORMAT("elf32-i386")
7 OUTPUT_ARCH(i386)
8 ENTRY(_start)
9
10 SECTIONS
11 {
12         . = 0;
13         .bstext : {
14                 *(.bstext)
15                 . = 495;
16         } =0xffffffff
17
18         .header         : { *(.header) }
19         .entrytext      : { *(.entrytext) }
20         .inittext       : { *(.inittext) }
21         .initdata       : { *(.initdata) }
22         __end_init = .;
23
24         .text           : { *(.text .text.*) }
25         .text32         : { *(.text32) }
26
27         .pecompat       : { *(.pecompat) }
28         PROVIDE(pecompat_fsize = setup_size - pecompat_fstart);
29
30         . = ALIGN(16);
31         .rodata         : { *(.rodata*) }
32
33         .videocards     : {
34                 video_cards = .;
35                 *(.videocards)
36                 video_cards_end = .;
37         }
38
39         . = ALIGN(16);
40         .data           : { *(.data*) }
41
42         .signature      : {
43                 setup_sig = .;
44                 LONG(0x5a5aaa55)
45
46                 setup_size = ALIGN(ABSOLUTE(.), 4096);
47                 setup_sects = ABSOLUTE(setup_size / 512);
48         }
49
50         . = ALIGN(16);
51         .bss            :
52         {
53                 __bss_start = .;
54                 *(.bss)
55                 __bss_end = .;
56         }
57         . = ALIGN(16);
58         _end = .;
59
60         /DISCARD/       : {
61                 *(.note*)
62         }
63
64         /*
65          * The ASSERT() sink to . is intentional, for binutils 2.14 compatibility:
66          */
67         . = ASSERT(_end <= 0x8000, "Setup too big!");
68         . = ASSERT(hdr == 0x1f1, "The setup header has the wrong offset!");
69         /* Necessary for the very-old-loader check to work... */
70         . = ASSERT(__end_init <= 5*512, "init sections too big!");
71
72 }