Skip to contentSkip to conversation

Xen i386 xen-head.S fix sections mixup

PATCH In review Mathieu Desnoyers 2 participants 5 messages Aug 20, 2007 virtio core

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Xen i386 xen-head.S fix sections mixup

Xen i386 xen-head.S fix sections mixup

xen-head.S does not come back to the data section, leaving the text section as current section. It causes problems with a slightly enhanced DEBUG_RODATA that supports CONFIG_HOTPLUG and bringing a CPU up after the text has been marked read-only: reference to early_gdt_descr causes a page fault.

It applies on 2.6.22-rc2-mm2.

---
 arch/i386/xen/xen-head.S |    2 ++
 1 file changed, 2 insertions(+)
arch/i386/xen/xen-head.S +2 -0
Index: linux-2.6-lttng/arch/i386/xen/xen-head.S
===================================================================
@@ -13,6 +13,7 @@ ENTRY(startup_xen)
 	cld
 	movl $(init_thread_union+THREAD_SIZE),%esp
 	jmp xen_start_kernel
+	.previous
 
 .pushsection ".bss.page_aligned"
 	.align PAGE_SIZE_asm
@@ -34,5 +35,6 @@ ENTRY(hypercall_page)
 	ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE,       .asciz "no")
 #endif
 	ELFNOTE(Xen, XEN_ELFNOTE_LOADER,         .asciz "generic")
+	.previous
 
 #endif /*CONFIG_XEN */
Signature · 3 lines
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68
#1 lore raw
Quoted 7 lines · Mathieu Desnoyers

Xen i386 xen-head.S fix sections mixup

xen-head.S does not come back to the data section, leaving the text section as current section. It causes problems with a slightly enhanced DEBUG_RODATA that supports CONFIG_HOTPLUG and bringing a CPU up after the text has been marked read-only: reference to early_gdt_descr causes a page fault.

Thanks. It should be using pushsection/popsection.

J

#2 lore raw

PATCH 1/1 Xen i386 xen-head.S fix sections mixup (updated)

Xen i386 xen-head.S fix sections mixup

xen-head.S does not come back to the data section, leaving the text section as current section. It causes problems with a slightly enhanced DEBUG_RODATA that supports CONFIG_HOTPLUG and bringing a CPU up after the text has been marked read-only: reference to early_gdt_descr causes a page fault.

Update:

It should be using pushsection/popsection.

---
 arch/i386/xen/xen-head.S |    8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
arch/i386/xen/xen-head.S +5 -3
Index: linux-2.6-lttng/arch/i386/xen/xen-head.S
===================================================================
@@ -7,20 +7,21 @@
 #include <asm/boot.h>
 #include <xen/interface/elfnote.h>
 
-	.section .init.text
+.pushsection .init.text
 ENTRY(startup_xen)
 	movl %esi,xen_start_info
 	cld
 	movl $(init_thread_union+THREAD_SIZE),%esp
 	jmp xen_start_kernel
+.popsection
 
-.pushsection ".bss.page_aligned"
+.pushsection .bss.page_aligned
 	.align PAGE_SIZE_asm
 ENTRY(hypercall_page)
 	.skip 0x1000
 .popsection
 
-	.section .text
+.pushsection .text
 	ELFNOTE(Xen, XEN_ELFNOTE_GUEST_OS,       .asciz "linux")
 	ELFNOTE(Xen, XEN_ELFNOTE_GUEST_VERSION,  .asciz "2.6")
 	ELFNOTE(Xen, XEN_ELFNOTE_XEN_VERSION,    .asciz "xen-3.0")
@@ -34,5 +35,6 @@ ENTRY(hypercall_page)
 	ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE,       .asciz "no")
 #endif
 	ELFNOTE(Xen, XEN_ELFNOTE_LOADER,         .asciz "generic")
+.popsection
 
 #endif /*CONFIG_XEN */
Signature · 3 lines
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68
Acked-by on v1 1/1
#3 lore raw

Re: [PATCH] Xen i386 xen-head.S fix sections mixup (updated)

Quoted 11 lines · Mathieu Desnoyers

Xen i386 xen-head.S fix sections mixup

xen-head.S does not come back to the data section, leaving the text section as current section. It causes problems with a slightly enhanced DEBUG_RODATA that supports CONFIG_HOTPLUG and bringing a CPU up after the text has been marked read-only: reference to early_gdt_descr causes a page fault.

Update:

It should be using pushsection/popsection.

Looks good, with one caveat below.

arch/i386/xen/xen-head.S ENTRY(hypercall_page) · line 39

Quoted 11 lines
arch/i386/xen/xen-head.S +2 -1
-	.section .text
+.pushsection .text
 	ELFNOTE(Xen, XEN_ELFNOTE_GUEST_OS,       .asciz "linux")
 	ELFNOTE(Xen, XEN_ELFNOTE_GUEST_VERSION,  .asciz "2.6")
 	ELFNOTE(Xen, XEN_ELFNOTE_XEN_VERSION,    .asciz "xen-3.0")
@@ -34,5 +35,6 @@ ENTRY(hypercall_page)
 	ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE,       .asciz "no")
 #endif
 	ELFNOTE(Xen, XEN_ELFNOTE_LOADER,         .asciz "generic")
+.popsection
 

Actually, the push/popsections around the ELFNOTEs are redundant; ELFNOTE() does its own push/popsection to put things into the appropriate .note* section anyway.

J

#4 lore raw

PATCH 1/1 Xen i386 xen-head.S fix sections mixup (update 2)

Xen i386 xen-head.S fix sections mixup

xen-head.S does not come back to the data section, leaving the text section as current section. It causes problems with a slightly enhanced DEBUG_RODATA that supports CONFIG_HOTPLUG and bringing a CPU up after the text has been marked read-only: reference to early_gdt_descr causes a page fault.

Updates:

- It should be using pushsection/popsection.
- Actually, the push/popsections around the ELFNOTEs are redundant; ELFNOTE() does its own push/popsection to put things into the appropriate .note* section anyway.

---
 arch/i386/xen/xen-head.S |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
arch/i386/xen/xen-head.S +3 -3
Index: linux-2.6-lttng/arch/i386/xen/xen-head.S
===================================================================
@@ -7,20 +7,20 @@
 #include <asm/boot.h>
 #include <xen/interface/elfnote.h>
 
-	.section .init.text
+.pushsection .init.text
 ENTRY(startup_xen)
 	movl %esi,xen_start_info
 	cld
 	movl $(init_thread_union+THREAD_SIZE),%esp
 	jmp xen_start_kernel
+.popsection
 
-.pushsection ".bss.page_aligned"
+.pushsection .bss.page_aligned
 	.align PAGE_SIZE_asm
 ENTRY(hypercall_page)
 	.skip 0x1000
 .popsection
 
-	.section .text
 	ELFNOTE(Xen, XEN_ELFNOTE_GUEST_OS,       .asciz "linux")
 	ELFNOTE(Xen, XEN_ELFNOTE_GUEST_VERSION,  .asciz "2.6")
 	ELFNOTE(Xen, XEN_ELFNOTE_XEN_VERSION,    .asciz "xen-3.0")
Signature · 3 lines
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68