On Fri, Aug 8, 2014 at 5:02 PM, Bill Paul <[email protected]> wrote:
> Of all the gin joints in all the towns in all the world, Andrew Fish had to
> walk into mine at 16:46:15 on Friday 08 August 2014 and say:
>
>> I’m still working on porting the CpuExceptionHandlerLib to clang, but I hit
>> some code I don’t understand? I have mods in the assembly code but…..
>>
>> I’m running in QEMU and I’m taking the 1st timer tick and
>> CommonExceptionHandler() gets called and ExceptionType is 0x68. But
>> ExceptionType is used to index into an array that only has 32 entries?
>
> Vectors 0 to 31 are reserved for internal CPU exception vector values when
> running in protected mode or long mode. Vectors 32 through 255 are available
> for software defined interrupts. (In 16-bit real mode, only vectors 0 through
> 7 are reserved, which requires you to fiddle with the 8259 PICs a bit when you
> enter protected mode to avoid a conflict in the unlikely event that you choose
> to use the legacy PICs for interrupt handling.)
>
> So the exception count is correct, and I guess CommonExceptionHandler() is
> assuming that the ExceptionType argument will only ever be an internal
> exception value. Presumably there's some other code somewhere that branches
> off the handling of vectors 32 to 255 to a different handler (for IRQ
> dispatching).
>
> The question is where is the value 0x68 coming from?

Perhaps:
PcAtChipsetPkg/8259InterruptControllerDxe/8259.h
#define PROTECTED_MODE_BASE_VECTOR_MASTER                 0x68

-Jordan

>
> -Bill
>
>> Thanks,
>>
>> Andrew Fish
>>
>>
>> ~/work/src/edk2(master)>git grep CPU_EXCEPTION_NUM -- *.h
>> UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h:29:#define
>> CPU_EXCEPTION_NUM          32
>>
>>
>> https://svn.code.sf.net/p/edk2/code/trunk/edk2/UefiCpuPkg/Library/CpuExcept
>> ionHandlerLib/DxeSmmCpuException.c
>>
>> RESERVED_VECTORS_DATA       mReservedVectorsData[CPU_EXCEPTION_NUM];
>> EFI_CPU_INTERRUPT_HANDLER
>> mExternalInterruptHandlerTable[CPU_EXCEPTION_NUM]; ...
>> /**
>>   Common exception handler.
>>
>>   @param ExceptionType  Exception type.
>>   @param SystemContext  Pointer to EFI_SYSTEM_CONTEXT.
>> **/
>> VOID
>> EFIAPI
>> CommonExceptionHandler (
>>   IN EFI_EXCEPTION_TYPE          ExceptionType,
>>   IN EFI_SYSTEM_CONTEXT          SystemContext
>>   )
>> {
>>   EXCEPTION_HANDLER_CONTEXT      *ExceptionHandlerContext;
>>
>>   ExceptionHandlerContext = (EXCEPTION_HANDLER_CONTEXT *) (UINTN)
>> (SystemContext.SystemContextIa32);
>>
>>   switch (mReservedVectors[ExceptionType].Attribute) {
>> …
>>
>>   if (mExternalInterruptHandler[ExceptionType] != NULL) {
>>     (mExternalInterruptHandler[ExceptionType]) (ExceptionType,
>> SystemContext); } else if (ExceptionType < CPU_EXCEPTION_NUM) {
>>     //
>>     // Get Spinlock to display CPU information
>>     //
>>     while (!AcquireSpinLockOrFail (&mDisplayMessageSpinLock)) {
>>       CpuPause ();
>>     }
>>     //
>>     // Display ExceptionType, CPU information and Image information
>>     //
>>     DumpCpuContent (ExceptionType, SystemContext);
>>     //
>>     // Release Spinlock of output message
>>     //
>>     ReleaseSpinLock (&mDisplayMessageSpinLock);
>>     //
>>     // Enter a dead loop if needn't to execute old IDT handler further
>>     //
>>     if (mReservedVectors[ExceptionType].Attribute !=
>> EFI_VECTOR_HANDOFF_HOOK_BEFORE) { CpuDeadLoop ();
>>     }
>>   }
>
> --
> =============================================================================
> -Bill Paul            (510) 749-2329 | Senior Member of Technical Staff,
>                  [email protected] | Master of Unix-Fu - Wind River Systems
> =============================================================================
>    "I put a dollar in a change machine. Nothing changed." - George Carlin
> =============================================================================
>
> ------------------------------------------------------------------------------
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/edk2-devel

------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to