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
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core