[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT PATCH v2 1/6] plat: move common section definitions from linker script to include file



This only concerns kvm and Xen for now, because linuxu is special and
doesn't have a proper full linker script yet.

Signed-off-by: Florian Schmidt <florian.schmidt@xxxxxxxxx>
---
 plat/common/include/common.lds.h | 29 ++++++++++++++++
 plat/common/x86/link64.lds       | 59 --------------------------------
 plat/kvm/arm/link64.lds.S        | 28 ++-------------
 plat/kvm/x86/link64.lds.S        |  4 ++-
 plat/linuxu/arm/link.lds         |  1 +
 plat/linuxu/x86/link64.lds       | 26 +++++++++++++-
 plat/xen/arm/link32.lds.S        | 29 ++--------------
 plat/xen/x86/link64.lds.S        |  4 ++-
 8 files changed, 65 insertions(+), 115 deletions(-)
 delete mode 100644 plat/common/x86/link64.lds

diff --git a/plat/common/include/common.lds.h b/plat/common/include/common.lds.h
index 8672b6ff..ea030d9e 100644
--- a/plat/common/include/common.lds.h
+++ b/plat/common/include/common.lds.h
@@ -31,6 +31,8 @@
 #ifndef __UK_COMMON_LDS_H
 #define __UK_COMMON_LDS_H
 
+#include <uk/arch/limits.h> /* for __PAGE_SIZE */
+
 /* DWARF debug sections.  Symbols in the DWARF debugging sections are
  * relative to the beginning of the section so we begin them at 0.
  */
@@ -64,4 +66,31 @@
        .debug_macro    0 : { *(.debug_macro) }                         \
        .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
 
+#define EXCEPTION_SECTIONS                                             \
+       . = ALIGN(__PAGE_SIZE);                                         \
+       __eh_frame_start = .;                                           \
+       .eh_frame :                                                     \
+       {                                                               \
+               *(.eh_frame)                                            \
+               *(.eh_frame.*)                                          \
+       }                                                               \
+       __eh_frame_end = .;                                             \
+                                                                       \
+       __eh_frame_hdr_start = .;                                       \
+       .eh_frame_hdr :                                                 \
+       {                                                               \
+               *(.eh_frame_hdr)                                        \
+               *(.eh_frame_hdr.*)                                      \
+       }                                                               \
+       __eh_frame_hdr_end = .;
+
+#define CTORTAB_SECTION                                                        
\
+       . = ALIGN(__PAGE_SIZE);                                         \
+       uk_ctortab = .;                                                 \
+       .uk_ctortab :                                                   \
+       {                                                               \
+       KEEP(*(SORT_BY_NAME(.uk_ctortab[0-7])))                         \
+       LONG(0)                                                         \
+       }
+
 #endif /* __UK_COMMON_LDS_H */
diff --git a/plat/common/x86/link64.lds b/plat/common/x86/link64.lds
deleted file mode 100644
index 96f353b8..00000000
--- a/plat/common/x86/link64.lds
+++ /dev/null
@@ -1,59 +0,0 @@
-/* SPDX-License-Identifier: BSD-3-Clause */
-/*
- * Authors: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx>
- *
- * Copyright (c) 2019, Politehnica University of Bucharest. All rights 
reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holder nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY.
- */
-
-. = ALIGN(0x1000);
-__eh_frame_start = .;
-.eh_frame :
-{
-       *(.eh_frame)
-       *(.eh_frame.*)
-}
-__eh_frame_end = .;
-
-__eh_frame_hdr_start = .;
-.eh_frame_hdr :
-{
-       *(.eh_frame_hdr)
-       *(.eh_frame_hdr.*)
-}
-__eh_frame_hdr_end = .;
-
-. = ALIGN(0x1000);
-uk_ctortab = .;
-.uk_ctortab :
-{
-    KEEP(*(SORT_BY_NAME(.uk_ctortab[0-7])))
-    LONG(0)
-}
-
diff --git a/plat/kvm/arm/link64.lds.S b/plat/kvm/arm/link64.lds.S
index 96d9edcb..753d1696 100644
--- a/plat/kvm/arm/link64.lds.S
+++ b/plat/kvm/arm/link64.lds.S
@@ -69,25 +69,7 @@ SECTIONS {
        . = ALIGN(__PAGE_SIZE);
        _etext = .;
 
-       /* Exception frame */
-       __eh_frame_start = .;
-       .eh_frame :
-       {
-               *(.eh_frame)
-               *(.eh_frame.*)
-       }
-       __eh_frame_end = .;
-
-       /* Exception frame header */
-       __eh_frame_hdr_start = .;
-       .eh_frame_hdr :
-       {
-
-               *(.eh_frame_hdr)
-               *(.eh_frame_hdr.*)
-       }
-       . = ALIGN(__PAGE_SIZE);
-       __eh_frame_hdr_end = .;
+       EXCEPTION_SECTIONS
 
        /* Read-only data */
        _rodata = .;
@@ -100,13 +82,7 @@ SECTIONS {
 
        _erodata = .;
 
-       . = ALIGN(__PAGE_SIZE);
-       uk_ctortab = .;
-       .uk_ctortab :
-       {
-               KEEP(*(SORT_BY_NAME(.uk_ctortab[0-7])))
-               LONG(0)
-       }
+       CTORTAB_SECTION
 
        /* Constructor tables (read-only) */
        . = ALIGN(0x8);
diff --git a/plat/kvm/x86/link64.lds.S b/plat/kvm/x86/link64.lds.S
index 2a258e5d..5c63e4af 100644
--- a/plat/kvm/x86/link64.lds.S
+++ b/plat/kvm/x86/link64.lds.S
@@ -43,7 +43,9 @@ SECTIONS
        }
        _etext = .;
 
-       INCLUDE plat/common/x86/link64.lds
+       EXCEPTION_SECTIONS
+
+       CTORTAB_SECTION
 
        /* Read-only data */
        . = ALIGN(0x1000);
diff --git a/plat/linuxu/arm/link.lds b/plat/linuxu/arm/link.lds
index 6f45fd8b..f9920245 100644
--- a/plat/linuxu/arm/link.lds
+++ b/plat/linuxu/arm/link.lds
@@ -1,5 +1,6 @@
 SECTIONS
 {
+   /* TODO: include these from common-lds.h */
    . = ALIGN(0x1000);
    uk_ctortab = .;
    .uk_ctortab :
diff --git a/plat/linuxu/x86/link64.lds b/plat/linuxu/x86/link64.lds
index 077aaf66..aa239a0d 100644
--- a/plat/linuxu/x86/link64.lds
+++ b/plat/linuxu/x86/link64.lds
@@ -1,6 +1,30 @@
 SECTIONS
 {
-   INCLUDE plat/common/x86/link64.lds
+       /* TODO: include these from common-lds.h */
+       . = ALIGN(0x1000);
+       __eh_frame_start = .;
+       .eh_frame :
+       {
+               *(.eh_frame)
+               *(.eh_frame.*)
+       }
+       __eh_frame_end = .;
+
+       __eh_frame_hdr_start = .;
+       .eh_frame_hdr :
+       {
+               *(.eh_frame_hdr)
+               *(.eh_frame_hdr.*)
+       }
+       __eh_frame_hdr_end = .;
+
+       . = ALIGN(0x1000);
+       uk_ctortab = .;
+       .uk_ctortab :
+       {
+               KEEP(*(SORT_BY_NAME(.uk_ctortab[0-7])))
+               LONG(0)
+       }
 }
 INSERT AFTER .rodata
 
diff --git a/plat/xen/arm/link32.lds.S b/plat/xen/arm/link32.lds.S
index 9af25f15..8bbefa64 100644
--- a/plat/xen/arm/link32.lds.S
+++ b/plat/xen/arm/link32.lds.S
@@ -49,26 +49,7 @@ SECTIONS
 
        _etext = .;                     /* End of text section */
 
-       /* Exception frame */
-       . = ALIGN(4096);
-       __eh_frame_start = .;
-       .eh_frame :
-       {
-               *(.eh_frame)
-               *(.eh_frame.*)
-       }
-       __eh_frame_end = .;
-
-
-       /* Exception frame header */
-       __eh_frame_hdr_start = .;
-       .eh_frame_hdr :
-       {
-               *(.eh_frame_hdr)
-               *(.eh_frame_hdr.*)
-       }
-       . = ALIGN(4096);
-       __eh_frame_hdr_end = .;
+       EXCEPTION_SECTIONS
 
        /* Read-only data */
        _rodata = .;
@@ -80,13 +61,7 @@ SECTIONS
        . = ALIGN(4096);
        _erodata = .;
 
-       uk_ctortab = .;
-       .uk_ctortab :
-       {
-               KEEP(*(SORT_BY_NAME(.uk_ctortab[0-7])))
-               LONG(0)
-       }
-       . = ALIGN(4096);
+       CTORTAB_SECTION
 
        . = ALIGN(0x8);
        _ctors = .;
diff --git a/plat/xen/x86/link64.lds.S b/plat/xen/x86/link64.lds.S
index 44a9deb9..116a12e8 100644
--- a/plat/xen/x86/link64.lds.S
+++ b/plat/xen/x86/link64.lds.S
@@ -41,7 +41,9 @@ SECTIONS
 
        _etext = .;                     /* End of text section */
 
-       INCLUDE plat/common/x86/link64.lds
+       EXCEPTION_SECTIONS
+
+       CTORTAB_SECTION
 
        _rodata = .;
        .rodata : {
-- 
2.21.0


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.