GSoC Project | Basic Support for Trace Compass

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Aug 6 05:01:13 UTC 2019


On 06/08/2019 06:37, Ravindra Kumar Meena wrote:
>     No, using sprintf() is not the right way to do this. Please try to
>     understand the referenced code section. The string is converted char by
>     char into a sequence of integers. You have to reverse this and convert
>     an integer into a sequence of chars.
> 
>      >     3. You don't need extra memcpy() calls, just store the string
>     directly
>      >     in ctx->thread_names[api_id][thread_id]. The first
>      >     RTEMS_RECORD_THREAD_NAME uses
>      >     ctx->thread_names[api_id][thread_id][0..7], the second uses
>      >     ctx->thread_names[api_id][thread_id][8..15]. The third and
>     later are an
>      >     error, just ignore it.
>      >
>      > We can store the 16 char all at once then why are we doing this
>     in two
>      > parts.
> 
>     You get the name fragments event by event. When you receive the first
>     name you don't know how many fragments will come in total.
> 
>      >
>      > My approach is like this:
>      > Get the api_id from thread_id and for the same api_id increase the
>      > thread_id counter and store the string whenever new
>      > RTEMS_RECORD_THREAD_NAME is received.
>      > eg.
>      > <api_id=0><thread_id=0><thread_name>
>      > <api_id=0><thread_id=1><thread_name>
>      > <api_id=0><thread_id=2><thread_name>
>      >
>      > <api_id=1><thread_id=0><thread_name>
>      > <api_id=1><thread_id=1><thread_name>
>      > <api_id=1><thread_id=2><thread_name>
> 
>     This makes no sense to me. The thread id is fixed for a sequence of
>     thread name events. From the thread id you get the API index and the
>     object index.
> 
> 
> Have made changes. Simplified the code.
> https://github.com/rmeena840/rtems-tools/commit/9e09be40db85e4e903118f8eb5eb1ea1e41baf46

Yes, this moves into the right direction:

+      for( i = 0; i < THREAD_NAME_SIZE - 1; i++ ){
+        if( cctx->thread_names[ api_id ][ thread_id ][ i ] == 0x00 ){
+          cctx->thread_names[ api_id ][ thread_id ][ i ] = ( 
thread_name  & 0xff );
+          thread_name = ( thread_name >> 8 );
+        }
+      }

On a 32-bit target you may get up to 4 RTEMS_RECORD_THREAD_NAME events, 
on a 64-bit target you may get up to 2 RTEMS_RECORD_THREAD_NAME events.

Your code overwrites the data from previous name events and only the 
last one is visible. You have to add the name index (i) to thread_id_name.

-- 
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.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.



More information about the devel mailing list