|
59 | 59 | /* Align . to a 8 byte boundary equals to maximum function alignment. */
|
60 | 60 | #define ALIGN_FUNCTION() . = ALIGN(8)
|
61 | 61 |
|
| 62 | +/* |
| 63 | + * LD_DEAD_CODE_DATA_ELIMINATION option enables -fdata-sections, which |
| 64 | + * generates .data.identifier sections, which need to be pulled in with |
| 65 | + * .data. We don't want to pull in .data..other sections, which Linux |
| 66 | + * has defined. Same for text and bss. |
| 67 | + */ |
| 68 | +#ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION |
| 69 | +#define TEXT_MAIN .text .text.[0-9a-zA-Z_]* |
| 70 | +#define DATA_MAIN .data .data.[0-9a-zA-Z_]* |
| 71 | +#define BSS_MAIN .bss .bss.[0-9a-zA-Z_]* |
| 72 | +#else |
| 73 | +#define TEXT_MAIN .text |
| 74 | +#define DATA_MAIN .data |
| 75 | +#define BSS_MAIN .bss |
| 76 | +#endif |
| 77 | + |
62 | 78 | /*
|
63 | 79 | * Align to a 32 byte boundary equal to the
|
64 | 80 | * alignment gcc 4.5 uses for a struct
|
|
198 | 214 |
|
199 | 215 | /*
|
200 | 216 | * .data section
|
201 |
| - * LD_DEAD_CODE_DATA_ELIMINATION option enables -fdata-sections generates |
202 |
| - * .data.identifier which needs to be pulled in with .data, but don't want to |
203 |
| - * pull in .data..stuff which has its own requirements. Same for bss. |
204 | 217 | */
|
205 | 218 | #define DATA_DATA \
|
206 |
| - *(.data .data.[0-9a-zA-Z_]*) \ |
| 219 | + *(DATA_MAIN) \ |
207 | 220 | *(.ref.data) \
|
208 | 221 | *(.data..shared_aligned) /* percpu related */ \
|
209 | 222 | MEM_KEEP(init.data) \
|
|
434 | 447 | VMLINUX_SYMBOL(__security_initcall_end) = .; \
|
435 | 448 | }
|
436 | 449 |
|
437 |
| -/* .text section. Map to function alignment to avoid address changes |
| 450 | +/* |
| 451 | + * .text section. Map to function alignment to avoid address changes |
438 | 452 | * during second ld run in second ld pass when generating System.map
|
439 |
| - * LD_DEAD_CODE_DATA_ELIMINATION option enables -ffunction-sections generates |
440 |
| - * .text.identifier which needs to be pulled in with .text , but some |
441 |
| - * architectures define .text.foo which is not intended to be pulled in here. |
442 |
| - * Those enabling LD_DEAD_CODE_DATA_ELIMINATION must ensure they don't have |
443 |
| - * conflicting section names, and must pull in .text.[0-9a-zA-Z_]* */ |
| 453 | + * |
| 454 | + * TEXT_MAIN here will match .text.fixup and .text.unlikely if dead |
| 455 | + * code elimination is enabled, so these sections should be converted |
| 456 | + * to use ".." first. |
| 457 | + */ |
444 | 458 | #define TEXT_TEXT \
|
445 | 459 | ALIGN_FUNCTION(); \
|
446 |
| - *(.text.hot .text .text.fixup .text.unlikely) \ |
| 460 | + *(.text.hot TEXT_MAIN .text.fixup .text.unlikely) \ |
447 | 461 | *(.ref.text) \
|
448 | 462 | MEM_KEEP(init.text) \
|
449 | 463 | MEM_KEEP(exit.text) \
|
|
613 | 627 | BSS_FIRST_SECTIONS \
|
614 | 628 | *(.bss..page_aligned) \
|
615 | 629 | *(.dynbss) \
|
616 |
| - *(.bss .bss.[0-9a-zA-Z_]*) \ |
| 630 | + *(BSS_MAIN) \ |
617 | 631 | *(COMMON) \
|
618 | 632 | }
|
619 | 633 |
|
|
0 commit comments