summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-03-08 01:24:42 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-03-08 01:24:42 +0000
commit2d3bbda678e4a4613303e32b53c4b652232e0dca (patch)
treef6c2781c153a3ee1335aeff948f4d99f40296ef2
parent8f66f424602e26f0a43a62beaa3c2aec7775c890 (diff)
downloadnuttx-2d3bbda678e4a4613303e32b53c4b652232e0dca.tar.gz
nuttx-2d3bbda678e4a4613303e32b53c4b652232e0dca.tar.bz2
nuttx-2d3bbda678e4a4613303e32b53c4b652232e0dca.zip
misc QEMU fixes
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3351 42af7a65-404d-4744-a932-0658087f49c3
-rw-r--r--nuttx/ChangeLog2
-rw-r--r--nuttx/Documentation/NuttX.html4
-rwxr-xr-xnuttx/arch/x86/include/i486/arch.h38
-rw-r--r--nuttx/arch/x86/src/i486/i486_utils.S26
-rw-r--r--nuttx/arch/x86/src/i486/up_initialstate.c8
-rwxr-xr-xnuttx/arch/x86/src/qemu/qemu_vectors.S34
-rwxr-xr-xnuttx/configs/qemu-i486/ostest/ld.script2
-rwxr-xr-xnuttx/configs/qemu-i486/ostest/setenv.sh2
8 files changed, 84 insertions, 32 deletions
diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog
index d61da5f5d..3101aa93e 100644
--- a/nuttx/ChangeLog
+++ b/nuttx/ChangeLog
@@ -1530,3 +1530,5 @@
reported by Uros Platise).
* drivers/mtd/ramtron.c - Driver for SPI-based RAMTRON NVRAM devices FM25V10
(and others). Contributed by Uros Platise.
+ * examples/nsh and tools/mkromfsimg.sh -- Add support for platform-specific
+ ROMFS-based NSH start-up scripts.
diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html
index bf638b5ec..95b132afa 100644
--- a/nuttx/Documentation/NuttX.html
+++ b/nuttx/Documentation/NuttX.html
@@ -8,7 +8,7 @@
<tr align="center" bgcolor="#e4e4e4">
<td>
<h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
- <p>Last Updated: March 6, 2011</p>
+ <p>Last Updated: March 7, 2011</p>
</td>
</tr>
</table>
@@ -2154,6 +2154,8 @@ nuttx-5.19 2011-xx-xx Gregory Nutt &lt;spudmonkey@racsa.co.cr&gt;
reported by Uros Platise).
* drivers/mtd/ramtron.c - Driver for SPI-based RAMTRON NVRAM devices FM25V10
(and others). Contributed by Uros Platise.
+ * examples/nsh and tools/mkromfsimg.sh -- Add support for platform-specific
+ ROMFS-based NSH start-up scripts.
pascal-2.1 2011-xx-xx Gregory Nutt &lt;spudmonkey@racsa.co.cr&gt;
diff --git a/nuttx/arch/x86/include/i486/arch.h b/nuttx/arch/x86/include/i486/arch.h
index e2dde5555..5910f08a1 100755
--- a/nuttx/arch/x86/include/i486/arch.h
+++ b/nuttx/arch/x86/include/i486/arch.h
@@ -163,6 +163,44 @@ static inline uint32_t up_getsp()
return regval;
}
+/* Get segment registers */
+
+static inline uint32_t up_getds()
+{
+ uint32_t regval;
+
+ asm volatile(
+ "\tmov %%ds, %0\n"
+ : "=rm" (regval)
+ :
+ : "memory");
+ return regval;
+}
+
+static inline uint32_t up_getcs()
+{
+ uint32_t regval;
+
+ asm volatile(
+ "\tmov %%cs, %0\n"
+ : "=rm" (regval)
+ :
+ : "memory");
+ return regval;
+}
+
+static inline uint32_t up_getss()
+{
+ uint32_t regval;
+
+ asm volatile(
+ "\tmov %%ss, %0\n"
+ : "=rm" (regval)
+ :
+ : "memory");
+ return regval;
+}
+
/****************************************************************************
* Public Types
****************************************************************************/
diff --git a/nuttx/arch/x86/src/i486/i486_utils.S b/nuttx/arch/x86/src/i486/i486_utils.S
index eae168fbd..9010b5a71 100644
--- a/nuttx/arch/x86/src/i486/i486_utils.S
+++ b/nuttx/arch/x86/src/i486/i486_utils.S
@@ -52,6 +52,8 @@
# define SYMBOL(s) s
#endif
+#define KSEG 0x10
+
/****************************************************************************
* Nasm
****************************************************************************/
@@ -84,12 +86,12 @@ SYMBOL(gdt_flush):
mov eax, [esp+4] /* Get the pointer to the GDT, passed as a parameter */
lgdt [eax] /* Load the new GDT pointer */
- mov ax, 0x10 /* 0x10 is the offset in the GDT to our data segment */
- mov ds, ax /* Load all data segment selectors */
- mov es, ax
- mov fs, ax
- mov gs, ax
- mov ss, ax
+ mov $KSEG, ax /* KSEG is the offset in the GDT to our data segment */
+ mov ax, ds /* Load all data segment selectors */
+ mov ax, es
+ mov ax, fs
+ mov ax, gs
+ mov ax, ss
jmp 0x08:.gflush /* 0x08 is the offset to our code segment: Far jump! */
.gflush:
ret
@@ -135,12 +137,12 @@ SYMBOL(gdt_flush):
movl %eax, 4(%esp) /* Get the pointer to the GDT, passed as a parameter */
lgdt (%eax) /* Load the new GDT pointer */
- mov %ax, 0x10 /* 0x10 is the offset in the GDT to our data segment */
- mov %ds, %ax /* Load all data segment selectors */
- mov %es, %ax
- mov %fs, %ax
- mov %gs, %ax
- mov %ss, %ax
+ mov $KSEG, %ax /* KSEG is the offset in the GDT to our data segment */
+ mov %ax, %ds /* Load all data segment selectors */
+ mov %ax, %es
+ mov %ax, %fs
+ mov %ax, %gs
+ mov %ax, %ss
jmp $0x08, $.Lgflush /* 0x08 is the offset to our code segment: Far jump! */
.Lgflush:
ret
diff --git a/nuttx/arch/x86/src/i486/up_initialstate.c b/nuttx/arch/x86/src/i486/up_initialstate.c
index 6e7417d5c..1a13b8991 100644
--- a/nuttx/arch/x86/src/i486/up_initialstate.c
+++ b/nuttx/arch/x86/src/i486/up_initialstate.c
@@ -93,6 +93,14 @@ void up_initial_state(_TCB *tcb)
xcp->regs[REG_EIP] = (uint32_t)tcb->start;
+ /* Set up the segment registers... assume the same segment as the caller.
+ * That is not a good assumption in the long run.
+ */
+
+ xcp->regs[REG_DS] = up_getds();
+ xcp->regs[REG_CS] = up_getcs();
+ xcp->regs[REG_SS] = up_getss();
+
/* Enable or disable interrupts, based on user configuration. If the IF
* bit is set, maskable interrupts will be enabled.
*/
diff --git a/nuttx/arch/x86/src/qemu/qemu_vectors.S b/nuttx/arch/x86/src/qemu/qemu_vectors.S
index 6795203e2..55aabaf39 100755
--- a/nuttx/arch/x86/src/qemu/qemu_vectors.S
+++ b/nuttx/arch/x86/src/qemu/qemu_vectors.S
@@ -408,14 +408,14 @@ isr_common:
/* trace 'S' */
pusha /* Pushes edi,esi,ebp,esp,ebx,edx,ecx,eax */
- mov %ax, %ds /* Lower 16-bits of eax = ds. */
+ mov %ds, %ax /* Lower 16-bits of eax = ds. */
pushl %eax /* Save the data segment descriptor */
- mov %ax, KSEG /* Load the kernel data segment descriptor */
- mov %ds, %ax
- mov %es, %ax
- mov %fs, %ax
- mov %gs, %ax
+ mov $KSEG, %ax /* Load the kernel data segment descriptor */
+ mov %ax, %ds
+ mov %ax, %es
+ mov %ax, %fs
+ mov %ax, %gs
/* The current value of the SP points to the beginning of the state save
* structure. Save that on the stack as the input parameter to isr_handler.
@@ -446,14 +446,14 @@ irq_common:
/* trace 'R' */
pusha /* Pushes edi,esi,ebp,esp,ebx,edx,ecx,eax */
- mov %ax, %ds /* Lower 16-bits of eax = ds. */
+ mov %ds, %ax /* Lower 16-bits of eax = ds. */
push %eax /* Save the data segment descriptor */
- mov %ax, KSEG /* Load the kernel data segment descriptor */
- mov %ds, %ax
- mov %es, %ax
- mov %fs, %ax
- mov %gs, %ax
+ mov $KSEG, %ax /* Load the kernel data segment descriptor */
+ mov %ax, %ds
+ mov %ax, %es
+ mov %ax, %fs
+ mov %ax, %gs
/* The current value of the SP points to the beginning of the state save
* structure. Save that on the stack as the input parameter to irq_handler.
@@ -488,13 +488,13 @@ irq_common:
.Lnoswitch:
pop %ebx /* Reload the original data segment descriptor */
- mov %ds, %bx
- mov %es, %bx
- mov %fs, %bx
- mov %gs, %bx
+ mov %bx, %ds
+ mov %bx, %es
+ mov %bx, %fs
+ mov %bx, %gs
popa /* Pops edi,esi,ebp... */
- add %esp, 8 /* Cleans up the pushed error code and pushed ISR number */
+ add $8, %esp /* Cleans up the pushed error code and pushed ISR number */
sti
iret /* Pops 5 things at once: CS, EIP, EFLAGS, SS, and ESP */
#ifndef __CYGWIN__
diff --git a/nuttx/configs/qemu-i486/ostest/ld.script b/nuttx/configs/qemu-i486/ostest/ld.script
index 612160e41..eb4fcd290 100755
--- a/nuttx/configs/qemu-i486/ostest/ld.script
+++ b/nuttx/configs/qemu-i486/ostest/ld.script
@@ -33,7 +33,7 @@
*
****************************************************************************/
-OUTPUT_ARCH(elf_i386)
+OUTPUT_ARCH(i386)
ENTRY(__start)
SECTIONS
{
diff --git a/nuttx/configs/qemu-i486/ostest/setenv.sh b/nuttx/configs/qemu-i486/ostest/setenv.sh
index df098332a..b119c7e62 100755
--- a/nuttx/configs/qemu-i486/ostest/setenv.sh
+++ b/nuttx/configs/qemu-i486/ostest/setenv.sh
@@ -42,7 +42,7 @@ if [ -z ${PATH_ORIG} ]; then export PATH_ORIG=${PATH}; fi
# Uncomment and modify the following if you are using anything other
# than the system GCC
# WD=`pwd`
-# export BUILDROOT_BIN="${WD}/../../buildroot/build_i486/staging_dir/bin"
+# export BUILDROOT_BIN="${WD}/../../../buildroot/build_i486/staging_dir/bin"
# export PATH="${BUILDROOT_BIN}:/sbin:/usr/sbin:${PATH_ORIG}"
echo "PATH : ${PATH}"