Skip to content

Commit c89ae25

Browse files
committed
Fix and enable --gc-sections in /kernel and /boot
1 parent 0373af9 commit c89ae25

File tree

23 files changed

+128
-147
lines changed

23 files changed

+128
-147
lines changed

boot/arch/arm32/_link.ld.in

+9-11
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,23 @@ SECTIONS {
66
. = BOOT_BASE;
77
.text : {
88
loader_start = .;
9-
*(BOOTSTRAP);
10-
*(.text);
9+
KEEP(*(BOOTSTRAP));
10+
*(.text .text.*);
1111
}
1212
. = BOOT_BASE + 0x8000;
1313
.data : {
1414
*(BOOTPT); /* bootstrap page table */
1515
*(BOOTSTACK); /* bootstrap stack */
16-
*(.data); /* initialized data */
17-
*(.rodata);
18-
*(.rodata.*);
19-
*(.sdata);
20-
*(.reginfo);
21-
*(.sbss);
22-
*(.scommon);
23-
*(.bss); /* uninitialized static variables */
16+
*(.data .data.*); /* initialized data */
17+
*(.rodata .rodata.*);
18+
*(.sdata .sdata.*);
19+
*(.sbss .sbss.*);
20+
*(.scommon .scommon.*);
21+
*(.bss .bss.*); /* uninitialized static variables */
2422
*(COMMON); /* global variables */
2523
loader_end = .;
2624
payload_start = .;
27-
*(.payload);
25+
KEEP(*(.payload));
2826
payload_end = .;
2927
}
3028

boot/arch/arm64/_link.ld.in

+7-7
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ SECTIONS {
66
. = 0x0;
77
.text : {
88
HIDDEN(loader_start = .);
9-
*(BOOTSTRAP);
10-
*(.text);
9+
KEEP(*(BOOTSTRAP));
10+
*(.text .text.*);
1111
}
1212
.dynamic : { *(.dynamic); }
1313
.rela.got : { *(.rela.got); }
@@ -16,14 +16,14 @@ SECTIONS {
1616
.dynstr : { *(.dynstr); }
1717
. = 0x8000;
1818
.data : {
19-
*(.data*); /* initialized data */
20-
*(.rodata*);
21-
*(.bss); /* uninitialized static variables */
19+
*(.data .data.*); /* initialized data */
20+
*(.rodata .rodata.*);
21+
*(.bss .bss.*); /* uninitialized static variables */
2222
*(COMMON); /* global variables */
23-
*(.got .got.plt);
23+
*(.got .got.*);
2424
HIDDEN(loader_end = .);
2525
HIDDEN(payload_start = .);
26-
*(.payload);
26+
KEEP(*(.payload));
2727
HIDDEN(payload_end = .);
2828
}
2929

boot/arch/ia64/_link.ld.in

+8-10
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,20 @@ ENTRY(start)
44
SECTIONS {
55
.boot 0x4400000: AT (0x4400000) {
66
loader_start = .;
7-
*(BOOTSTRAP);
8-
*(.text);
9-
*(.text.*);
10-
*(.sdata);
11-
*(.sdata2);
12-
*(.sbss);
13-
*(.rodata);
14-
*(.rodata.*);
7+
KEEP(*(BOOTSTRAP));
8+
*(.text .text.*);
9+
*(.sdata .sdata.*);
10+
*(.sdata2 .sdata2.*);
11+
*(.sbss .sbss.*);
12+
*(.rodata .rodata.*);
1513
*(.data .data.*); /* initialized data */
1614
__gp = . ;
1715
*(.got .got.*);
18-
*(.bss); /* uninitialized static variables */
16+
*(.bss .bss.*); /* uninitialized static variables */
1917
*(COMMON);
2018
loader_end = .;
2119
payload_start = .;
22-
*(.payload);
20+
KEEP(*(.payload));
2321
payload_end = .;
2422
}
2523

boot/arch/mips32/_link.ld.in

+9-10
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,21 @@ SECTIONS {
88
#endif
99
.text : {
1010
loader_start = .;
11-
*(BOOTSTRAP);
12-
*(.text);
11+
KEEP(*(BOOTSTRAP));
12+
*(.text .text.*);
1313
}
1414
.data : {
15-
*(.data); /* initialized data */
16-
*(.rodata);
17-
*(.rodata.*);
18-
*(.sdata);
15+
*(.data .data.*); /* initialized data */
16+
*(.rodata .rodata.*);
17+
*(.sdata .sdata.*);
1918
*(.reginfo);
20-
*(.sbss);
21-
*(.scommon);
22-
*(.bss); /* uninitialized static variables */
19+
*(.sbss .sbss.*);
20+
*(.scommon .scommon.*);
21+
*(.bss .bss.*); /* uninitialized static variables */
2322
*(COMMON); /* global variables */
2423
loader_end = .;
2524
payload_start = .;
26-
*(.payload);
25+
KEEP(*(.payload));
2726
payload_end = .;
2827
}
2928

boot/arch/ppc32/_link.ld.in

+9-12
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,20 @@ SECTIONS {
44
. = 0x08000000;
55
.text : {
66
loader_start = .;
7-
*(BOOTSTRAP);
8-
*(.text);
9-
*(.text.*);
7+
KEEP(*(BOOTSTRAP));
8+
*(.text .text.*);
109
}
1110
.data : {
12-
*(.data); /* initialized data */
13-
*(.rodata);
14-
*(.rodata.*);
15-
*(.sdata);
16-
*(.reginfo);
17-
*(.sbss);
18-
*(.scommon);
19-
*(.bss); /* uninitialized static variables */
11+
*(.data .data.*); /* initialized data */
12+
*(.rodata .rodata.*);
13+
*(.sdata .sdata.*);
14+
*(.sbss .sbss.*);
15+
*(.scommon .scommon.*);
16+
*(.bss .bss.*); /* uninitialized static variables */
2017
*(COMMON); /* global variables */
2118
loader_end = .;
2219
payload_start = .;
23-
*(.payload);
20+
KEEP(*(.payload));
2421
payload_end = .;
2522
}
2623

boot/arch/riscv64/_link.ld.in

+9-11
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ SECTIONS {
77

88
.text : {
99
loader_start = .;
10-
*(BOOTSTRAP);
11-
*(.text);
10+
KEEP(*(BOOTSTRAP));
11+
*(.text .text.*);
1212
}
1313

1414
. = ALIGN(0x1000);
@@ -26,18 +26,16 @@ SECTIONS {
2626
. = ALIGN(0x1000);
2727

2828
.data : {
29-
*(.data); /* initialized data */
30-
*(.rodata);
31-
*(.rodata.*);
32-
*(.sdata);
33-
*(.reginfo);
34-
*(.sbss);
35-
*(.scommon);
36-
*(.bss); /* uninitialized static variables */
29+
*(.data .data.*); /* initialized data */
30+
*(.rodata .rodata.*);
31+
*(.sdata .sdata.*);
32+
*(.sbss .sbss.*);
33+
*(.scommon .scommon.*);
34+
*(.bss .bss.*); /* uninitialized static variables */
3735
*(COMMON); /* global variables */
3836
loader_end = .;
3937
payload_start = .;
40-
*(.payload);
38+
KEEP(*(.payload));
4139
payload_end = .;
4240
}
4341

boot/arch/sparc64/_link.ld.in

+8-10
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,18 @@ SECTIONS {
44
. = 0x4000;
55
.boot : {
66
loader_start = .;
7-
*(BOOTSTRAP);
8-
*(.text.*);
7+
KEEP(*(BOOTSTRAP));
8+
*(.text .text.*);
99

10-
*(.data); /* initialized data */
11-
*(.rodata);
12-
*(.rodata.*);
13-
*(.sdata);
14-
*(.reginfo);
15-
*(.sbss);
16-
*(.bss); /* uninitialized static variables */
10+
*(.data .data.*); /* initialized data */
11+
*(.rodata .rodata.*);
12+
*(.sdata .sdata.*);
13+
*(.sbss .sbss.*);
14+
*(.bss .bss.*); /* uninitialized static variables */
1715
*(COMMON); /* global variables */
1816
loader_end = .;
1917
payload_start = .;
20-
*(.payload);
18+
KEEP(*(.payload));
2119
payload_end = .;
2220
}
2321

boot/meson.build

-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ if BUILD
9797
'-nostdlib',
9898
'-Wl,--nmagic',
9999
'-T', meson.current_build_dir()/'_link.ld',
100-
'-Wl,--no-gc-sections',
101100
]
102101

103102
if cc.get_id() == 'clang'

kernel/arch/abs32le/_link.ld.in

+6-7
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,23 @@ SECTIONS {
22
.text : {
33
kernel_load_address = .;
44
ktext_start = .;
5-
*(.text);
5+
*(.text .text.*);
66
ktext_end = .;
77
}
88
.data : {
99
kdata_start = .;
10-
*(.data); /* initialized data */
11-
*(.bss); /* uninitialized static variables */
10+
*(.data .data.*); /* initialized data */
11+
*(.bss .bss.*); /* uninitialized static variables */
1212
*(COMMON); /* global variables */
1313

1414
*(.rodata .rodata.*);
1515
*(.eh_frame .eh_frame.*); /* stack unwinding data */
1616
*(.eh_frame_hdr .eh_frame_hdr.*);
17-
*(.sdata);
18-
*(.reginfo);
17+
*(.sdata .sdata.*);
1918
}
2019
.sbss : {
21-
*(.sbss);
22-
*(.scommon);
20+
*(.sbss .sbss.*);
21+
*(.scommon .scommon.*);
2322
}
2423

2524
kdata_end = .;

kernel/arch/amd64/_link.ld.in

+6-6
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ SECTIONS {
1616

1717
.unmapped (BOOT_OFFSET + SIZEOF_HEADERS): AT (BOOT_OFFSET + SIZEOF_HEADERS) {
1818
unmapped_start = .;
19-
*(K_TEXT_START);
20-
*(K_DATA_START);
21-
*(K_INI_PTLS);
19+
KEEP(*(K_TEXT_START));
20+
KEEP(*(K_DATA_START));
21+
KEEP(*(K_INI_PTLS));
2222
unmapped_end = .;
2323
}
2424

@@ -28,14 +28,14 @@ SECTIONS {
2828
ktext_end = .;
2929

3030
kdata_start = .;
31-
*(.data); /* initialized data */
31+
*(.data .data.*); /* initialized data */
3232
*(.rodata .rodata.*);
33-
*(.eh_frame .eh_frame.*); /* stack unwinding data */
33+
*(.eh_frame .eh_frame.*); /* stack unwinding data */
3434
*(.eh_frame_hdr .eh_frame_hdr.*);
3535
*(COMMON); /* global variables */
3636

3737
/* bss can't be omitted from the ELF image. */
38-
*(.bss); /* uninitialized static variables */
38+
*(.bss .bss.*); /* uninitialized static variables */
3939
kdata_end = .;
4040
}
4141

kernel/arch/arm32/_link.ld.in

+6-7
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,23 @@ SECTIONS {
2727
. = . + SIZEOF_HEADERS;
2828
.text : {
2929
ktext_start = .;
30-
*(.text);
30+
*(.text .text.*);
3131
ktext_end = .;
3232
}
3333
.data : {
3434
kdata_start = .;
35-
*(.data); /* initialized data */
36-
*(.bss); /* uninitialized static variables */
35+
*(.data .data.*); /* initialized data */
36+
*(.bss .bss.*); /* uninitialized static variables */
3737
*(COMMON); /* global variables */
3838

3939
*(.rodata .rodata.*);
4040
*(.eh_frame .eh_frame.*); /* stack unwinding data */
4141
*(.eh_frame_hdr .eh_frame_hdr.*);
42-
*(.sdata);
43-
*(.reginfo);
42+
*(.sdata .sdata.*);
4443
}
4544
.sbss : {
46-
*(.sbss);
47-
*(.scommon);
45+
*(.sbss .sbss.*);
46+
*(.scommon .scommon.*);
4847
}
4948

5049
kdata_end = .;

kernel/arch/arm64/_link.ld.in

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ SECTIONS {
2121
.image (LOAD_ADDRESS_V + SIZEOF_HEADERS) : AT (LOAD_ADDRESS_P + SIZEOF_HEADERS) {
2222
. = ALIGN(16);
2323
ktext_start = .;
24-
*(K_TEXT_START)
24+
KEEP(*(K_TEXT_START))
2525
*(.text .text.*);
2626
ktext_end = .;
2727

2828
kdata_start = .;
29-
*(K_DATA_START)
30-
*(.data); /* initialized data */
31-
*(.bss); /* uninitialized static variables */
29+
KEEP(*(K_DATA_START))
30+
*(.data .data.*); /* initialized data */
31+
*(.bss .bss.*); /* uninitialized static variables */
3232
*(COMMON); /* global variables */
3333

3434
*(.rodata .rodata.*);

kernel/arch/ia32/_link.ld.in

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ SECTIONS {
1616

1717
.unmapped (BOOT_OFFSET + SIZEOF_HEADERS): AT (BOOT_OFFSET + SIZEOF_HEADERS) {
1818
unmapped_start = .;
19-
*(K_TEXT_START);
20-
*(K_DATA_START);
19+
KEEP(*(K_TEXT_START));
20+
KEEP(*(K_DATA_START));
2121
unmapped_end = .;
2222
}
2323

@@ -27,14 +27,14 @@ SECTIONS {
2727
ktext_end = .;
2828

2929
kdata_start = .;
30-
*(.data); /* initialized data */
30+
*(.data .data.*); /* initialized data */
3131
*(.rodata .rodata.*);
3232
*(.eh_frame .eh_frame.*); /* stack unwinding data */
3333
*(.eh_frame_hdr .eh_frame_hdr.*);
3434
*(COMMON); /* global variables */
3535

3636
/* bss can't be omitted from the ELF image. */
37-
*(.bss); /* uninitialized static variables */
37+
*(.bss .bss.*); /* uninitialized static variables */
3838
kdata_end = .;
3939
}
4040

0 commit comments

Comments
 (0)