Hi Kees,
On 1/4/19 10:18 PM, Kees Bakker wrote:
In a lot of our code sched_active_thread is converted into
a non-volatile pointer. Is that correct? Here [1] it is described
that such conversion is undefined behavior.
My understanding is that `sched_active_thread` is volatile in a thread
context, but not in the kernel context. Therefore I thought that
discarding the qualifier in code that runs in the scheduler should be
OK, although a bit dirty. Now, if you tell me it's undefined behavior
then it is NOT OK.
I had thought of two ways to fix this:
* Linker-level aliasing: define `sched_active_thread` once (in the
scheduler, as non volatile) and declare it as `extern volatile` in those
headers that are seen by user applications, and as `extern` in headers
seen by the kernel.
* C-level aliasing: redefine sched_active_thread as a union of a
volatile and non-volatile.
AFAICT neither of those ways of accessing should result in undefined
behavior, as there as no casts being performed. What do you think?
Regards,
Juan.
_______________________________________________
devel mailing list
devel@riot-os.org
https://lists.riot-os.org/mailman/listinfo/devel