Mailing List Archive

Various fixes to Xen stack management. Ensure the cpu0_stack
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# Node ID b54e981957ebd69c9b413df668d3a49908d13f23
# Parent 8d0b62f0aa8d5a3dcb51f98403511d21601a0752
Various fixes to Xen stack management. Ensure the cpu0_stack
is always sufficiently aligned (requires some linker script
tricks). Small fixes to show_trace() and ensure that Xen
stack pointers are always below the 'struct cpu_info' region.

Signed-off-by: Keir Fraser <keir@xensource.com>

diff -r 8d0b62f0aa8d -r b54e981957eb .hgignore
--- a/.hgignore Thu Dec 29 14:47:23 2005
+++ b/.hgignore Thu Dec 29 15:59:12 2005
@@ -181,6 +181,7 @@
^xen/TAGS$
^xen/arch/x86/asm-offsets\.s$
^xen/arch/x86/boot/mkelf32$
+^xen/arch/x86/xen\.lds$
^xen/ddb/.*$
^xen/include/asm$
^xen/include/asm-.*/asm-offsets\.h$
diff -r 8d0b62f0aa8d -r b54e981957eb xen/arch/x86/Makefile
--- a/xen/arch/x86/Makefile Thu Dec 29 14:47:23 2005
+++ b/xen/arch/x86/Makefile Thu Dec 29 15:59:12 2005
@@ -29,6 +29,7 @@
endif

OBJS := $(subst $(TARGET_SUBARCH)/asm-offsets.o,,$(OBJS))
+OBJS := $(subst $(TARGET_SUBARCH)/xen.lds.o,,$(OBJS))

ifneq ($(crash_debug),y)
OBJS := $(patsubst cdb%.o,,$(OBJS))
@@ -43,21 +44,24 @@
$(CURDIR)/arch.o: $(OBJS)
$(LD) $(LDFLAGS) -r -o $@ $(OBJS)

-$(TARGET)-syms: boot/$(TARGET_SUBARCH).o $(ALL_OBJS) $(TARGET_SUBARCH)/xen.lds
- $(LD) $(LDFLAGS) -T $(TARGET_SUBARCH)/xen.lds -N \
+$(TARGET)-syms: boot/$(TARGET_SUBARCH).o $(ALL_OBJS) xen.lds
+ $(LD) $(LDFLAGS) -T xen.lds -N \
boot/$(TARGET_SUBARCH).o $(ALL_OBJS) -o $@
$(NM) -n $@ | $(BASEDIR)/tools/symbols >$(BASEDIR)/xen-syms.S
$(MAKE) $(BASEDIR)/xen-syms.o
- $(LD) $(LDFLAGS) -T $(TARGET_SUBARCH)/xen.lds -N \
+ $(LD) $(LDFLAGS) -T xen.lds -N \
boot/$(TARGET_SUBARCH).o $(ALL_OBJS) $(BASEDIR)/xen-syms.o -o $@
$(NM) -n $@ | $(BASEDIR)/tools/symbols >$(BASEDIR)/xen-syms.S
$(MAKE) $(BASEDIR)/xen-syms.o
- $(LD) $(LDFLAGS) -T $(TARGET_SUBARCH)/xen.lds -N \
+ $(LD) $(LDFLAGS) -T xen.lds -N \
boot/$(TARGET_SUBARCH).o $(ALL_OBJS) $(BASEDIR)/xen-syms.o -o $@
rm -f $(BASEDIR)/xen-syms.S $(BASEDIR)/xen-syms.o

asm-offsets.s: $(TARGET_SUBARCH)/asm-offsets.c $(HDRS)
$(CC) $(CFLAGS) -S -o $@ $<
+
+xen.lds: $(TARGET_SUBARCH)/xen.lds.S $(HDRS)
+ $(CC) $(CFLAGS) -P -E -Ui386 -D__ASSEMBLY__ -o $@ $<

boot/mkelf32: boot/mkelf32.c
$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
@@ -73,5 +77,6 @@
rm -f dm/*.o dm/*~ dm/core
rm -f genapic/*.o genapic/*~ genapic/core
rm -f cpu/*.o cpu/*~ cpu/core
+ rm -f xen.lds

.PHONY: default clean
diff -r 8d0b62f0aa8d -r b54e981957eb xen/arch/x86/boot/x86_32.S
--- a/xen/arch/x86/boot/x86_32.S Thu Dec 29 14:47:23 2005
+++ b/xen/arch/x86/boot/x86_32.S Thu Dec 29 15:59:12 2005
@@ -189,7 +189,7 @@
/*** STACK LOCATION ***/

ENTRY(stack_start)
- .long cpu0_stack + STACK_SIZE - 200 - __PAGE_OFFSET
+ .long cpu0_stack + STACK_SIZE - __PAGE_OFFSET
.long __HYPERVISOR_DS

/*** DESCRIPTOR TABLES ***/
@@ -256,10 +256,6 @@
.fill 1*PAGE_SIZE,1,0
#endif

-#if (STACK_ORDER == 0)
-.section ".bss.page_aligned","w"
-#else
-.section ".bss.twopage_aligned","w"
-#endif
+.section ".bss.stack_aligned","w"
ENTRY(cpu0_stack)
.fill STACK_SIZE,1,0
diff -r 8d0b62f0aa8d -r b54e981957eb xen/arch/x86/boot/x86_64.S
--- a/xen/arch/x86/boot/x86_64.S Thu Dec 29 14:47:23 2005
+++ b/xen/arch/x86/boot/x86_64.S Thu Dec 29 15:59:12 2005
@@ -219,7 +219,7 @@
.quad idt_table

ENTRY(stack_start)
- .quad cpu0_stack + STACK_SIZE - 200
+ .quad cpu0_stack + STACK_SIZE

high_start:
.quad __high_start
@@ -265,10 +265,6 @@
.org 0x4000 + PAGE_SIZE
.code64

-#if (STACK_ORDER == 0)
-.section ".bss.page_aligned","w"
-#else
-.section ".bss.twopage_aligned","w"
-#endif
+.section ".bss.stack_aligned","w"
ENTRY(cpu0_stack)
.fill STACK_SIZE,1,0
diff -r 8d0b62f0aa8d -r b54e981957eb xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c Thu Dec 29 14:47:23 2005
+++ b/xen/arch/x86/domain.c Thu Dec 29 15:59:12 2005
@@ -98,7 +98,7 @@
cpu_set(smp_processor_id(), v->domain->cpumask);
v->arch.schedule_tail = continue_idle_task;

- idle_loop();
+ reset_stack_and_jump(idle_loop);
}

static long no_idt[2];
diff -r 8d0b62f0aa8d -r b54e981957eb xen/arch/x86/setup.c
--- a/xen/arch/x86/setup.c Thu Dec 29 14:47:23 2005
+++ b/xen/arch/x86/setup.c Thu Dec 29 15:59:12 2005
@@ -138,10 +138,18 @@
(*call)();
}

-static void __init start_of_day(void)
+/* Variables handed off from __start_xen() to start_of_day(). */
+static unsigned long initial_images_start, initial_images_end;
+static multiboot_info_t *mbi;
+
+void __init start_of_day(void)
{
int i;
unsigned long vgdt, gdt_pfn;
+ char *cmdline;
+ unsigned long _initrd_start = 0, _initrd_len = 0;
+ unsigned int initrdidx = 1;
+ module_t *mod = (module_t *)__va(mbi->mods_addr);

early_cpu_init();

@@ -249,20 +257,93 @@
schedulers_start();

watchdog_enable();
+
+ shadow_mode_init();
+
+ /* initialize access control security module */
+ acm_init(&initrdidx, mbi, initial_images_start);
+
+ /* Create initial domain 0. */
+ dom0 = do_createdomain(0, 0);
+ if ( dom0 == NULL )
+ panic("Error creating domain 0\n");
+
+ set_bit(_DOMF_privileged, &dom0->domain_flags);
+ /* post-create hooks sets security label */
+ acm_post_domain0_create(dom0->domain_id);
+
+ /* Grab the DOM0 command line. */
+ cmdline = (char *)(mod[0].string ? __va(mod[0].string) : NULL);
+ if ( cmdline != NULL )
+ {
+ static char dom0_cmdline[MAX_GUEST_CMDLINE];
+
+ /* Skip past the image name and copy to a local buffer. */
+ while ( *cmdline == ' ' ) cmdline++;
+ if ( (cmdline = strchr(cmdline, ' ')) != NULL )
+ {
+ while ( *cmdline == ' ' ) cmdline++;
+ strcpy(dom0_cmdline, cmdline);
+ }
+
+ cmdline = dom0_cmdline;
+
+ /* Append any extra parameters. */
+ if ( skip_ioapic_setup && !strstr(cmdline, "noapic") )
+ strcat(cmdline, " noapic");
+ if ( acpi_skip_timer_override &&
+ !strstr(cmdline, "acpi_skip_timer_override") )
+ strcat(cmdline, " acpi_skip_timer_override");
+ if ( (strlen(acpi_param) != 0) && !strstr(cmdline, "acpi=") )
+ {
+ strcat(cmdline, " acpi=");
+ strcat(cmdline, acpi_param);
+ }
+ }
+
+ if ( (initrdidx > 0) && (initrdidx < mbi->mods_count) )
+ {
+ _initrd_start = initial_images_start +
+ (mod[initrdidx].mod_start - mod[0].mod_start);
+ _initrd_len = mod[initrdidx].mod_end - mod[initrdidx].mod_start;
+ }
+
+ /*
+ * We're going to setup domain0 using the module(s) that we stashed safely
+ * above our heap. The second module, if present, is an initrd ramdisk.
+ */
+ if ( construct_dom0(dom0,
+ initial_images_start,
+ mod[0].mod_end-mod[0].mod_start,
+ _initrd_start,
+ _initrd_len,
+ cmdline) != 0)
+ panic("Could not set up DOM0 guest OS\n");
+
+ /* Scrub RAM that is still free and so may go to an unprivileged domain. */
+ scrub_heap_pages();
+
+ init_trace_bufs();
+
+ /* Give up the VGA console if DOM0 is configured to grab it. */
+ console_endboot(cmdline && strstr(cmdline, "tty0"));
+
+ /* Hide UART from DOM0 if we're using it */
+ serial_endboot();
+
+ domain_unpause_by_systemcontroller(dom0);
+
+ startup_cpu_idle_loop();
}

#define EARLY_FAIL() for ( ; ; ) __asm__ __volatile__ ( "hlt" )

static struct e820entry e820_raw[E820MAX];

-void __init __start_xen(multiboot_info_t *mbi)
+void __init __start_xen(multiboot_info_t *__mbi)
{
- char *cmdline;
- module_t *mod = (module_t *)__va(mbi->mods_addr);
+ module_t *mod = (module_t *)__va(__mbi->mods_addr);
unsigned long nr_pages, modules_length;
- unsigned long initial_images_start, initial_images_end;
- unsigned long _initrd_start = 0, _initrd_len = 0;
- unsigned int initrdidx = 1;
physaddr_t s, e;
int i, e820_warn = 0, e820_raw_nr = 0, bytes = 0;
struct ns16550_defaults ns16550 = {
@@ -270,6 +351,8 @@
.parity = 'n',
.stop_bits = 1
};
+
+ mbi = __mbi;

/* Parse the command-line options. */
if ( (mbi->flags & MBI_CMDLINE) && (mbi->cmdline != 0) )
@@ -486,84 +569,7 @@

early_boot = 0;

- start_of_day();
-
- shadow_mode_init();
-
- /* initialize access control security module */
- acm_init(&initrdidx, mbi, initial_images_start);
-
- /* Create initial domain 0. */
- dom0 = do_createdomain(0, 0);
- if ( dom0 == NULL )
- panic("Error creating domain 0\n");
-
- set_bit(_DOMF_privileged, &dom0->domain_flags);
- /* post-create hooks sets security label */
- acm_post_domain0_create(dom0->domain_id);
-
- /* Grab the DOM0 command line. */
- cmdline = (char *)(mod[0].string ? __va(mod[0].string) : NULL);
- if ( cmdline != NULL )
- {
- static char dom0_cmdline[MAX_GUEST_CMDLINE];
-
- /* Skip past the image name and copy to a local buffer. */
- while ( *cmdline == ' ' ) cmdline++;
- if ( (cmdline = strchr(cmdline, ' ')) != NULL )
- {
- while ( *cmdline == ' ' ) cmdline++;
- strcpy(dom0_cmdline, cmdline);
- }
-
- cmdline = dom0_cmdline;
-
- /* Append any extra parameters. */
- if ( skip_ioapic_setup && !strstr(cmdline, "noapic") )
- strcat(cmdline, " noapic");
- if ( acpi_skip_timer_override &&
- !strstr(cmdline, "acpi_skip_timer_override") )
- strcat(cmdline, " acpi_skip_timer_override");
- if ( (strlen(acpi_param) != 0) && !strstr(cmdline, "acpi=") )
- {
- strcat(cmdline, " acpi=");
- strcat(cmdline, acpi_param);
- }
- }
-
- if ( (initrdidx > 0) && (initrdidx < mbi->mods_count) )
- {
- _initrd_start = initial_images_start +
- (mod[initrdidx].mod_start - mod[0].mod_start);
- _initrd_len = mod[initrdidx].mod_end - mod[initrdidx].mod_start;
- }
-
- /*
- * We're going to setup domain0 using the module(s) that we stashed safely
- * above our heap. The second module, if present, is an initrd ramdisk.
- */
- if ( construct_dom0(dom0,
- initial_images_start,
- mod[0].mod_end-mod[0].mod_start,
- _initrd_start,
- _initrd_len,
- cmdline) != 0)
- panic("Could not set up DOM0 guest OS\n");
-
- /* Scrub RAM that is still free and so may go to an unprivileged domain. */
- scrub_heap_pages();
-
- init_trace_bufs();
-
- /* Give up the VGA console if DOM0 is configured to grab it. */
- console_endboot(cmdline && strstr(cmdline, "tty0"));
-
- /* Hide UART from DOM0 if we're using it */
- serial_endboot();
-
- domain_unpause_by_systemcontroller(dom0);
-
- startup_cpu_idle_loop();
+ reset_stack_and_jump(start_of_day);
}

void arch_get_xen_caps(xen_capabilities_info_t info)
diff -r 8d0b62f0aa8d -r b54e981957eb xen/arch/x86/traps.c
--- a/xen/arch/x86/traps.c Thu Dec 29 14:47:23 2005
+++ b/xen/arch/x86/traps.c Thu Dec 29 15:59:12 2005
@@ -192,7 +192,8 @@

/* Bounds for range of valid frame pointer. */
low = (unsigned long)(ESP_BEFORE_EXCEPTION(regs) - 2);
- high = (low & ~(STACK_SIZE - 1)) + (STACK_SIZE - sizeof(struct cpu_info));
+ high = (low & ~(STACK_SIZE - 1)) +
+ (STACK_SIZE - sizeof(struct cpu_info) - 2*sizeof(unsigned long));

/* The initial frame pointer. */
next = regs->ebp;
@@ -200,14 +201,14 @@
for ( ; ; )
{
/* Valid frame pointer? */
- if ( (next < low) || (next > high) )
+ if ( (next < low) || (next >= high) )
{
/*
* Exception stack frames have a different layout, denoted by an
* inverted frame pointer.
*/
next = ~next;
- if ( (next < low) || (next > high) )
+ if ( (next < low) || (next >= high) )
break;
frame = (unsigned long *)next;
next = frame[0];
diff -r 8d0b62f0aa8d -r b54e981957eb xen/include/asm-x86/current.h
--- a/xen/include/asm-x86/current.h Thu Dec 29 14:47:23 2005
+++ b/xen/include/asm-x86/current.h Thu Dec 29 15:59:12 2005
@@ -49,7 +49,7 @@
#define reset_stack_and_jump(__fn) \
__asm__ __volatile__ ( \
"mov %0,%%"__OP"sp; jmp "STR(__fn) \
- : : "r" (guest_cpu_user_regs()) )
+ : : "r" (guest_cpu_user_regs()) : "memory" )

#define schedule_tail(_ed) (((_ed)->arch.schedule_tail)(_ed))

diff -r 8d0b62f0aa8d -r b54e981957eb xen/arch/x86/x86_32/xen.lds.S
--- /dev/null Thu Dec 29 14:47:23 2005
+++ b/xen/arch/x86/x86_32/xen.lds.S Thu Dec 29 15:59:12 2005
@@ -0,0 +1,85 @@
+/* ld script to make i386 Linux kernel
+ * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
+ * Modified for i386 Xen by Keir Fraser
+ */
+
+#include <xen/config.h>
+#include <asm/page.h>
+#undef ENTRY
+#undef ALIGN
+
+OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
+OUTPUT_ARCH(i386)
+ENTRY(start)
+PHDRS
+{
+ text PT_LOAD ;
+}
+SECTIONS
+{
+ . = 0xFF000000 + 0x100000;
+ _text = .; /* Text and read-only data */
+ .text : {
+ *(.text)
+ *(.fixup)
+ *(.gnu.warning)
+ } :text =0x9090
+ .text.lock : { *(.text.lock) } :text /* out-of-line lock text */
+
+ _etext = .; /* End of text section */
+
+ .rodata : { *(.rodata) *(.rodata.*) } :text
+
+ . = ALIGN(32); /* Exception table */
+ __start___ex_table = .;
+ __ex_table : { *(__ex_table) } :text
+ __stop___ex_table = .;
+
+ . = ALIGN(32); /* Pre-exception table */
+ __start___pre_ex_table = .;
+ __pre_ex_table : { *(__pre_ex_table) } :text
+ __stop___pre_ex_table = .;
+
+ .data : { /* Data */
+ *(.data)
+ CONSTRUCTORS
+ } :text
+
+ . = ALIGN(4096); /* Init code and data */
+ __init_begin = .;
+ .text.init : { *(.text.init) } :text
+ .data.init : { *(.data.init) } :text
+ . = ALIGN(32);
+ __setup_start = .;
+ .setup.init : { *(.setup.init) } :text
+ __setup_end = .;
+ __initcall_start = .;
+ .initcall.init : { *(.initcall.init) } :text
+ __initcall_end = .;
+ . = ALIGN(STACK_SIZE);
+ __init_end = .;
+
+ __bss_start = .; /* BSS */
+ .bss : {
+ *(.bss.stack_aligned)
+ *(.bss.page_aligned)
+ *(.bss)
+ } :text
+ _end = . ;
+
+ /* Sections to be discarded */
+ /DISCARD/ : {
+ *(.text.exit)
+ *(.data.exit)
+ *(.exitcall.exit)
+ }
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+}
diff -r 8d0b62f0aa8d -r b54e981957eb xen/arch/x86/x86_64/xen.lds.S
--- /dev/null Thu Dec 29 14:47:23 2005
+++ b/xen/arch/x86/x86_64/xen.lds.S Thu Dec 29 15:59:12 2005
@@ -0,0 +1,83 @@
+/* Excerpts written by Martin Mares <mj@atrey.karlin.mff.cuni.cz> */
+/* Modified for x86-64 Xen by Keir Fraser */
+
+#include <xen/config.h>
+#include <asm/page.h>
+#undef ENTRY
+#undef ALIGN
+
+OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
+OUTPUT_ARCH(i386:x86-64)
+ENTRY(start)
+PHDRS
+{
+ text PT_LOAD ;
+}
+SECTIONS
+{
+ . = 0xFFFF830000100000;
+ _text = .; /* Text and read-only data */
+ .text : {
+ *(.text)
+ *(.fixup)
+ *(.gnu.warning)
+ } :text = 0x9090
+ .text.lock : { *(.text.lock) } :text /* out-of-line lock text */
+
+ _etext = .; /* End of text section */
+
+ .rodata : { *(.rodata) *(.rodata.*) } :text
+
+ . = ALIGN(32); /* Exception table */
+ __start___ex_table = .;
+ __ex_table : { *(__ex_table) } :text
+ __stop___ex_table = .;
+
+ . = ALIGN(32); /* Pre-exception table */
+ __start___pre_ex_table = .;
+ __pre_ex_table : { *(__pre_ex_table) } :text
+ __stop___pre_ex_table = .;
+
+ .data : { /* Data */
+ *(.data)
+ CONSTRUCTORS
+ } :text
+
+ . = ALIGN(4096); /* Init code and data */
+ __init_begin = .;
+ .text.init : { *(.text.init) } :text
+ .data.init : { *(.data.init) } :text
+ . = ALIGN(32);
+ __setup_start = .;
+ .setup.init : { *(.setup.init) } :text
+ __setup_end = .;
+ __initcall_start = .;
+ .initcall.init : { *(.initcall.init) } :text
+ __initcall_end = .;
+ . = ALIGN(STACK_SIZE);
+ __init_end = .;
+
+ __bss_start = .; /* BSS */
+ .bss : {
+ *(.bss.stack_aligned)
+ *(.bss.page_aligned)
+ *(.bss)
+ } :text
+ _end = . ;
+
+ /* Sections to be discarded */
+ /DISCARD/ : {
+ *(.text.exit)
+ *(.data.exit)
+ *(.exitcall.exit)
+ }
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+}
diff -r 8d0b62f0aa8d -r b54e981957eb xen/arch/x86/x86_32/xen.lds
--- a/xen/arch/x86/x86_32/xen.lds Thu Dec 29 14:47:23 2005
+++ /dev/null Thu Dec 29 15:59:12 2005
@@ -1,79 +0,0 @@
-/* ld script to make i386 Linux kernel
- * Written by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
- * Modified for i386 Xen by Keir Fraser
- */
-OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
-OUTPUT_ARCH(i386)
-ENTRY(start)
-PHDRS
-{
- text PT_LOAD ;
-}
-SECTIONS
-{
- . = 0xFF000000 + 0x100000;
- _text = .; /* Text and read-only data */
- .text : {
- *(.text)
- *(.fixup)
- *(.gnu.warning)
- } :text =0x9090
- .text.lock : { *(.text.lock) } :text /* out-of-line lock text */
-
- _etext = .; /* End of text section */
-
- .rodata : { *(.rodata) *(.rodata.*) } :text
-
- . = ALIGN(32); /* Exception table */
- __start___ex_table = .;
- __ex_table : { *(__ex_table) } :text
- __stop___ex_table = .;
-
- . = ALIGN(32); /* Pre-exception table */
- __start___pre_ex_table = .;
- __pre_ex_table : { *(__pre_ex_table) } :text
- __stop___pre_ex_table = .;
-
- .data : { /* Data */
- *(.data)
- CONSTRUCTORS
- } :text
-
- . = ALIGN(4096); /* Init code and data */
- __init_begin = .;
- .text.init : { *(.text.init) } :text
- .data.init : { *(.data.init) } :text
- . = ALIGN(32);
- __setup_start = .;
- .setup.init : { *(.setup.init) } :text
- __setup_end = .;
- __initcall_start = .;
- .initcall.init : { *(.initcall.init) } :text
- __initcall_end = .;
- . = ALIGN(8192);
- __init_end = .;
-
- __bss_start = .; /* BSS */
- .bss : {
- *(.bss.twopage_aligned)
- *(.bss.page_aligned)
- *(.bss)
- } :text
- _end = . ;
-
- /* Sections to be discarded */
- /DISCARD/ : {
- *(.text.exit)
- *(.data.exit)
- *(.exitcall.exit)
- }
-
- /* Stabs debugging sections. */
- .stab 0 : { *(.stab) }
- .stabstr 0 : { *(.stabstr) }
- .stab.excl 0 : { *(.stab.excl) }
- .stab.exclstr 0 : { *(.stab.exclstr) }
- .stab.index 0 : { *(.stab.index) }
- .stab.indexstr 0 : { *(.stab.indexstr) }
- .comment 0 : { *(.comment) }
-}
diff -r 8d0b62f0aa8d -r b54e981957eb xen/arch/x86/x86_64/xen.lds
--- a/xen/arch/x86/x86_64/xen.lds Thu Dec 29 14:47:23 2005
+++ /dev/null Thu Dec 29 15:59:12 2005
@@ -1,77 +0,0 @@
-/* Excerpts written by Martin Mares <mj@atrey.karlin.mff.cuni.cz> */
-/* Modified for x86-64 Xen by Keir Fraser */
-OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
-OUTPUT_ARCH(i386:x86-64)
-ENTRY(start)
-PHDRS
-{
- text PT_LOAD ;
-}
-SECTIONS
-{
- . = 0xFFFF830000100000;
- _text = .; /* Text and read-only data */
- .text : {
- *(.text)
- *(.fixup)
- *(.gnu.warning)
- } :text = 0x9090
- .text.lock : { *(.text.lock) } :text /* out-of-line lock text */
-
- _etext = .; /* End of text section */
-
- .rodata : { *(.rodata) *(.rodata.*) } :text
-
- . = ALIGN(32); /* Exception table */
- __start___ex_table = .;
- __ex_table : { *(__ex_table) } :text
- __stop___ex_table = .;
-
- . = ALIGN(32); /* Pre-exception table */
- __start___pre_ex_table = .;
- __pre_ex_table : { *(__pre_ex_table) } :text
- __stop___pre_ex_table = .;
-
- .data : { /* Data */
- *(.data)
- CONSTRUCTORS
- } :text
-
- . = ALIGN(4096); /* Init code and data */
- __init_begin = .;
- .text.init : { *(.text.init) } :text
- .data.init : { *(.data.init) } :text
- . = ALIGN(32);
- __setup_start = .;
- .setup.init : { *(.setup.init) } :text
- __setup_end = .;
- __initcall_start = .;
- .initcall.init : { *(.initcall.init) } :text
- __initcall_end = .;
- . = ALIGN(8192);
- __init_end = .;
-
- __bss_start = .; /* BSS */
- .bss : {
- *(.bss.twopage_aligned)
- *(.bss.page_aligned)
- *(.bss)
- } :text
- _end = . ;
-
- /* Sections to be discarded */
- /DISCARD/ : {
- *(.text.exit)
- *(.data.exit)
- *(.exitcall.exit)
- }
-
- /* Stabs debugging sections. */
- .stab 0 : { *(.stab) }
- .stabstr 0 : { *(.stabstr) }
- .stab.excl 0 : { *(.stab.excl) }
- .stab.exclstr 0 : { *(.stab.exclstr) }
- .stab.index 0 : { *(.stab.index) }
- .stab.indexstr 0 : { *(.stab.indexstr) }
- .comment 0 : { *(.comment) }
-}

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