[PATCH 1/5] ntdll: Test exception codes on x86-64.

Zebediah Figura z.figura12 at gmail.com
Mon Mar 12 22:14:15 CDT 2018


On 12/03/18 22:00, Dmitry Timoshkov wrote:
> Zebediah Figura <z.figura12 at gmail.com> wrote:
> 
>> +typedef enum _UNWIND_OP_CODES
>> +{
>> +    UWOP_PUSH_NONVOL = 0,
>> +    UWOP_ALLOC_LARGE,
>> +    UWOP_ALLOC_SMALL,
>> +    UWOP_SET_FPREG,
>> +    UWOP_SAVE_NONVOL,
>> +    UWOP_SAVE_NONVOL_FAR,
>> +    UWOP_SAVE_XMM128,
>> +    UWOP_SAVE_XMM128_FAR,
>> +    UWOP_PUSH_MACHFRAME
>> +} UNWIND_CODE_OPS;
> 
> This typedef is confusing (different tag and type names) and not used.
> 
>> +typedef union _UNWIND_CODE
>> +{
>> +    struct
>> +    {
>> +        BYTE CodeOffset;
>> +        BYTE UnwindOp : 4;
>> +        BYTE OpInfo   : 4;
>> +    } u;
> 
> 'u' is confusing as an embedded structure name.
> 
>> +    USHORT FrameOffset;
>> +} UNWIND_CODE, *PUNWIND_CODE;
> 
> PUNWIND_CODE is not used.
> 
>> +typedef struct _UNWIND_INFO
>> +{
>> +    BYTE Version       : 3;
>> +    BYTE Flags         : 5;
>> +    BYTE SizeOfProlog;
>> +    BYTE CountOfCodes;
>> +    BYTE FrameRegister : 4;
>> +    BYTE FrameOffset   : 4;
>> +    UNWIND_CODE UnwindCode[1]; /* actually CountOfCodes (aligned) */
>> +/*
>> + *  union
>> + *  {
>> + *      OPTIONAL ULONG ExceptionHandler;
>> + *      OPTIONAL ULONG FunctionEntry;
>> + *  };
>> + *  OPTIONAL ULONG ExceptionData[];
>> + */
>> +} UNWIND_INFO, *PUNWIND_INFO;
> 
> PUNWIND_INFO is not used.

Thanks for the comments; I didn't realize these weren't used.

> 
>> +    buf[16] = 0xff;
>> +    buf[17] = 0x25;
>> +    *(ULONG *)&buf[18] = 0;
>> +    *(void **)&buf[22] = handler;
> 
> It would be helpful to provide an assembler mnemonic for the generated
> code above in the comment (/* jmp near */ in this case).
> 

Will do, thanks.



More information about the wine-devel mailing list