From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KzSoM-0003Kg-Gx for qemu-devel@nongnu.org; Mon, 10 Nov 2008 04:11:54 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KzSoK-0003Jq-Dz for qemu-devel@nongnu.org; Mon, 10 Nov 2008 04:11:53 -0500 Received: from [199.232.76.173] (port=55376 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KzSoJ-0003JY-JI for qemu-devel@nongnu.org; Mon, 10 Nov 2008 04:11:52 -0500 Received: from mx20.gnu.org ([199.232.41.8]:51228) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KzSoJ-0001t6-5y for qemu-devel@nongnu.org; Mon, 10 Nov 2008 04:11:51 -0500 Received: from mx2.redhat.com ([66.187.237.31]) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KzSoI-0002uv-A1 for qemu-devel@nongnu.org; Mon, 10 Nov 2008 04:11:50 -0500 From: Gleb Natapov Date: Mon, 10 Nov 2008 11:11:54 +0200 Message-ID: <20081110091154.11822.61139.stgit@dhcp-1-237.local> In-Reply-To: <20081110091134.11822.34230.stgit@dhcp-1-237.local> References: <20081110091134.11822.34230.stgit@dhcp-1-237.local> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH v3 4/6] Execute rombios32 code from rom address 0xe0000. Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: bochs-developers@lists.sourceforge.net Cc: qemu-devel@nongnu.org Signed-off-by: Gleb Natapov --- bios/Makefile.in | 1 + bios/rombios.c | 17 +---------------- bios/rombios32.ld | 10 ++++------ bios/rombios32start.S | 9 ++++++++- 4 files changed, 14 insertions(+), 23 deletions(-) diff --git a/bios/Makefile.in b/bios/Makefile.in index b055910..af674b4 100644 --- a/bios/Makefile.in +++ b/bios/Makefile.in @@ -106,6 +106,7 @@ rombios32.o: rombios32.c acpi-dsdt.hex ifeq ("1", "0") acpi-dsdt.hex: acpi-dsdt.dsl iasl -tc -p $@ $< + sed -i -e's/^unsigned/const unsigned/' $@ endif rombios32start.o: rombios32start.S diff --git a/bios/rombios.c b/bios/rombios.c index 7330173..630cfd2 100644 --- a/bios/rombios.c +++ b/bios/rombios.c @@ -10032,13 +10032,6 @@ rombios32_05: mov gs, ax cld - ;; copy rombios32 code to ram (ram offset = 1MB) - mov esi, #0xfffe0000 - mov edi, #0x00040000 - mov ecx, #0x10000 / 4 - rep - movsd - ;; init the stack pointer mov esp, #0x00080000 @@ -10047,17 +10040,9 @@ rombios32_05: push #0x04b2 ;; call rombios32 code - mov eax, #0x00040000 + mov eax, #0x000e0000 call eax - ;; reset the memory (some boot loaders such as syslinux suppose - ;; that the memory is set to zero) - mov edi, #0x00040000 - mov ecx, #0x40000 / 4 - xor eax, eax - rep - stosd - ;; return to 16 bit protected mode first db 0xea dd rombios32_10 diff --git a/bios/rombios32.ld b/bios/rombios32.ld index c7f6066..ff765c8 100644 --- a/bios/rombios32.ld +++ b/bios/rombios32.ld @@ -3,14 +3,12 @@ OUTPUT_ARCH(i386) ENTRY(_start); SECTIONS { - . = 0x00040000; + . = 0x000e0000; .text : { *(.text) } - .rodata : { *(.rodata) } - . = ALIGN(4096); - .data : { *(.data) } - __bss_start = . ; - .bss : { *(.bss) *(COMMON) } + .rodata : { *(.rodata*) } _end = . ; + .data 0x700 : AT (_end) { __data_start = .; *(.data); __data_end = .;} + .bss : { __bss_start = .; *(.bss) *(COMMON); __bss_end = .;} /DISCARD/ : { *(.stab) *(.stabstr) *(.comment) diff --git a/bios/rombios32start.S b/bios/rombios32start.S index 601e2b0..1900261 100644 --- a/bios/rombios32start.S +++ b/bios/rombios32start.S @@ -32,10 +32,17 @@ _start: /* clear bss section */ xor %eax, %eax mov $__bss_start, %edi - mov $_end, %ecx + mov $__bss_end, %ecx sub %edi, %ecx rep stosb + /* copy data section */ + mov $_end, %esi + mov $__data_start, %edi + mov $__data_end, %ecx + sub %edi, %ecx + rep movsb + jmp rombios32_init .code16