diff options
Diffstat (limited to 'include/asm-generic/vmlinux.lds.h')
| -rw-r--r-- | include/asm-generic/vmlinux.lds.h | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index da0be9a8d1de..9623d78f8494 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
| @@ -60,6 +60,22 @@ | |||
| 60 | #define ALIGN_FUNCTION() . = ALIGN(8) | 60 | #define ALIGN_FUNCTION() . = ALIGN(8) |
| 61 | 61 | ||
| 62 | /* | 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 | |||
| 78 | /* | ||
| 63 | * Align to a 32 byte boundary equal to the | 79 | * Align to a 32 byte boundary equal to the |
| 64 | * alignment gcc 4.5 uses for a struct | 80 | * alignment gcc 4.5 uses for a struct |
| 65 | */ | 81 | */ |
| @@ -198,12 +214,9 @@ | |||
| 198 | 214 | ||
| 199 | /* | 215 | /* |
| 200 | * .data section | 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 | #define DATA_DATA \ | 218 | #define DATA_DATA \ |
| 206 | *(.data .data.[0-9a-zA-Z_]*) \ | 219 | *(DATA_MAIN) \ |
| 207 | *(.ref.data) \ | 220 | *(.ref.data) \ |
| 208 | *(.data..shared_aligned) /* percpu related */ \ | 221 | *(.data..shared_aligned) /* percpu related */ \ |
| 209 | MEM_KEEP(init.data) \ | 222 | MEM_KEEP(init.data) \ |
| @@ -434,16 +447,17 @@ | |||
| 434 | VMLINUX_SYMBOL(__security_initcall_end) = .; \ | 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 | * during second ld run in second ld pass when generating System.map | 452 | * during second ld run in second ld pass when generating System.map |
| 439 | * LD_DEAD_CODE_DATA_ELIMINATION option enables -ffunction-sections generates | 453 | * |
| 440 | * .text.identifier which needs to be pulled in with .text , but some | 454 | * TEXT_MAIN here will match .text.fixup and .text.unlikely if dead |
| 441 | * architectures define .text.foo which is not intended to be pulled in here. | 455 | * code elimination is enabled, so these sections should be converted |
| 442 | * Those enabling LD_DEAD_CODE_DATA_ELIMINATION must ensure they don't have | 456 | * to use ".." first. |
| 443 | * conflicting section names, and must pull in .text.[0-9a-zA-Z_]* */ | 457 | */ |
| 444 | #define TEXT_TEXT \ | 458 | #define TEXT_TEXT \ |
| 445 | ALIGN_FUNCTION(); \ | 459 | ALIGN_FUNCTION(); \ |
| 446 | *(.text.hot .text .text.fixup .text.unlikely) \ | 460 | *(.text.hot TEXT_MAIN .text.fixup .text.unlikely) \ |
| 447 | *(.ref.text) \ | 461 | *(.ref.text) \ |
| 448 | MEM_KEEP(init.text) \ | 462 | MEM_KEEP(init.text) \ |
| 449 | MEM_KEEP(exit.text) \ | 463 | MEM_KEEP(exit.text) \ |
| @@ -613,7 +627,7 @@ | |||
| 613 | BSS_FIRST_SECTIONS \ | 627 | BSS_FIRST_SECTIONS \ |
| 614 | *(.bss..page_aligned) \ | 628 | *(.bss..page_aligned) \ |
| 615 | *(.dynbss) \ | 629 | *(.dynbss) \ |
| 616 | *(.bss .bss.[0-9a-zA-Z_]*) \ | 630 | *(BSS_MAIN) \ |
| 617 | *(COMMON) \ | 631 | *(COMMON) \ |
| 618 | } | 632 | } |
| 619 | 633 | ||
