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.

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.

>> 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.

-- 
                                            Gilles.

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

Reply via email to