Page 2 of 2

Re: IDT return problem from isr

Posted: Fri Nov 08, 2013 8:28 am
by kemosparc
In the pas post my code used to set the SS register to null just after swicthing to 64 bit (I was just trying to set the SS to NULL)

I have removed this and put th code to its original and I ran it again on Bochs, but still both presented the same running results but definitely not the same logs, and here is the content of the log:

Code: Select all

00000000000i[     ] Bochs x86 Emulator 2.4.6
00000000000i[     ]   Build from CVS snapshot, on February 22, 2011
00000000000i[     ] Compiled at May  1 2012, 20:39:36
00000000000i[     ] System configuration
00000000000i[     ]   processors: 1 (cores=1, HT threads=1)
00000000000i[     ]   A20 line support: yes
00000000000i[     ] CPU configuration
00000000000i[     ]   level: 6
00000000000i[     ]   SMP support: no
00000000000i[     ]   APIC support: yes
00000000000i[     ]   FPU support: yes
00000000000i[     ]   MMX support: yes
00000000000i[     ]   3dnow! support: no
00000000000i[     ]   SEP support: yes
00000000000i[     ]   SSE support: sse2
00000000000i[     ]   XSAVE support: no
00000000000i[     ]   AES support: no
00000000000i[     ]   MOVBE support: no
00000000000i[     ]   x86-64 support: yes
00000000000i[     ]   1G paging support: no
00000000000i[     ]   VMX support: no
00000000000i[     ] Optimization configuration
00000000000i[     ]   RepeatSpeedups support: yes
00000000000i[     ]   Trace cache support: yes
00000000000i[     ]   Fast function calls: yes
00000000000i[     ] Devices configuration
00000000000i[     ]   ACPI support: yes
00000000000i[     ]   NE2000 support: yes
00000000000i[     ]   PCI support: yes, enabled=yes
00000000000i[     ]   SB16 support: yes
00000000000i[     ]   USB support: yes
00000000000i[     ]   VGA extension support: vbe 
00000000000i[MEM0 ] allocated memory at 0x7f83256b4010. after alignment, vector=0x7f83256b5000
00000000000i[MEM0 ] 2048.00MB
00000000000i[MEM0 ] mem block size = 0x00100000, blocks=2048
00000000000i[MEM0 ] rom at 0xfffe0000/131072 ('/usr/share/bochs/BIOS-bochs-latest')
00000000000i[MEM0 ] rom at 0xc0000/41472 ('/usr/share/bochs/VGABIOS-lgpl-latest')
00000000000i[     ] lt_dlhandle is 0x30b4e30
00000000000i[PLGIN] loaded plugin libbx_cmos.so
00000000000i[     ] lt_dlhandle is 0x30b5850
00000000000i[PLGIN] loaded plugin libbx_dma.so
00000000000i[     ] lt_dlhandle is 0x30b62b0
00000000000i[PLGIN] loaded plugin libbx_pic.so
00000000000i[     ] lt_dlhandle is 0x30b6af0
00000000000i[PLGIN] loaded plugin libbx_pit.so
00000000000i[     ] lt_dlhandle is 0x30b7460
00000000000i[PLGIN] loaded plugin libbx_vga.so
00000000000i[     ] lt_dlhandle is 0x30b7bc0
00000000000i[PLGIN] loaded plugin libbx_hdimage.so
00000000000i[     ] lt_dlhandle is 0x30b84c0
00000000000i[PLGIN] loaded plugin libbx_floppy.so
00000000000i[     ] lt_dlhandle is 0x30b9080
00000000000i[PLGIN] loaded plugin libbx_soundmod.so
00000000000i[     ] lt_dlhandle is 0x30ba700
00000000000i[PLGIN] loaded plugin libbx_pci.so
00000000000i[     ] lt_dlhandle is 0x30ba5e0
00000000000i[PLGIN] loaded plugin libbx_pci2isa.so
00000000000i[     ] lt_dlhandle is 0x30bbbe0
00000000000i[PLGIN] loaded plugin libbx_usb_common.so
00000000000i[     ] lt_dlhandle is 0x30bc490
00000000000i[PLGIN] loaded plugin libbx_unmapped.so
00000000000i[     ] lt_dlhandle is 0x30bcd00
00000000000i[PLGIN] loaded plugin libbx_biosdev.so
00000000000i[     ] lt_dlhandle is 0x30bd630
00000000000i[PLGIN] loaded plugin libbx_speaker.so
00000000000i[     ] lt_dlhandle is 0x30bde60
00000000000i[PLGIN] loaded plugin libbx_extfpuirq.so
00000000000i[     ] lt_dlhandle is 0x30be6d0
00000000000i[PLGIN] loaded plugin libbx_gameport.so
00000000000i[     ] lt_dlhandle is 0x30bf050
00000000000i[PLGIN] loaded plugin libbx_pci_ide.so
00000000000i[     ] lt_dlhandle is 0x30bfad0
00000000000i[PLGIN] loaded plugin libbx_acpi.so
00000000000i[     ] lt_dlhandle is 0x30c03f0
00000000000i[PLGIN] loaded plugin libbx_ioapic.so
00000000000i[     ] lt_dlhandle is 0x30c0cb0
00000000000i[PLGIN] loaded plugin libbx_keyboard.so
00000000000i[     ] lt_dlhandle is 0x30c1500
00000000000i[PLGIN] loaded plugin libbx_harddrv.so
00000000000i[     ] lt_dlhandle is 0x30d35c0
00000000000i[PLGIN] loaded plugin libbx_serial.so
00000000000i[     ] lt_dlhandle is 0x30d4480
00000000000i[PLGIN] loaded plugin libbx_parallel.so
00000000000i[CMOS ] Using local time for initial clock
00000000000i[CMOS ] Setting initial clock to: Fri Nov  8 16:24:28 2013 (time0=1383920668)
00000000000i[DMA  ] channel 4 used by cascade
00000000000i[DMA  ] channel 2 used by Floppy Drive
00000000000i[FDD  ] fd0: '/home/kmsobh/crossenv/Projects/KEMOX/kemox.img' ro=0, h=2,t=80,spt=18
00000000000i[PCI  ] 440FX Host bridge present at device 0, function 0
00000000000i[PCI  ] PIIX3 PCI-to-ISA bridge present at device 1, function 0
00000000000i[VGA  ] interval=50000
00000000000i[MEM0 ] Register memory access handlers: 0x00000000000a0000 - 0x00000000000bffff
00000000000i[XGUI ] test_alloc_colors: 16 colors available out of 16 colors tried
00000000000i[XGUI ] font 8 wide x 16 high, display depth = 24
00000000000i[MEM0 ] Register memory access handlers: 0x00000000e0000000 - 0x00000000e0ffffff
00000000000i[VGA  ] VBE Bochs Display Extension Enabled
00000000000i[PLGIN] init_dev of 'unmapped' plugin device by virtual method
00000000000i[PLGIN] init_dev of 'biosdev' plugin device by virtual method
00000000000i[PLGIN] init_dev of 'speaker' plugin device by virtual method
00000000000i[SPEAK] Failed to open /dev/console: Resource temporarily unavailable
00000000000i[SPEAK] Deactivating beep on console
00000000000i[PLGIN] init_dev of 'extfpuirq' plugin device by virtual method
00000000000i[PLGIN] init_dev of 'gameport' plugin device by virtual method
00000000000i[PLGIN] init_dev of 'pci_ide' plugin device by virtual method
00000000000i[PCI  ] PIIX3 PCI IDE controller present at device 1, function 1
00000000000i[PLGIN] init_dev of 'acpi' plugin device by virtual method
00000000000i[PCI  ] ACPI Controller present at device 1, function 3
00000000000i[PLGIN] init_dev of 'ioapic' plugin device by virtual method
00000000000i[IOAP ] initializing I/O APIC
00000000000i[MEM0 ] Register memory access handlers: 0x00000000fec00000 - 0x00000000fec00fff
00000000000i[PLGIN] init_dev of 'keyboard' plugin device by virtual method
00000000000i[KBD  ] will paste characters every 1000 keyboard ticks
00000000000i[PLGIN] init_dev of 'harddrv' plugin device by virtual method
00000000000i[HD   ] Using boot sequence floppy, none, none
00000000000i[HD   ] Floppy boot signature check is enabled
00000000000i[PLGIN] init_dev of 'serial' plugin device by virtual method
00000000000i[SER  ] com1 at 0x03f8 irq 4
00000000000i[PLGIN] init_dev of 'parallel' plugin device by virtual method
00000000000i[PAR  ] parallel port 1 at 0x0378 irq 7
00000000000i[PLGIN] register state of 'unmapped' plugin device by virtual method
00000000000i[PLGIN] register state of 'biosdev' plugin device by virtual method
00000000000i[PLGIN] register state of 'speaker' plugin device by virtual method
00000000000i[PLGIN] register state of 'extfpuirq' plugin device by virtual method
00000000000i[PLGIN] register state of 'gameport' plugin device by virtual method
00000000000i[PLGIN] register state of 'pci_ide' plugin device by virtual method
00000000000i[PLGIN] register state of 'acpi' plugin device by virtual method
00000000000i[PLGIN] register state of 'ioapic' plugin device by virtual method
00000000000i[PLGIN] register state of 'keyboard' plugin device by virtual method
00000000000i[PLGIN] register state of 'harddrv' plugin device by virtual method
00000000000i[PLGIN] register state of 'serial' plugin device by virtual method
00000000000i[PLGIN] register state of 'parallel' plugin device by virtual method
00000000000i[SYS  ] bx_pc_system_c::Reset(HARDWARE) called
00000000000i[CPU0 ] cpu hardware reset
00000000000i[APIC0] allocate APIC id=0 (MMIO enabled) to 0x00000000fee00000
00000000000i[CPU0 ] CPUID[0x00000000]: 00000003 756e6547 6c65746e 49656e69
00000000000i[CPU0 ] CPUID[0x00000001]: 00000f23 00000800 00002000 07cbfbff
00000000000i[CPU0 ] CPUID[0x00000002]: 00410601 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x00000003]: 00000000 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x00000004]: 00000000 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x00000007]: 00000000 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x80000000]: 80000008 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x80000001]: 00000000 00000000 00000001 2a100800
00000000000i[CPU0 ] CPUID[0x80000002]: 20202020 20202020 20202020 6e492020
00000000000i[CPU0 ] CPUID[0x80000003]: 286c6574 50202952 69746e65 52286d75
00000000000i[CPU0 ] CPUID[0x80000004]: 20342029 20555043 20202020 00202020
00000000000i[CPU0 ] CPUID[0x80000006]: 00000000 42004200 02008140 00000000
00000000000i[CPU0 ] CPUID[0x80000007]: 00000000 00000000 00000000 00000000
00000000000i[CPU0 ] CPUID[0x80000008]: 00003028 00000000 00000000 00000000
00000000000i[PLGIN] reset of 'unmapped' plugin device by virtual method
00000000000i[PLGIN] reset of 'biosdev' plugin device by virtual method
00000000000i[PLGIN] reset of 'speaker' plugin device by virtual method
00000000000i[PLGIN] reset of 'extfpuirq' plugin device by virtual method
00000000000i[PLGIN] reset of 'gameport' plugin device by virtual method
00000000000i[PLGIN] reset of 'pci_ide' plugin device by virtual method
00000000000i[PLGIN] reset of 'acpi' plugin device by virtual method
00000000000i[PLGIN] reset of 'ioapic' plugin device by virtual method
00000000000i[PLGIN] reset of 'keyboard' plugin device by virtual method
00000000000i[PLGIN] reset of 'harddrv' plugin device by virtual method
00000000000i[PLGIN] reset of 'serial' plugin device by virtual method
00000000000i[PLGIN] reset of 'parallel' plugin device by virtual method
00000000000i[XGUI ] [x] Mouse off
00000003305i[BIOS ] $Revision: 1.257 $ $Date: 2011/01/26 09:52:02 $
00000318057i[KBD  ] reset-disable command received
00000447887i[VBIOS] VGABios $Id: vgabios.c,v 1.75 2011/10/15 14:07:21 vruppert Exp $
00000447958i[VGA  ] VBE known Display Interface b0c0
00000447990i[VGA  ] VBE known Display Interface b0c5
00000450915i[VBIOS] VBE Bios $Id: vbe.c,v 1.64 2011/07/19 18:25:05 vruppert Exp $
00000600000i[XGUI ] charmap update. Font Height is 16
00000771030i[BIOS ] Starting rombios32
00000771460i[BIOS ] Shutdown flag 0
00000772051i[BIOS ] ram_size=0x80000000
00000772511i[BIOS ] ram_end=2048MB
00000813011i[BIOS ] Found 1 cpu(s)
00000828848i[BIOS ] bios_table_addr: 0x000fb928 end=0x000fcc00
00000828946i[PCI  ] 440FX PMC write to PAM register 59 (TLB Flush)
00001156642i[PCI  ] 440FX PMC write to PAM register 59 (TLB Flush)
00001484573i[P2I  ] PCI IRQ routing: PIRQA# set to 0x0b
00001484592i[P2I  ] PCI IRQ routing: PIRQB# set to 0x09
00001484611i[P2I  ] PCI IRQ routing: PIRQC# set to 0x0b
00001484630i[P2I  ] PCI IRQ routing: PIRQD# set to 0x09
00001484640i[P2I  ] write: ELCR2 = 0x0a
00001485400i[BIOS ] PIIX3/PIIX4 init: elcr=00 0a
00001493052i[BIOS ] PCI: bus=0 devfn=0x00: vendor_id=0x8086 device_id=0x1237 class=0x0600
00001495297i[BIOS ] PCI: bus=0 devfn=0x08: vendor_id=0x8086 device_id=0x7000 class=0x0601
00001497381i[BIOS ] PCI: bus=0 devfn=0x09: vendor_id=0x8086 device_id=0x7010 class=0x0101
00001497603i[PIDE ] new BM-DMA address: 0xc000
00001498207i[BIOS ] region 4: 0x0000c000
00001500209i[BIOS ] PCI: bus=0 devfn=0x0b: vendor_id=0x8086 device_id=0x7113 class=0x0680
00001500432i[ACPI ] new irq line = 11
00001500444i[ACPI ] new irq line = 9
00001500473i[ACPI ] new PM base address: 0xb000
00001500487i[ACPI ] new SM base address: 0xb100
00001500515i[PCI  ] setting SMRAM control register to 0x4a
00001664608i[CPU0 ] Enter to System Management Mode
00001664618i[CPU0 ] RSM: Resuming from System Management Mode
00001828640i[PCI  ] setting SMRAM control register to 0x0a
00001837372i[BIOS ] MP table addr=0x000fba00 MPC table addr=0x000fb930 size=0xd0
00001839151i[BIOS ] SMBIOS table addr=0x000fba10
00001842324i[BIOS ] Firmware waking vector 0x7fff00cc
00001847242i[BIOS ] ACPI tables: RSDP addr=0x000fbb30 ACPI DATA addr=0x7fff0000 size=0x1f18
00001847278i[PCI  ] 440FX PMC write to PAM register 59 (TLB Flush)
00001847996i[BIOS ] bios_table_cur_addr: 0x000fbb54
00014041549i[BIOS ] Booting from 0000:7c00
00016777668e[CPU0 ] iret64: return CS selector null
00175772000p[XGUI ] >>PANIC<< POWER button turned off.
00175772000i[CPU0 ] CPU is in long mode (active)
00175772000i[CPU0 ] CS.d_b = 16 bit
00175772000i[CPU0 ] SS.d_b = 32 bit
00175772000i[CPU0 ] EFER   = 0x00000500
00175772000i[CPU0 ] | RAX=0000000000000060  RBX=000000000000b970
00175772000i[CPU0 ] | RCX=0000000000001f00  RDX=00000000000003d5
00175772000i[CPU0 ] | RSP=000000000008fe30  RBP=000000000000ba20
00175772000i[CPU0 ] | RSI=0000000000000060  RDI=00000000000003d5
00175772000i[CPU0 ] |  R8=00000000000b0000   R9=0000000000000034
00175772000i[CPU0 ] | R10=0000000000000003  R11=00000000cccccccd
00175772000i[CPU0 ] | R12=000000000000000d  R13=000000000000000d
00175772000i[CPU0 ] | R14=0000000000000000  R15=0000000000000000
00175772000i[CPU0 ] | IOPL=0 id vip vif ac vm rf nt of df if tf sf zf af PF cf
00175772000i[CPU0 ] | SEG selector     base    limit G D
00175772000i[CPU0 ] | SEG sltr(index|ti|rpl)     base    limit G D
00175772000i[CPU0 ] |  CS:0008( 0001| 0|  0) 00000000 00000000 0 0
00175772000i[CPU0 ] |  DS:0010( 0002| 0|  0) 00000000 00000000 0 0
00175772000i[CPU0 ] |  SS:0010( 0002| 0|  0) 00000000 ffffffff 1 1
00175772000i[CPU0 ] |  ES:0010( 0002| 0|  0) 00000000 00000000 0 0
00175772000i[CPU0 ] |  FS:0010( 0002| 0|  0) 00000000 00000000 0 0
00175772000i[CPU0 ] |  GS:0010( 0002| 0|  0) 00000000 00000000 0 0
00175772000i[CPU0 ] |  MSR_FS_BASE:0000000000000000
00175772000i[CPU0 ] |  MSR_GS_BASE:0000000000000000
00175772000i[CPU0 ] | RIP=000000000000b353 (000000000000b353)
00175772000i[CPU0 ] | CR0=0xe0000011 CR2=0x0000000000000000
00175772000i[CPU0 ] | CR3=0x00001000 CR4=0x00000020
00175772000i[CPU0 ] 0x000000000000b353>> jmp .-2 (0x000000000000b353) : EBFE
00175772000i[CMOS ] Last time is 1383920711 (Fri Nov  8 16:25:11 2013)
00175772000i[XGUI ] Exit
00175772000i[     ] restoring default signal behavior
00175772000i[CTRL ] quit_sim called with exit code 1

Re: IDT return problem from isr

Posted: Sat Nov 09, 2013 6:42 am
by kemosparc
Okay,

I have it working now.

I did two things to make it work:

1. Set the stack pointer to null very early as soon as I jump to long mode:

Code: Select all

[BITS 64]
Realm64:
       mov rax,0x0
       mov ss,rax
2. The increment of the stack pointer before the iretq should be incremented by 8 and not 16 as suggested earlier in this post

Code: Select all

add rsp,8
iretq
Thanks for all the people who had the time to reply and help me.

I will move on now to the IRQ setup.

Thanks a lot
Karim.

Re: IDT return problem from isr

Posted: Sat Nov 09, 2013 10:43 am
by dansmahajan
kemosparc wrote: 1. Set the stack pointer to null very early as soon as I jump to long mode:

Code: Select all

[BITS 64]
Realm64:
       mov rax,0x0
       mov ss,rax
you still doing it wrong.set ss to 0x10 and ss is stack segment not stack pointer

Code: Select all

start:
mov rsp, _stack_start
.
.
.
.
SECTION .bss
_stack_end:
   resb 8192               ;reserves 8KBytes of memory here
_stack_start:

Re: IDT return problem from isr

Posted: Sat Nov 09, 2013 12:47 pm
by kemosparc
No,

I tried it and it did not work.

Only when I set the stack segment to NULL it works.

I read that also in a couple of posts on this forum.