|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 for-next 1/2] x86/string: Clean up the declarations of __builtin_mem*()
>>> On 12.05.17 at 17:20, <andrew.cooper3@xxxxxxxxxx> wrote:
> On 12/05/17 15:52, Jan Beulich wrote:
>>>>> On 12.05.17 at 16:34, <andrew.cooper3@xxxxxxxxxx> wrote:
>>> Rather than #undef'ing macros to avoid altering the function names, use the
>>> method recommended by the C specification by enclosing the function name in
>>> brackets to avoid the macro being expanded. This means that optimisation
>>> opportunities continue to work in the rest of the translation unit.
>> That's the upside. The downside is that ...
>>
>>> --- a/xen/include/asm-x86/string.h
>>> +++ b/xen/include/asm-x86/string.h
>>> @@ -2,13 +2,12 @@
>>> #define __X86_STRING_H__
>>>
>>> #define __HAVE_ARCH_MEMCPY
>>> -#define memcpy(t,f,n) (__builtin_memcpy((t),(f),(n)))
>>> +#define memcpy(d, s, n) __builtin_memcpy(d, s, n)
>>>
>>> -/* Some versions of gcc don't have this builtin. It's non-critical anyway.
>>> */
>>> #define __HAVE_ARCH_MEMMOVE
>>> -extern void *memmove(void *dest, const void *src, size_t n);
>>> +#define memmove(d, s, n) __builtin_memmove(d, s, n)
>>>
>>> #define __HAVE_ARCH_MEMSET
>>> -#define memset(s,c,n) (__builtin_memset((s),(c),(n)))
>>> +#define memset(s, c, n) __builtin_memset(s, c, n)
>> with these kinds of #define-s (and with xen/string.h including
>> asm/string.h before the declarations, which don't get activated
>> anyway due to the __HAVE_ARCH_MEM* symbols being
>> #define-d in the context above) you can't use the symbols
>> in places where function pointers are wanted. IOW I'd prefer
>> the #undef-s to stay (and string.c explicitly calling the builtins)
>> and the macros to change to object like ones.
>>
>> An alternative would be to move the (or add x86 specific)
>> declarations, making sure the symbols are always available.
>
> Unfortunately, Clang objects to using object-like macros
>
> setup.c:1671:29: error: builtin functions must be directly called
> printk("Test: %zu", foo(__builtin_strlen));
Which makes sense, as they aren't actual functions.
> The only way this is going to work is in the same style as how the
> compiler header files already do it, which is in the style above. I
> will see about fixing the symbol declarations so they can be used as
> function pointers.
Thanks.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |