On 14/10/14 04:21, Gedare Bloom wrote:
cpukit/libcsupport/src/__assert.c52:43:
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
    rtems_fatal( RTEMS_FATAL_SOURCE_ASSERT, (rtems_fatal_code) &assert_context 
);

This code casts the address of assert_control into an
rtems_fatal_code, which is uint32_t. I assume it was done so one can
find the context while debugging, but it is non-portable behavior for
64-bit addresses.

We could fix this a few ways:
1) Make rtems_fatal_code a uintptr_t type so it gets the same width as a pointer
2) Make rtems_fatal accept a uintptr_t type so it can get a wider int
than rtems_fatal_code
3) Don't allow this abuse of rtems_fatal. A workaround could be to
pass the offset in the frame of the assert_control. Less clean for
debugging though.

4) use "unsigned long" for Internal_errors_t since this type has at least 32-bits in contrast to uintptr_t. This is already used for RBTree_Compare_result. See also static assertions in cpukit/score/src/rbtreeinsert.c. The rtems_task_argument has similar issues. Maybe we should add a base integer type suitable for pointer storage which is at least 32-bits wide.

--
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.hu...@embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to