<div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Sep 25, 2020, 1:45 PM Kinsey Moore <<a href="mailto:kinsey.moore@oarcorp.com">kinsey.moore@oarcorp.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">-----Original Message-----<br>
From: Sebastian Huber <<a href="mailto:sebastian.huber@embedded-brains.de" target="_blank" rel="noreferrer">sebastian.huber@embedded-brains.de</a>> <br>
Sent: Friday, September 25, 2020 11:20<br>
To: Kinsey Moore <<a href="mailto:kinsey.moore@oarcorp.com" target="_blank" rel="noreferrer">kinsey.moore@oarcorp.com</a>>; <a href="mailto:devel@rtems.org" target="_blank" rel="noreferrer">devel@rtems.org</a><br>
Subject: Re: [PATCH v1 6/8] score: Add AArch64 port<br>
<br>
On 25/09/2020 17:27, Kinsey Moore wrote:<br>
<br>
> diff --git a/cpukit/include/rtems/score/tls.h <br>
> b/cpukit/include/rtems/score/tls.h<br>
> index 65a49d87be..8c15eee569 100644<br>
> --- a/cpukit/include/rtems/score/tls.h<br>
> +++ b/cpukit/include/rtems/score/tls.h<br>
> @@ -85,7 +85,7 @@ typedef struct TLS_Thread_control_block {<br>
>     struct TLS_Thread_control_block *tcb;<br>
>   #else /* !__i386__ */<br>
>     TLS_Dynamic_thread_vector *dtv;<br>
> -#if CPU_SIZEOF_POINTER == 4<br>
> +#if CPU_SIZEOF_POINTER == 4 || CPU_SIZEOF_POINTER == 8<br>
>     uintptr_t reserved;<br>
>   #endif<br>
>   #endif /* __i386__ */<br>
Are you sure this is correct? TLS_Dynamic_thread_vector *dtv; is 8 bytes in this case.<br>
[] <br>
Dropping this change causes sptls01 to fail. This was added pretty early in the implementation, so I've just had to go back and refresh my memories of the reasoning behind it which still may not be entirely accurate. Sptls01 fails without this patch because under AArch64/LP64, gcc and gdb expect a 16 byte offset to the TLS data segment. If this patch is not present, the TCB is half the size it needs to be and so getting a TLS variable address ends up indexing into the TCB+TLS data segment at a compiler-expected offset that does not correspond to the actual data layout. I adjusted this to match the compiler's offset expectations. There may be a better way to fix this issue, but this is the most appropriate location I could find that made the most sense. The biggest worry I have here is that this may break other architectures that also have 8 byte pointers. When I fix the file headers, I'll see if I can make this more specific to AArch64.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Make sure your explanation his into a comment above this. Memory fades quickly and that's why comments for odd cases like this need to be good. </div><div dir="auto"><br></div><div dir="auto">I'll be the first to admit that I have had to add comments after rediscovering the reason for some odd bit of code. Personally, I think these types of comments are part of the value RTEMS brings.</div><div dir="auto"><br></div><div dir="auto">--joel</div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Kinsey<br>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank" rel="noreferrer">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
</blockquote></div></div></div>