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.
This commit is contained in:
Anish Athalye 2019-10-21 22:27:18 -04:00
parent 2821d43cc9
commit f2ab0eb644
2 changed files with 27 additions and 12 deletions

View file

@ -14,6 +14,9 @@ indent_size = 2
[*.S] [*.S]
indent_size = 8 indent_size = 8
[*.ld]
indent_size = 2
[Makefile] [Makefile]
indent_style = tab indent_style = tab
indent_size = 8 indent_size = 8

View file

@ -8,25 +8,37 @@ SECTIONS
* where qemu's -kernel jumps. * where qemu's -kernel jumps.
*/ */
. = 0x80000000; . = 0x80000000;
.text :
{ .text : {
*(.text) *(.text .text.*)
. = ALIGN(0x1000); . = ALIGN(0x1000);
_trampoline = .;
*(trampsec) *(trampsec)
}
. = ALIGN(0x1000); . = ALIGN(0x1000);
ASSERT(. - _trampoline == 0x1000, "error: trampoline larger than one page");
PROVIDE(etext = .); PROVIDE(etext = .);
/*
* make sure end is after data and bss.
*/
.data : {
*(.data)
} }
.rodata : {
. = ALIGN(16);
*(.srodata .srodata.*) /* do not need to distinguish this from .rodata */
. = ALIGN(16);
*(.rodata .rodata.*)
}
.data : {
. = ALIGN(16);
*(.sdata .sdata.*) /* do not need to distinguish this from .data */
. = ALIGN(16);
*(.data .data.*)
}
.bss : { .bss : {
*(.bss) . = ALIGN(16);
*(.sbss*) *(.sbss .sbss.*) /* do not need to distinguish this from .bss */
. = ALIGN(16);
*(.bss .bss.*)
}
PROVIDE(end = .); PROVIDE(end = .);
} }
}