Gilles Chanteperdrix wrote:
> Jan Kiszka wrote:
>> Gilles Chanteperdrix wrote:
>>> Jan Kiszka wrote:
>>>> Gilles Chanteperdrix wrote:
>>>>> Jan Kiszka wrote:
>>>>>> Gilles Chanteperdrix wrote:
>>>>>>> Jan Kiszka wrote:
>>>>>>>> My compiler still complains about undefined 'y0' in the enabled case.
>>>>>>>>
>>>>>>>> I'll try to dig into a different direction now: Automatic generation
>>>>>>>> during build. This is what the kernel does as well when the 
>>>>>>>> preprocessor
>>>>>>>> gives up. Would even save the DECLARE and should make everyone happy.
>>>>>>> No, please nothing like that.
>>>>>> Because ... ?
>>>>>>
>>>>>> BTW, I'll extend the prepare stage. Defining the proper dependencies for
>>>>>> build-time generation gets too hairy.
>>>>>>
>>>>>>> This one works for me:
>>>>>>> #include <stdlib.h>
>>>>>>> #include <stdio.h>
>>>>>>>
>>>>>>> #define __name2(a, b) a ## b
>>>>>>> #define name2(a, b) __name2(a, b)
>>>>>>>
>>>>>>> #define DECLARE_ASSERT_SYMBOL(sym)                                      
>>>>>>> \
>>>>>>>         static const int XENO_OPT_DEBUG_##sym = 0; \
>>>>>>>         static const int CONFIG_XENO_OPT_DEBUG_##sym##0 = 0
>>>>>>>
>>>>>>> #define XENO_DEBUG(sym) \
>>>>>>>         (name2(CONFIG_XENO_OPT_DEBUG_##sym,0) > XENO_OPT_DEBUG_##sym)
>>>>>>>
>>>>>>> #define XENO_ASSERT(subsystem,cond,action)  do { \
>>>>>>>     if (unlikely(XENO_DEBUG(subsystem) && !(cond))) { \
>>>>>>>         xnarch_trace_panic_freeze(); \
>>>>>>>         xnlogerr("assertion failed at %s:%d (%s)\n", __FILE__, 
>>>>>>> __LINE__, (#cond)); \
>>>>>>>         xnarch_trace_panic_dump(); \
>>>>>>>         action; \
>>>>>>>     } \
>>>>>>> } while(0)
>>>>>>>
>>>>>>> DECLARE_ASSERT_SYMBOL(NUCLEUS);
>>>>>>>
>>>>>>> int main(void)
>>>>>>> {
>>>>>>>         if (XENO_DEBUG(NUCLEUS))
>>>>>>>                 printf("Hello\n");
>>>>>>> }
>>>>>>>
>>>>>>> Please try and send me the result of pre-processing if
>>>>>>> it does not work for you.
>>>>>>>
>>>>>> Find it attached.
>>>>> It looks like you are defining CONFIG_XENO_OPT_DEBUG_NUCLEUS to be y
>>>>> instead of 1.
>>>> Right, my bad.
>>>>
>>>> Works now, just leaving a trace when optimization is off.
>>> I believe the current approach would have the same problem. And in any
>> Nope, it's a pure preprocessor approach.
> 
> When you use if(XENO_DEBUG(foo)) you are using the compiler, not the
> preprocessor.

Right from that POV. XENO_DEBUG(foo) itself remains preprocessor stuff,
ie. never includes potentially non-static expressions. But this part is
academic if -O0 fails to build the kernel.

> 
> To see if there is a difference, you should try #if XENO_DEBUG(foo). And
> from what I see, in that case I do not have any trace of anything generated.
> 
>>>> diff --git a/scripts/prepare-kernel.sh b/scripts/prepare-kernel.sh
>>>> index 24b1f17..d8038e0 100755
>>>> Please let me know what precisely you dislike in this approach.
>>> You have to re-run prepare-kernel when you modify the source.
>> Normally, you have to anyway as you add some header or some other source
>> file during this process.
> 
> Not necessarily.

At worst, you run into a build error and repeat the step. Otherwise, the
next installation will fix it silently. It's much like the missing
DECLARE_ASSERT_SYMBOL detection and resolution, IMO even more convenient.

> 
>>> I do not like dynamic sources generation. Especially when we have a
>>> working solution based on C pre-processor macros.
>>>
>> My prepare-kernel approach also detects stall debug stuff: The uitron
>> use of XENO_DEBUG is not backed by any config option.
> 
> The current candidate would also detect the missing
> DECLARE_ASSERT_SYMBOL in that case.
> 

But not

#if XENO_DEBUG(DOES_NOT_EXIST)

Jan

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to