|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v9 16/27] x86, xsplice: Print payload's symbol name and payload name in backtraces
>>> On 26.04.16 at 13:06, <ross.lagerwall@xxxxxxxxxx> wrote:
> On 04/25/2016 04:35 PM, Konrad Rzeszutek Wilk wrote:
>> @@ -142,6 +145,55 @@ void *xsplice_symbols_lookup_by_name(const char
>> *symname)
>> return 0;
>> }
>>
>> +static const char *xsplice_symbols_lookup(unsigned long addr,
>> + unsigned long *symbolsize,
>> + unsigned long *offset,
>> + char *namebuf)
>> +{
>> + const struct payload *data;
>> + unsigned int i, best;
>> + const void *va = (const void *)addr;
>> + const char *n = NULL;
>> +
>> + /*
>> + * Only RCU locking since this list is only ever changed during apply
>> + * or revert context. And in case it dies there we need an safe list.
>> + */
>> + rcu_read_lock(&rcu_applied_lock);
>> + list_for_each_entry_rcu ( data, &applied_list, applied_list )
>> + {
>> + if ( va < data->text_addr &&
>> + va >= (data->text_addr + data->pages * PAGE_SIZE) )
>
> This calculation is wrong due to the use of void * and results in
> incorrect backtrace results.
When text_addr is void *, how is this calculation wrong then?
>> @@ -422,6 +475,13 @@ static int prepare_payload(struct payload *payload,
>> }
>> }
>>
>> + /* Setup the virtual region with proper data. */
>> + region = &payload->region;
>> +
>> + region->symbols_lookup = xsplice_symbols_lookup;
>> + region->start = payload->text_addr;
>> + region->end = payload->text_addr + payload->text_size;
>
> This calculation is wrong due to the use of void *.
And again - why?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |