[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v3 2/7] plat/kvm: Align linker script with Xen platform ones
Hi, just one question inline Simon Kuenzer <simon.kuenzer@xxxxxxxxx> writes: > The linker scripts of Xen and KVM diverged too much. This patch > is aligning KVMs with the ones from the Xen platform: > > - Unify symbols provided by linker script that mark start and end > of sections > - Remove currently unused and unsupported eh_frame section > It may be added again when we officially introduce support > together with the other platforms > - Use tabs for identation > - Keep multiboot header just once > > Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> > --- > plat/kvm/memory.c | 32 +++++++++++------ > plat/kvm/x86/entry64.S | 2 +- > plat/kvm/x86/link64.ld | 97 > ++++++++++++++++++++++---------------------------- > plat/kvm/x86/setup.c | 2 +- > 4 files changed, 67 insertions(+), 66 deletions(-) > > diff --git a/plat/kvm/memory.c b/plat/kvm/memory.c > index cfb15a6..705c6df 100644 > --- a/plat/kvm/memory.c > +++ b/plat/kvm/memory.c > @@ -32,20 +32,21 @@ extern void *_libkvmplat_mem_end; > > int ukplat_memregion_count(void) > { > - return 5; > + return 6; > } > > int ukplat_memregion_get(int i, struct ukplat_memregion_desc *m) > { > - extern char _stext[], _etext[], _erodata[], _end[]; > + extern char _text, _etext, _data, _edata, _rodata, _erodata, > + __bss_start, _end; > int ret; > > UK_ASSERT(m); > > switch (i) { > case 0: /* text */ > - m->base = &_stext; > - m->len = (size_t) &_etext - (size_t) &_stext; > + m->base = &_text; > + m->len = (size_t) &_etext - (size_t) &_text; > m->flags = (UKPLAT_MEMRF_RESERVED > | UKPLAT_MEMRF_READABLE); > #if UKPLAT_MEMRNAME > @@ -54,8 +55,8 @@ int ukplat_memregion_get(int i, struct > ukplat_memregion_desc *m) > ret = 0; > break; > case 1: /* rodata */ > - m->base = &_etext; > - m->len = (size_t) &_erodata - (size_t) &_etext; > + m->base = &_rodata; > + m->len = (size_t) &_erodata - (size_t) &_rodata; > m->flags = (UKPLAT_MEMRF_RESERVED > | UKPLAT_MEMRF_READABLE); > #if UKPLAT_MEMRNAME > @@ -64,8 +65,8 @@ int ukplat_memregion_get(int i, struct > ukplat_memregion_desc *m) > ret = 0; > break; > case 2: /* data */ > - m->base = &_erodata; > - m->len = (size_t) &_end - (size_t) &_erodata; > + m->base = &_data; > + m->len = (size_t) &_edata - (size_t) &_data; > m->flags = (UKPLAT_MEMRF_RESERVED > | UKPLAT_MEMRF_READABLE > | UKPLAT_MEMRF_WRITABLE); > @@ -74,7 +75,18 @@ int ukplat_memregion_get(int i, struct > ukplat_memregion_desc *m) > #endif > ret = 0; > break; > - case 3: /* heap */ > + case 3: /* bss */ > + m->base = &__bss_start; > + m->len = (size_t) &_end - (size_t) &__bss_start; > + m->flags = (UKPLAT_MEMRF_RESERVED > + | UKPLAT_MEMRF_READABLE > + | UKPLAT_MEMRF_WRITABLE); > +#if UKPLAT_MEMRNAME > + m->name = "bss"; > +#endif > + ret = 0; > + break; > + case 4: /* heap */ > m->base = _libkvmplat_heap_start; > m->len = (size_t) _libkvmplat_stack_top > - (size_t) _libkvmplat_heap_start; > @@ -84,7 +96,7 @@ int ukplat_memregion_get(int i, struct > ukplat_memregion_desc *m) > #endif > ret = 0; > break; > - case 4: /* stack */ > + case 5: /* stack */ > m->base = _libkvmplat_stack_top; > m->len = (size_t) _libkvmplat_mem_end > - (size_t) _libkvmplat_stack_top; > diff --git a/plat/kvm/x86/entry64.S b/plat/kvm/x86/entry64.S > index 2d14386..47980ad 100644 > --- a/plat/kvm/x86/entry64.S > +++ b/plat/kvm/x86/entry64.S > @@ -46,7 +46,7 @@ _multiboot_header: > .long _multiboot_header > .long 0x100000 > .long _edata > -.long _ebss > +.long _end > .long _libkvmplat_start32 > > .section .bss > diff --git a/plat/kvm/x86/link64.ld b/plat/kvm/x86/link64.ld > index 85ea058..a9f3ac3 100644 > --- a/plat/kvm/x86/link64.ld > +++ b/plat/kvm/x86/link64.ld > @@ -6,7 +6,7 @@ > * > * Copyright (c) 2016, IBM > * (c) 2016-2017 Docker, Inc. > - * (c) 2017, NEC Europe Ltd. > + * (c) 2017-2018, NEC Europe Ltd. > * > * Permission to use, copy, modify, and/or distribute this software > * for any purpose with or without fee is hereby granted, provided > @@ -24,63 +24,52 @@ > */ > > ENTRY(_libkvmplat_entry) > +SECTIONS > +{ > + . = 0x100000; > > -SECTIONS { > - . = 0x100000; > + /* Code */ > + _text = .; > + .text : > + { > + /* prevent linker gc from removing multiboot header */ > + KEEP (*(.data.multiboot)) As a side note, XEN does not have this KEEP in the linker. Is fine in case of XEN? > > - /* Code */ > - _stext = .; > + *(.text) > + *(.text.*) > + } > + _etext = .; > > - .text : > - { > - *(.data.multiboot) > - /* prevent linker gc from removing multiboot header */ > - KEEP(*(.data.multiboot)) > - *(.text) > - *(.text.*) > - } > + /* Read-only data */ > + . = ALIGN(0x1000); > + _rodata = .; > + .rodata : > + { > + *(.rodata) > + *(.rodata.*) > + } > + _erodata = .; > > - _etext = .; > + /* Read-write data (initialized) */ > + . = ALIGN(0x1000); > + _data = .; > + .data : > + { > + *(.data) > + *(.data.*) > + } > + _edata = .; > > - . = ALIGN(0x1000); > - /* Read-only data */ > - .rodata : > - { > - *(.rodata) > - *(.rodata.*) > - } > - .eh_frame : > - { > - *(.eh_frame) > - } > + /* Read-write data (uninitialized) */ > + . = ALIGN(0x1000); > + __bss_start = .; > + .bss : > + { > + *(.bss) > + *(.bss.*) > + *(COMMON) > + . = ALIGN(0x1000); > + } > > - _erodata = .; > - > - . = ALIGN(0x1000); > - /* Read-write data (initialized) */ > - .got : > - { > - *(.got.plt) > - *(.got) > - } > - .data : > - { > - *(.data) > - *(.data.*) > - } > - > - _edata = .; > - > - . = ALIGN(0x1000); > - /* Read-write data (uninitialized) */ > - .bss : > - { > - *(.bss) > - *(.bss.*) > - *(COMMON) > - } > - > - . = ALIGN(0x1000); > - _ebss = .; > - _end = .; > + _end = .; > } > diff --git a/plat/kvm/x86/setup.c b/plat/kvm/x86/setup.c > index 6895f29..332d10e 100644 > --- a/plat/kvm/x86/setup.c > +++ b/plat/kvm/x86/setup.c > @@ -78,7 +78,7 @@ static inline void _mb_get_cmdline(struct multiboot_info > *mi, char *cmdline, > > static inline void _mb_init_mem(struct multiboot_info *mi) > { > - extern char _end[]; > + extern char _end; > multiboot_memory_map_t *m; > size_t offset, max_addr; > > -- > 2.7.4 > > > _______________________________________________ > Minios-devel mailing list > Minios-devel@xxxxxxxxxxxxxxxxxxxx > https://lists.xenproject.org/mailman/listinfo/minios-devel -- Yuri Volchkov Software Specialist NEC Europe Ltd Kurfürsten-Anlage 36 D-69115 Heidelberg _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |