xref: /linux/arch/x86/boot/setup.ld (revision e6a901a00822659181c93c86d8bbc2a17779fddc)
1/*
2 * setup.ld
3 *
4 * Linker script for the i386 setup code
5 */
6OUTPUT_FORMAT("elf32-i386")
7OUTPUT_ARCH(i386)
8ENTRY(_start)
9
10SECTIONS
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}
73