Index: boot/arch/ia32xen/Makefile.inc
===================================================================
--- boot/arch/ia32xen/Makefile.inc	(revision 9d8b843538b9dbae5186021f20e29e0fdea80c5a)
+++ boot/arch/ia32xen/Makefile.inc	(revision 9ab9c2ec85cf371e50f3b815722f6586f78add5b)
@@ -45,5 +45,5 @@
 ifeq ($(CONFIG_DEBUG),y)
 	cp arch/$(ARCH)/grub/menu.debug.lst arch/$(ARCH)/iso/boot/grub/menu.lst
-	cp arch/$(ARCH)/grub/xen.debug.gz arch/$(ARCH)/iso/boot/xen.gz
+	cp arch/$(ARCH)/grub/xen.debug.gz arch/$(ARCH)/iso/boot/
 else
 	cp arch/$(ARCH)/grub/menu.lst arch/$(ARCH)/iso/boot/grub/
Index: boot/arch/ia32xen/grub/menu.debug.lst
===================================================================
--- boot/arch/ia32xen/grub/menu.debug.lst	(revision 9d8b843538b9dbae5186021f20e29e0fdea80c5a)
+++ boot/arch/ia32xen/grub/menu.debug.lst	(revision 9ab9c2ec85cf371e50f3b815722f6586f78add5b)
@@ -4,5 +4,5 @@
 title=HelenOS/ia32xen
 root (cd)
-kernel /boot/xen.gz noreboot console=com1,vga com1=auto,8n1,0x3f8
+kernel /boot/xen.debug.gz noreboot console=com1,vga com1=auto,8n1,0x3f8
 module /boot/kernel.bin
 module /boot/ns
Index: kernel/arch/ia32xen/_link.ld.in
===================================================================
--- kernel/arch/ia32xen/_link.ld.in	(revision 9d8b843538b9dbae5186021f20e29e0fdea80c5a)
+++ kernel/arch/ia32xen/_link.ld.in	(revision 9ab9c2ec85cf371e50f3b815722f6586f78add5b)
@@ -8,10 +8,11 @@
 ENTRY(kernel_image_start)
 
+PHDRS {
+	image PT_LOAD FLAGS(7);	/* RWE */
+	note PT_NOTE FLAGS(4);	/* R__ */
+}
+
 SECTIONS {
-	__xen_guest : {
-		*(__xen_guest);
-	}
-	
-	.image PA2KA(BOOT_OFFSET): { 
+	.image PA2KA(BOOT_OFFSET): AT (BOOT_OFFSET) {
 		ktext_start = .;
 		*(K_TEXT_START);
@@ -33,5 +34,9 @@
 		*(.bss);			/* uninitialized static variables */
 		kdata_end = .;
-	}
+	} :image
+	
+	.notes : {
+		*(.note.Xen);
+	} :note
 
 	/DISCARD/ : {
Index: kernel/arch/ia32xen/include/boot/boot.h
===================================================================
--- kernel/arch/ia32xen/include/boot/boot.h	(revision 9d8b843538b9dbae5186021f20e29e0fdea80c5a)
+++ kernel/arch/ia32xen/include/boot/boot.h	(revision 9ab9c2ec85cf371e50f3b815722f6586f78add5b)
@@ -45,4 +45,17 @@
 #define XEN_VIRT_START	0xFC000000
 #define XEN_CS			0xe019
+
+#define XEN_ELFNOTE_INFO			0
+#define XEN_ELFNOTE_ENTRY			1
+#define XEN_ELFNOTE_HYPERCALL_PAGE	2
+#define XEN_ELFNOTE_VIRT_BASE		3
+#define XEN_ELFNOTE_PADDR_OFFSET	4
+#define XEN_ELFNOTE_XEN_VERSION 	5
+#define XEN_ELFNOTE_GUEST_OS		6
+#define XEN_ELFNOTE_GUEST_VERSION	7
+#define XEN_ELFNOTE_LOADER			8
+#define XEN_ELFNOTE_PAE_MODE		9
+#define XEN_ELFNOTE_FEATURES		10
+#define XEN_ELFNOTE_BSD_SYMTAB		11
 
 #ifndef __ASM__
Index: kernel/arch/ia32xen/src/boot/boot.S
===================================================================
--- kernel/arch/ia32xen/src/boot/boot.S	(revision 9d8b843538b9dbae5186021f20e29e0fdea80c5a)
+++ kernel/arch/ia32xen/src/boot/boot.S	(revision 9ab9c2ec85cf371e50f3b815722f6586f78add5b)
@@ -31,11 +31,25 @@
 #include <arch/pm.h>
 
-.section __xen_guest
-	.ascii "GUEST_OS=HelenOS,"
-	.ascii "XEN_VER=xen-3.0,"
-	.ascii "HYPERCALL_PAGE=0x0000,"
-	.ascii "LOADER=generic,"
-	.ascii "FEATURES=writable_page_tables"
-	.byte   0
+#define ELFNOTE(name, type, desctype, descval) \
+	.section .note.name; \
+	.align 4; \
+	.long 2f - 1f; \
+	.long 4f - 3f; \
+	.long type; \
+	1:.asciz #name; \
+	2:.align 4; \
+	3:desctype descval; \
+	4:.align 4
+
+ELFNOTE(Xen, XEN_ELFNOTE_GUEST_OS,			.asciz,	"HelenOS")
+ELFNOTE(Xen, XEN_ELFNOTE_GUEST_VERSION,		.asciz,	RELEASE)
+ELFNOTE(Xen, XEN_ELFNOTE_XEN_VERSION,		.asciz,	"xen-3.0")
+ELFNOTE(Xen, XEN_ELFNOTE_VIRT_BASE,			.long,	PA2KA(BOOT_OFFSET))
+ELFNOTE(Xen, XEN_ELFNOTE_PADDR_OFFSET,		.long,	0)
+ELFNOTE(Xen, XEN_ELFNOTE_ENTRY,				.long,	kernel_image_start)
+ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE,	.long,	hypercall_page)
+ELFNOTE(Xen, XEN_ELFNOTE_FEATURES,			.asciz,	"writable_page_tables|writable_descriptor_tables|auto_translated_physmap|supervisor_mode_kernel")
+ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE,			.asciz,	"no")
+ELFNOTE(Xen, XEN_ELFNOTE_LOADER,			.asciz,	"generic")
 
 .text
@@ -82,2 +96,8 @@
 console_page:
 	.space PAGE_SIZE
+
+# Xen 3.0.3 ELF loader is somehow buggy
+# thus this workaround
+.global dummy_fill
+dummy_fill:
+	.space (1024 * 1024)
