Hello All,
I have a small problem with call32, after I make the call and the 32bit code is executed the parameter I am sending is incorrect, so evidently I am doing something incorrect.
Here is my 16bit code: dprintf(1,"Operation 16bit drive at %p\n",op->drive_g); extern void _cfunc32flat_xen_blk_op_read(struct disk_op_s *); return call32(_cfunc32flat_xen_blk_op_read,op,DISK_RET_EPARAM);
Here is the 32Bit code: int VISIBLE32INIT xen_blk_op_read(struct disk_op_s *op){ dprintf(1,"Xen Disk buffer %x lba %x count %d command %d\n",op->buf_fl,op->lba,op->count,op->command); dprintf(1,"Searching for drive, loc: %p\n",op->drive_g); struct xendrive_s * xendrive = container_of(op->drive_g, struct xendrive_s, drive); //the global struct is extracted if(xendrive==NULL) return -1; ... }
I know something is wrong because the output is like this: Operation 16bit drive at 0x0000d630 DEBUG call32: func 0x0f7e90a7 eax 832 err 1 Xen Disk buffer f000ff53 lba f000ff53 count -268370093 command 65363 Searching for drive, loc: 0xf000ff53
As you can see op->drive_g are located in different addreses in 16 and 32 bit modes.
Can someone help me out to find where the mistake is. The code seems to be valid so I guess I am passing the pointer wrongly.
Thanks,
Daniel