[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v5 11/28] xsplice: Implement support for applying/reverting/replacing patches.



>>> On 10.04.16 at 04:45, <konrad@xxxxxxxxxx> wrote:
> On Sat, Apr 09, 2016 at 10:36:00PM -0400, Konrad Rzeszutek Wilk wrote:
>> On Thu, Apr 07, 2016 at 09:43:38AM -0600, Jan Beulich wrote:
>> > >>> On 07.04.16 at 05:09, <konrad.wilk@xxxxxxxxxx> wrote:
>> > >> > +    uint8_t *old_ptr;
>> > >> > +
>> > >> > +    BUILD_BUG_ON(PATCH_INSN_SIZE > sizeof(func->undo));
>> > >> > +    BUILD_BUG_ON(PATCH_INSN_SIZE != (1 + sizeof val));
>> > >> > +
>> > >> > +    old_ptr = (uint8_t *)func->old_addr;
>> > >> 
>> > >> (Considering this cast, the "old_addr" member should be
>> > >> unsigned long (or void *), not uint64_t: The latest on ARM32
>> > >> such would otherwise cause problems.)
>> > > 
>> > > I has to be uint8_t to make the single byte modifications. Keep
>> > > also in mind that this file is only for x86.
>> > 
>> > old_addr can't reasonably be uint8_t, so I can only assume you're
>> > mixing up things here. (And yes, I do realize this is x86 code, but
>> > my reference to ARM32 was only mean to say that there you'll
>> > need to do something similar, and casting uint64_t to whatever
>> > kind of pointer type is not going to work without compiler warning.)
>> 
>> Way back .. when we spoke about the .xsplice.funcs structure
>> you recommended to make the types be either uintXX specific
>> or Elf types. I choose Elf types but then we realized that
>> ARM32 hypervisor would be involved which of course would have
>> a different size of the structure. So I went with uintXXX
>> to save a bit of headache (specifically those BUILD_BUG_ON
>> checks).
>> 
>> I can't see making the old_addr be unsigned long or void *,
>> which means going back to Elf types. And for ARM32 I will
>> have to deal with a different structure size. 
> 
> Oh gosh, that is going to be problem with our headers as
> I would be now exposing the 'xsplice_patch_func' structure
> in a public header which would depend on Elf_X types.

So how about uintptr_t? Not exactly the thing we do in public
headers already, but at least a possibility. Or else maybe
xen_ulong_t, albeit on ARM32 that again won't cast well to
pointer types.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.