diff options
author | Anish Athalye <[email protected]> | 2019-10-21 22:27:18 -0400 |
---|---|---|
committer | Anish Athalye <[email protected]> | 2019-10-21 22:27:18 -0400 |
commit | f2ab0eb644a60f946f35fcb5578fba53720edfa7 (patch) | |
tree | cdc5299987fc1b1c2d0abc6ac79af564cd5e6d23 | |
parent | 2821d43cc95b4f9faf79ff94daa5d3a8ea5e7861 (diff) | |
download | xv6-labs-f2ab0eb644a60f946f35fcb5578fba53720edfa7.tar.gz xv6-labs-f2ab0eb644a60f946f35fcb5578fba53720edfa7.tar.bz2 xv6-labs-f2ab0eb644a60f946f35fcb5578fba53720edfa7.zip |
Clean up linker script
This patch does the following:
- Add .text.* to the .text section in the output
- Add an assertion that the trampoline does not overflow a page
- Add the .rodata section
- Make .sdata and .sdata.* (which is for small data) be absorbed into
the .data section, because we don't need to distinguish between them;
this prevents .sdata from appearing in the output
- Make the analogous change for .srodata and .sbss
- Make all the data sections 16-byte aligned
This patch also updates the .editorconfig for *.ld files.
-rw-r--r-- | .editorconfig | 3 | ||||
-rw-r--r-- | kernel/kernel.ld | 36 |
2 files changed, 27 insertions, 12 deletions
diff --git a/.editorconfig b/.editorconfig index cd9dfc3..c47611e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -14,6 +14,9 @@ indent_size = 2 [*.S] indent_size = 8 +[*.ld] +indent_size = 2 + [Makefile] indent_style = tab indent_size = 8 diff --git a/kernel/kernel.ld b/kernel/kernel.ld index acc3c8e..ee04f22 100644 --- a/kernel/kernel.ld +++ b/kernel/kernel.ld @@ -8,25 +8,37 @@ SECTIONS * where qemu's -kernel jumps. */ . = 0x80000000; - .text : - { - *(.text) + + .text : { + *(.text .text.*) . = ALIGN(0x1000); + _trampoline = .; *(trampsec) + . = ALIGN(0x1000); + ASSERT(. - _trampoline == 0x1000, "error: trampoline larger than one page"); + PROVIDE(etext = .); } - . = ALIGN(0x1000); - PROVIDE(etext = .); + .rodata : { + . = ALIGN(16); + *(.srodata .srodata.*) /* do not need to distinguish this from .rodata */ + . = ALIGN(16); + *(.rodata .rodata.*) + } - /* - * make sure end is after data and bss. - */ .data : { - *(.data) + . = ALIGN(16); + *(.sdata .sdata.*) /* do not need to distinguish this from .data */ + . = ALIGN(16); + *(.data .data.*) } + .bss : { - *(.bss) - *(.sbss*) - PROVIDE(end = .); + . = ALIGN(16); + *(.sbss .sbss.*) /* do not need to distinguish this from .bss */ + . = ALIGN(16); + *(.bss .bss.*) } + + PROVIDE(end = .); } |