]> xenbits.xensource.com Git - seabios.git/commitdiff
Support %ebp register in 'struct bregs'.
authorKevin O'Connor <kevin@koconnor.net>
Sun, 17 May 2009 03:57:08 +0000 (23:57 -0400)
committerKevin O'Connor <kevin@koconnor.net>
Sun, 17 May 2009 03:57:08 +0000 (23:57 -0400)
Save/restore %ebp on irq entry.
Support saving and restoring %ebp on call16.
Enable display of %ebp in register dumps.

src/asm-offsets.c
src/bregs.h
src/entryfuncs.S
src/output.c
src/romlayout.S

index c3c3bc60ce19de4955576cd53429a8e34ef72b58..ea49296d96d5b70fdefd29331b7da528d3e49373 100644 (file)
@@ -16,6 +16,7 @@ void foo(void)
     OFFSET(BREGS_ebx, bregs, ebx);
     OFFSET(BREGS_ecx, bregs, ecx);
     OFFSET(BREGS_edx, bregs, edx);
+    OFFSET(BREGS_ebp, bregs, ebp);
     OFFSET(BREGS_esi, bregs, esi);
     OFFSET(BREGS_edi, bregs, edi);
     OFFSET(BREGS_flags, bregs, flags);
index e420bbe482c117dad77d80732ec0388dfb7f5b1d..e59a7f447d0ae3d149115937405a6ac63bbf4bdf 100644 (file)
@@ -37,6 +37,7 @@ struct bregs {
     u16 es;
     UREG(edi, di, di_hi, di_lo);
     UREG(esi, si, si_hi, si_lo);
+    UREG(ebp, bp, bp_hi, bp_lo);
     UREG(ebx, bx, bh, bl);
     UREG(edx, dx, dh, dl);
     UREG(ecx, cx, ch, cl);
index 96a2fcfc77958594529f3d6d165a3bc79238ebd0..65218e3bb8b402c4f88f6e75eea19b64da05d150 100644 (file)
@@ -67,6 +67,7 @@
         pushl %ecx
         pushl %edx
         pushl %ebx
+        pushl %ebp
         pushl %esi
         pushl %edi
         pushw %es
@@ -82,6 +83,7 @@
         popw %es
         popl %edi
         popl %esi
+        popl %ebp
         popl %ebx
         popl %edx
         popl %ecx
@@ -95,6 +97,7 @@
         pushl %ecx
         pushl %edx
         pushl %ebx
+        pushl %ebp
         pushl %esi
         pushl %edi
         pushw %es
         movw %cx, %ds
         movl %esp, %ebx         // Backup %esp, then zero high bits
         movzwl %sp, %esp
-        movl 24(%esp), %ecx     // Get calling function
-        movl %eax, 24(%esp)     // Save %eax
+        movl 28(%esp), %ecx     // Get calling function
+        movl %eax, 28(%esp)     // Save %eax
         movl %esp, %eax         // First arg is pointer to struct bregs
         calll *%ecx
         movl %ebx, %esp         // Restore %esp (including high bits)
         popw %es
         popl %edi
         popl %esi
+        popl %ebp
         popl %ebx
         popl %edx
         popl %ecx
         pushl %ecx
         pushl %edx
         pushl %ebx
+        pushl %ebp
         pushl %esi
         pushl %edi
         pushw %es
         popw %es
         popl %edi
         popl %esi
+        popl %ebp
         popl %ebx
         popl %edx
         popl %ecx
index 9cebf95abef2ed6d6807ff656c37611a0b664815..a3166265585f66e3c8aa6bd995a241c868db8959 100644 (file)
@@ -322,11 +322,12 @@ dump_regs(struct bregs *regs)
         dprintf(1, "  NULL\n");
         return;
     }
-    dprintf(1, "   a=%08x  b=%08x  c=%08x  d=%08x si=%08x di=%08x\n"
+    dprintf(1, "   a=%08x  b=%08x  c=%08x  d=%08x ds=%04x es=%04x ss=%04x\n"
             , regs->eax, regs->ebx, regs->ecx, regs->edx
-            , regs->esi, regs->edi);
-    dprintf(1, "  ds=%08x es=%08x ip=%08x cs=%08x  f=%08x  r=%08x\n"
-            , regs->ds, regs->es, regs->ip, regs->cs, regs->flags, (u32)regs);
+            , regs->ds, regs->es, GET_SEG(SS));
+    dprintf(1, "  si=%08x di=%08x bp=%08x  r=%08x cs=%04x ip=%04x  f=%04x\n"
+            , regs->esi, regs->edi, regs->ebp, (u32)regs
+            , regs->cs, regs->ip, regs->flags);
 }
 
 // Report entry to an Interrupt Service Routine (ISR).
index f354c74a519dc0a6e12e298b9d70d4bdc037c9f2..eca424082c8ef5cc098e035d86dadb077d1e714c 100644 (file)
@@ -157,6 +157,7 @@ __call16:
         // Load calling registers.
         movl BREGS_edi(%eax), %edi
         movl BREGS_esi(%eax), %esi
+        movl BREGS_ebp(%eax), %ebp
         movl BREGS_ebx(%eax), %ebx
         movl BREGS_edx(%eax), %edx
         movl BREGS_ecx(%eax), %ecx
@@ -184,6 +185,7 @@ __call16:
         movw %es, BREGS_es(%eax)
         movl %edi, BREGS_edi(%eax)
         movl %esi, BREGS_esi(%eax)
+        movl %ebp, BREGS_ebp(%eax)
         movl %ebx, BREGS_ebx(%eax)
         movl %edx, BREGS_edx(%eax)