WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [XEN][POWERPC] Update linker symbols and

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [XEN][POWERPC] Update linker symbols and scripts
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 14 Feb 2007 15:00:56 -0800
Delivery-date: Wed, 14 Feb 2007 15:38:59 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Jimi Xenidis <jimix@xxxxxxxxxxxxxx>
# Date 1169061128 18000
# Node ID 796887cef9e10436372576f74c751b3f0c039c0c
# Parent  978ff6fad81f47f19e840363acdc365197e1c6b6
[XEN][POWERPC] Update linker symbols and scripts

The following patch:
  - updates linker symbols and interfaces that use them
  - clean up of dynamically registered PAPR hcalls
  - Way simpler linker script

Signed-off-by: Jimi Xenidis <jimix@xxxxxxxxxxxxxx>
---
 xen/arch/powerpc/Makefile        |    2 
 xen/arch/powerpc/boot_of.c       |    4 
 xen/arch/powerpc/hcalls.c        |    6 -
 xen/arch/powerpc/of-devtree.h    |    3 
 xen/arch/powerpc/xen.lds.S       |  206 ++++++++++-----------------------------
 xen/include/asm-powerpc/config.h |    5 
 xen/include/asm-powerpc/init.h   |   10 -
 7 files changed, 72 insertions(+), 164 deletions(-)

diff -r 978ff6fad81f -r 796887cef9e1 xen/arch/powerpc/Makefile
--- a/xen/arch/powerpc/Makefile Tue Feb 06 15:03:52 2007 -0600
+++ b/xen/arch/powerpc/Makefile Wed Jan 17 14:12:08 2007 -0500
@@ -64,7 +64,7 @@ CFLAGS += $(PPC_C_WARNINGS)
 # objects into a single ELF segment and to not link in any additional
 # objects that gcc would normally like to
 #
-OMAGIC = -N -nodefaultlibs -nostartfiles
+OMAGIC = -nodefaultlibs -nostartfiles
 
 firmware: of_handler/built_in.o $(TARGET_SUBARCH)/memcpy.o of-devtree.o
        $(CC) $(CFLAGS) $(OMAGIC) -e __ofh_start -Wl,-Ttext,0x0 $^ -o $@
diff -r 978ff6fad81f -r 796887cef9e1 xen/arch/powerpc/boot_of.c
--- a/xen/arch/powerpc/boot_of.c        Tue Feb 06 15:03:52 2007 -0600
+++ b/xen/arch/powerpc/boot_of.c        Wed Jan 17 14:12:08 2007 -0500
@@ -13,7 +13,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  *
- * Copyright (C) IBM Corp. 2005, 2006
+ * Copyright IBM Corp. 2005, 2006, 2007
  *
  * Authors: Jimi Xenidis <jimix@xxxxxxxxxxxxxx>
  *          Hollis Blanchard <hollisb@xxxxxxxxxx>
@@ -1341,7 +1341,7 @@ multiboot_info_t __init *boot_of_init(
             __func__,
             r3, r4, vec, r6, r7, orig_msr);
 
-    if ((vec >= (ulong)_start) && (vec <= (ulong)_end)) {
+    if (is_kernel(vec)) {
         of_panic("Hmm.. OF[0x%lx] seems to have stepped on our image "
                 "that ranges: %p .. %p.\n",
                 vec, _start, _end);
diff -r 978ff6fad81f -r 796887cef9e1 xen/arch/powerpc/hcalls.c
--- a/xen/arch/powerpc/hcalls.c Tue Feb 06 15:03:52 2007 -0600
+++ b/xen/arch/powerpc/hcalls.c Wed Jan 17 14:12:08 2007 -0500
@@ -13,7 +13,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  *
- * Copyright (C) IBM Corp. 2005
+ * Copyright IBM Corp. 2005, 2006, 2007
  *
  * Authors: Hollis Blanchard <hollisb@xxxxxxxxxx>
  */
@@ -130,7 +130,7 @@ static void register_papr_hcall(ulong nu
 
 static void init_papr_hcalls(void)
 {
-    inithcall_t *hcall;
+    init_hcall_t *hcall;
     int i;
 
     /* initialize PAPR hcall table */
@@ -140,7 +140,7 @@ static void init_papr_hcalls(void)
         register_papr_hcall(i, do_ni_papr_hypercall);
 
     /* register the PAPR hcalls */
-    for (hcall = &__inithcall_start; hcall < &__inithcall_end; hcall++) {
+    for (hcall = &__init_hcall_start; hcall < &__init_hcall_end; hcall++) {
         register_papr_hcall(hcall->number, hcall->handler);
     }
 }
diff -r 978ff6fad81f -r 796887cef9e1 xen/arch/powerpc/of-devtree.h
--- a/xen/arch/powerpc/of-devtree.h     Tue Feb 06 15:03:52 2007 -0600
+++ b/xen/arch/powerpc/of-devtree.h     Wed Jan 17 14:12:08 2007 -0500
@@ -13,7 +13,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  *
- * Copyright (C) IBM Corp. 2005
+ * Copyright IBM Corp. 2005, 2006, 2007
  *
  * Authors: Jimi Xenidis <jimix@xxxxxxxxxxxxxx>
  */
@@ -23,6 +23,7 @@
 
 #include <xen/types.h>
 #include <xen/string.h>
+#include <xen/kernel.h>
 #include <public/xen.h>
 
 enum {
diff -r 978ff6fad81f -r 796887cef9e1 xen/arch/powerpc/xen.lds.S
--- a/xen/arch/powerpc/xen.lds.S        Tue Feb 06 15:03:52 2007 -0600
+++ b/xen/arch/powerpc/xen.lds.S        Wed Jan 17 14:12:08 2007 -0500
@@ -7,202 +7,112 @@ OUTPUT_FORMAT("elf64-powerpc", "elf64-po
              "elf64-powerpc")
 OUTPUT_ARCH(powerpc:common64)
 ENTRY(_start)
-SEARCH_DIR("=/usr/local/lib64"); SEARCH_DIR("=/lib64"); 
SEARCH_DIR("=/usr/lib64"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); 
SEARCH_DIR("=/usr/lib");
-/* Do we need any of these for elf?
-   __DYNAMIC = 0;    */
 PHDRS
 {
   text PT_LOAD;
 }   
 SECTIONS
 {
+  /* This is the address that we are linking at */     
   . = 0x00400000;
   PROVIDE(_text = .);
+  PROVIDE(_stext = .);
   /* Read-only sections, merged into text segment: */
-  .interp         : { *(.interp) } :text
-  .hash           : { *(.hash) }
-  .dynsym         : { *(.dynsym) }
-  .dynstr         : { *(.dynstr) }
-  .gnu.version    : { *(.gnu.version) }
-  .gnu.version_d  : { *(.gnu.version_d) }
-  .gnu.version_r  : { *(.gnu.version_r) }
-  .rel.dyn        :
-    {
-      *(.rel.init)
-      *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
-      *(.rel.fini)
-      *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
-      *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
-      *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
-      *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
-      *(.rel.ctors)
-      *(.rel.dtors)
-      *(.rel.got)
-      *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*)
-      *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*)
-      *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*)
-      *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*)
-      *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
-    }
-  .rela.dyn       :
-    {
-      *(.rela.init)
-      *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
-      *(.rela.fini)
-      *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
-      *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
-      *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
-      *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
-      *(.rela.ctors)
-      *(.rela.dtors)
-      *(.rela.got)
-      *(.rela.toc)
-      *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*)
-      *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*)
-      *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*)
-      *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*)
-      *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
-    }
-  .rel.plt        : { *(.rel.plt) }
-  .rela.plt       : { *(.rela.plt) }
-  .rela.tocbss   : { *(.rela.tocbss) }
-  .init           :
-  {
-    KEEP (*(.init))
-  } =0x60000000
   .text           :
   {
-    *(.text .stub .text.* .gnu.linkonce.t.*)
+    *(.text)
     /* .gnu.warning sections are handled specially by elf32.em.  */
     *(.gnu.warning)
-    *(.sfpr .glink)
-  } =0x60000000
-  .fini           :
-  {
-    KEEP (*(.fini))
-  } =0x60000000
+  } : text
+  /* end of text */
   PROVIDE (__etext = .);
   PROVIDE (_etext = .);
   PROVIDE (etext = .);
-  .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
-  .rodata1        : { *(.rodata1) }
-  .sdata2         : { *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) }
-  .sbss2          : { *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) }
-  .eh_frame_hdr : { *(.eh_frame_hdr) }
-  /* Adjust the address for the data segment.  We want to adjust up to
-     the same address within the page on the next page up.  */
-  . = ALIGN (0x10000) - ((0x10000 - .) & (0x10000 - 1)); . = 
DATA_SEGMENT_ALIGN (0x10000, 0x1000);
-  /* Ensure the __preinit_array_start label is properly aligned.  We
-     could instead move the label definition inside the section, but
-     the linker would then create the section even if it turns out to
-     be empty, which isn't pretty.  */
-  . = ALIGN(64 / 8);
-  PROVIDE (__preinit_array_start = .);
-  .preinit_array     : { *(.preinit_array) }
-  PROVIDE (__preinit_array_end = .);
-  PROVIDE (__init_array_start = .);
-  .init_array     : { *(.init_array) }
-  PROVIDE (__init_array_end = .);
-  PROVIDE (__fini_array_start = .);
-  .fini_array     : { *(.fini_array) }
-  PROVIDE (__fini_array_end = .);
+
+  /* read only data */
+  .rodata         : { *(.rodata .rodata.*) } : text
+  .rodata1        : { *(.rodata1) } : text
+  .sdata2         : { *(.sdata2 .sdata2.*) } : text
+  .sbss2          : { *(.sbss2 .sbss2.*) } : text
+
+  . = ALIGN(64);
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) } : text
+  __stop___ex_table = .;
+  . = ALIGN(64);
+
   .data           :
   {
     *(.data .gnu.linkonce.d.*)
     SORT(CONSTRUCTORS)
-  }
-
-  . = ALIGN(32);
-  __setup_start = .;
-  .init.setup : { *(.init.setup) }
-  __setup_end = .;
-  __initcall_start = .;
-  .initcall.init : { *(.initcall1.init) }
-  __initcall_end = .;
-  __inithcall_start = .;
-  .inithcall.text : { *(.inithcall.text) }
-  __inithcall_end = .;
-
-  __per_cpu_start = .;
-  .data.percpu : { *(.data.percpu) }
-  __per_cpu_data_end = .;
-  . = __per_cpu_start + (NR_CPUS << PERCPU_SHIFT);
-  . = ALIGN(STACK_SIZE);
-  __per_cpu_end = .;
-
-  .data1          : { *(.data1) }
-  .tdata         : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
-  .tbss                  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
-  .eh_frame       : { KEEP (*(.eh_frame)) }
-  .gcc_except_table   : { *(.gcc_except_table) }
-  .toc1                 ALIGN(8) : { *(.toc1) }
-  .opd          ALIGN(8) : { KEEP (*(.opd)) }
-  .dynamic        : { *(.dynamic) }
-  .ctors          :
-  {
-    /* gcc uses crtbegin.o to find the start of
-       the constructors, so we make sure it is
-       first.  Because this is a wildcard, it
-       doesn't matter if the user does not
-       actually link against crtbegin.o; the
-       linker won't look for a file to match a
-       wildcard.  The wildcard also means that it
-       doesn't matter which directory crtbegin.o
-       is in.  */
-    KEEP (*crtbegin*.o(.ctors))
-    /* We don't want to include the .ctor section from
-       from the crtend.o file until after the sorted ctors.
-       The .ctor section from the crtend file contains the
-       end of ctors marker and it must be last */
-    KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors))
-    KEEP (*(SORT(.ctors.*)))
-    KEEP (*(.ctors))
-  }
-  .dtors          :
-  {
-    KEEP (*crtbegin*.o(.dtors))
-    KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors))
-    KEEP (*(SORT(.dtors.*)))
-    KEEP (*(.dtors))
-  }
-  .jcr            : { KEEP (*(.jcr)) }
-  .got         ALIGN(8) : { *(.got .toc) }
+  } : text
+  .data1          : { *(.data1) } : text
+  .tdata         : { *(.tdata .tdata.* .gnu.linkonce.td.*) } : text
+  .tbss                  : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } 
: text
+  .toc1                 ALIGN(8) : { *(.toc1) } : text
+  .opd          ALIGN(8) : { KEEP (*(.opd)) } : text
+  .got         ALIGN(8) : { *(.got .toc) } : text
   /* We want the small data sections together, so single-instruction offsets
      can access them all, and initialized data all before uninitialized, so
      we can shorten the on-disk segment size.  */
   .sdata          :
   {
     *(.sdata .sdata.* .gnu.linkonce.s.*)
-  }
+  } : text
   _edata = .;
   PROVIDE (edata = .);
+
+  . = ALIGN(4096);             /* Init code and data */
+  __init_begin = .;
+  _sinittext = .;
+  .init.text : { *(.init.text) } : text
+  _einittext = .;
+  .init.data : { *(.init.data) } : text
+  . = ALIGN(32);
+  __setup_start = .;
+  .init.setup : { *(.init.setup) } : text
+  __setup_end = .;
+  __initcall_start = .;
+  .initcall.init : { *(.initcall1.init) } : text
+  __initcall_end = .;
+  __init_hcall_start = .;
+  .init_hcall.init : { *(.init_hcall.init) } : text
+  __init_hcall_end = .;
+  __builtin_cmdline : { *(__builtin_cmdline) } : text
+  . = ALIGN(4096);
+  __init_end = .;
+       
+  __per_cpu_start = .;
+  .data.percpu : { *(.data.percpu) } :text
+  __per_cpu_data_end = .;
+  . = __per_cpu_start + (NR_CPUS << PERCPU_SHIFT);
+  . = ALIGN(STACK_SIZE);
+  __per_cpu_end = .;
+       
   __bss_start = .;
-  .tocbss       ALIGN(8) : { *(.tocbss)}
+  .tocbss       ALIGN(8) : { *(.tocbss) } : text
   .sbss           :
   {
     PROVIDE (__sbss_start = .);
     PROVIDE (___sbss_start = .);
-    *(.dynsbss)
     *(.sbss .sbss.* .gnu.linkonce.sb.*)
     *(.scommon)
     PROVIDE (__sbss_end = .);
     PROVIDE (___sbss_end = .);
-  }
-  .plt            : { *(.plt) }
+  } : text
   .bss            :
   {
-   *(.dynbss)
    *(.bss .bss.* .gnu.linkonce.b.*)
    *(COMMON)
    /* Align here to ensure that the .bss section occupies space up to
       _end.  Align after .bss to ensure correct alignment even if the
       .bss section disappears because there are no input sections.  */
    . = ALIGN(64 / 8);
-  }
+  } : text
   . = ALIGN(64 / 8);
   _end = .;
   PROVIDE (end = .);
-  . = DATA_SEGMENT_END (.);
+
   /* Stabs debugging sections.  */
   .stab          0 : { *(.stab) }
   .stabstr       0 : { *(.stabstr) }
diff -r 978ff6fad81f -r 796887cef9e1 xen/include/asm-powerpc/config.h
--- a/xen/include/asm-powerpc/config.h  Tue Feb 06 15:03:52 2007 -0600
+++ b/xen/include/asm-powerpc/config.h  Wed Jan 17 14:12:08 2007 -0500
@@ -13,7 +13,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  *
- * Copyright (C) IBM Corp. 2005
+ * Copyright IBM Corp. 2005, 2006, 2007
  *
  * Authors: Hollis Blanchard <hollisb@xxxxxxxxxx>
  */
@@ -34,9 +34,6 @@
 
 #define U(x) (x ## U)
 #define UL(x) (x ## UL)
-extern char _start[];
-extern char _end[];
-extern char _etext[];
 extern char __bss_start[];
 #endif
 
diff -r 978ff6fad81f -r 796887cef9e1 xen/include/asm-powerpc/init.h
--- a/xen/include/asm-powerpc/init.h    Tue Feb 06 15:03:52 2007 -0600
+++ b/xen/include/asm-powerpc/init.h    Wed Jan 17 14:12:08 2007 -0500
@@ -13,7 +13,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  *
- * Copyright (C) IBM Corp. 2006
+ * Copyright IBM Corp. 2006, 2007
  *
  * Authors: Hollis Blanchard <hollisb@xxxxxxxxxx>
  */
@@ -27,14 +27,14 @@ typedef struct {
 typedef struct {
     unsigned long number;
     hcall_handler_t handler;
-} inithcall_t;
-extern inithcall_t __inithcall_start, __inithcall_end;
+} init_hcall_t;
+extern init_hcall_t __init_hcall_start, __init_hcall_end;
 
 #define __init_papr_hcall(nr, fn) \
-    static inithcall_t __inithcall_##fn __init_hcall \
+    static init_hcall_t __init_hcall_##fn __init_hcall \
     = { .number = nr, .handler = fn }
 
 #define __init_hcall  \
-    __attribute_used__ __attribute__ ((__section__ (".inithcall.text")))
+    __attribute_used__ __attribute__ ((__section__ (".init_hcall.init")))
 
 #endif /* _XEN_ASM_INIT_H */

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [XEN][POWERPC] Update linker symbols and scripts, Xen patchbot-unstable <=