diff mbox

[1/2] test/tls/tst-tls[6-8]: Fix build errors

Message ID 1391689162-1702-1-git-send-email-vgupta@synopsys.com
State Accepted, archived
Headers show

Commit Message

Vineet Gupta Feb. 6, 2014, 12:19 p.m. UTC
--------------->8-------------------
tst-tls7.c: In function 'do_test':
tst-tls7.c:39:57: error: 'struct link_map' has no member named 'l_tls_modid'
  modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
                                                         ^
tst-tls7.c:40:63: error: 'struct link_map' has no member named 'l_tls_modid'
       else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
                                                               ^
tst-tls7.c:45:52: error: 'struct link_map' has no member named 'l_tls_modid'
     ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
                                                    ^
make[2]: *** [tst-tls7] Error 1
--------------->8-------------------

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
---
 test/tls/tst-tls6.c |  7 +++----
 test/tls/tst-tls7.c |  7 +++----
 test/tls/tst-tls8.c | 21 ++++++++++-----------
 3 files changed, 16 insertions(+), 19 deletions(-)

Comments

Baruch Siach Feb. 6, 2014, 12:23 p.m. UTC | #1
Hi Vineet,

On Thu, Feb 06, 2014 at 05:49:21PM +0530, Vineet Gupta wrote:
> --------------->8-------------------
> tst-tls7.c: In function 'do_test':
> tst-tls7.c:39:57: error: 'struct link_map' has no member named 'l_tls_modid'
>   modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
>                                                          ^
> tst-tls7.c:40:63: error: 'struct link_map' has no member named 'l_tls_modid'
>        else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
>                                                                ^
> tst-tls7.c:45:52: error: 'struct link_map' has no member named 'l_tls_modid'
>      ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
>                                                     ^
> make[2]: *** [tst-tls7] Error 1
> --------------->8-------------------

I used a different approach to fix the same issue some while ago: 
http://article.gmane.org/gmane.comp.lib.uclibc.general/23449 . Does this work 
for you?

baruch

> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
> ---
>  test/tls/tst-tls6.c |  7 +++----
>  test/tls/tst-tls7.c |  7 +++----
>  test/tls/tst-tls8.c | 21 ++++++++++-----------
>  3 files changed, 16 insertions(+), 19 deletions(-)
> 
> diff --git a/test/tls/tst-tls6.c b/test/tls/tst-tls6.c
> index e692aca6b7c3..0ebc50737b3e 100644
> --- a/test/tls/tst-tls6.c
> +++ b/test/tls/tst-tls6.c
> @@ -38,13 +38,12 @@ do_test (void)
>  	 time.  The value of the first round is used.  */
>  #ifdef __UCLIBC__
>        if (modid == -1)
> -	modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
> -      else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
> -        != (size_t) modid)
> +	modid = ((struct dyn_elf *) h)->dyn->l_tls_modid;
> +      else if (((struct dyn_elf *)h)->dyn->l_tls_modid != (size_t) modid)
>  	{
>  	  printf ("round %d: modid now %zu, initially %d\n",
>  		  i,
> -		  ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
> +		  ((struct dyn_elf *)h)->dyn->l_tls_modid,
>  		  modid);
>  	  result = 1;
>  	}
> diff --git a/test/tls/tst-tls7.c b/test/tls/tst-tls7.c
> index 41da2708d34b..2dde9afa4935 100644
> --- a/test/tls/tst-tls7.c
> +++ b/test/tls/tst-tls7.c
> @@ -36,13 +36,12 @@ do_test (void)
>  	 time.  The value of the first round is used.  */
>  #ifdef __UCLIBC__
>        if (modid == -1)
> -	modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
> -      else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
> -        != (size_t) modid)
> +	modid = ((struct dyn_elf *) h)->dyn->l_tls_modid;
> +      else if (((struct dyn_elf *)h)->dyn->l_tls_modid != (size_t) modid)
>  	{
>  	  printf ("round %d: modid now %zu, initially %d\n",
>  		  i,
> -		  ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
> +		  ((struct dyn_elf *)h)->dyn->l_tls_modid,
>  		  modid);
>  	  result = 1;
>  	}
> diff --git a/test/tls/tst-tls8.c b/test/tls/tst-tls8.c
> index 2541609f1842..e0dd35bbebfc 100644
> --- a/test/tls/tst-tls8.c
> +++ b/test/tls/tst-tls8.c
> @@ -41,13 +41,12 @@ do_test (void)
>  	 time.  The value of the first round is used.  */
>  #ifdef __UCLIBC__
>        if (modid1 == (size_t) -1)
> -	modid1 = ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid;
> -      else if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
> -        != (size_t) modid1)
> +	modid1 = ((struct dyn_elf *) h1)->dyn->l_tls_modid;
> +      else if (((struct dyn_elf *)h1)->dyn->l_tls_modid != (size_t) modid1)
>  	{
>  	  printf ("round %d: modid now %zd, initially %zd\n",
>  		  i,
> -		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
> +		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
>  		  modid1);
>  	  result = 1;
>  	}
> @@ -85,13 +84,13 @@ do_test (void)
>  	 time.  The value of the first round is used.  */
>  #ifdef __UCLIBC__
>        if (modid2 == (size_t) -1)
> -	modid2 = ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid;
> -      else if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
> +	modid2 = ((struct dyn_elf *)h1)->dyn->l_tls_modid;
> +      else if (((struct dyn_elf *)h1)->dyn->l_tls_modid
>          != (size_t) modid2)
>  	{
>  	  printf ("round %d: modid now %zd, initially %zd\n",
>  		  i,
> -		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
> +		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
>  		  modid2);
>  	  result = 1;
>  	}
> @@ -139,12 +138,12 @@ do_test (void)
>  	 We make sure that the module gets assigned the same ID every
>  	 time.  The value of the first round is used.  */
>  #ifdef __UCLIBC__
> -      if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
> +      if (((struct dyn_elf *)h1)->dyn->l_tls_modid
>          != modid1)
>  	{
>  	  printf ("round %d: modid now %zd, initially %zd\n",
>  		  i,
> -		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
> +		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
>  		  modid1);
>  	  result = 1;
>  	}
> @@ -179,12 +178,12 @@ do_test (void)
>  	 We make sure that the module gets assigned the same ID every
>  	 time.  The value of the first round is used.  */
>  #ifdef __UCLIBC__
> -      if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
> +      if (((struct dyn_elf *)h1)->dyn->l_tls_modid
>          != modid2)
>  	{
>  	  printf ("round %d: modid now %zd, initially %zd\n",
>  		  i,
> -		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
> +		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
>  		  modid2);
>  	  result = 1;
>  	}
> -- 
> 1.8.3.2
Vineet Gupta Feb. 6, 2014, 12:42 p.m. UTC | #2
On Thursday 06 February 2014 05:53 PM, Baruch Siach wrote:
> Hi Vineet,
>
> On Thu, Feb 06, 2014 at 05:49:21PM +0530, Vineet Gupta wrote:
>> --------------->8-------------------
>> tst-tls7.c: In function 'do_test':
>> tst-tls7.c:39:57: error: 'struct link_map' has no member named 'l_tls_modid'
>>   modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
>>                                                          ^
>> tst-tls7.c:40:63: error: 'struct link_map' has no member named 'l_tls_modid'
>>        else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
>>                                                                ^
>> tst-tls7.c:45:52: error: 'struct link_map' has no member named 'l_tls_modid'
>>      ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
>>                                                     ^
>> make[2]: *** [tst-tls7] Error 1
>> --------------->8-------------------
> I used a different approach to fix the same issue some while ago: 
> http://article.gmane.org/gmane.comp.lib.uclibc.general/23449 . Does this work 
> for you?

It does - thanks and indeed smaller patch.
What's your opinion on the other one, does it make sense ?

-Vineet
Filippo Arcidiacono Feb. 6, 2014, 1:25 p.m. UTC | #3
On 2/6/2014 1:23 PM, Baruch Siach wrote:
> Hi Vineet,
>
> On Thu, Feb 06, 2014 at 05:49:21PM +0530, Vineet Gupta wrote:
>> --------------->8-------------------
>> tst-tls7.c: In function 'do_test':
>> tst-tls7.c:39:57: error: 'struct link_map' has no member named 'l_tls_modid'
>>    modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
>>                                                           ^
>> tst-tls7.c:40:63: error: 'struct link_map' has no member named 'l_tls_modid'
>>         else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
>>                                                                 ^
>> tst-tls7.c:45:52: error: 'struct link_map' has no member named 'l_tls_modid'
>>       ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
>>                                                      ^
>> make[2]: *** [tst-tls7] Error 1
>> --------------->8-------------------
> I used a different approach to fix the same issue some while ago:
> http://article.gmane.org/gmane.comp.lib.uclibc.general/23449 . Does this work
> for you?
I wonder it should be fixed time ago by commit 
d9c7e6a19ea2c96080f3bf7de069acf87c9a8a5d,
adding include path directive in Makefile.in.
>
> baruch
Filippo
>
>> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
>> ---
>>   test/tls/tst-tls6.c |  7 +++----
>>   test/tls/tst-tls7.c |  7 +++----
>>   test/tls/tst-tls8.c | 21 ++++++++++-----------
>>   3 files changed, 16 insertions(+), 19 deletions(-)
>>
>> diff --git a/test/tls/tst-tls6.c b/test/tls/tst-tls6.c
>> index e692aca6b7c3..0ebc50737b3e 100644
>> --- a/test/tls/tst-tls6.c
>> +++ b/test/tls/tst-tls6.c
>> @@ -38,13 +38,12 @@ do_test (void)
>>   	 time.  The value of the first round is used.  */
>>   #ifdef __UCLIBC__
>>         if (modid == -1)
>> -	modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
>> -      else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
>> -        != (size_t) modid)
>> +	modid = ((struct dyn_elf *) h)->dyn->l_tls_modid;
>> +      else if (((struct dyn_elf *)h)->dyn->l_tls_modid != (size_t) modid)
>>   	{
>>   	  printf ("round %d: modid now %zu, initially %d\n",
>>   		  i,
>> -		  ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
>> +		  ((struct dyn_elf *)h)->dyn->l_tls_modid,
>>   		  modid);
>>   	  result = 1;
>>   	}
>> diff --git a/test/tls/tst-tls7.c b/test/tls/tst-tls7.c
>> index 41da2708d34b..2dde9afa4935 100644
>> --- a/test/tls/tst-tls7.c
>> +++ b/test/tls/tst-tls7.c
>> @@ -36,13 +36,12 @@ do_test (void)
>>   	 time.  The value of the first round is used.  */
>>   #ifdef __UCLIBC__
>>         if (modid == -1)
>> -	modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
>> -      else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
>> -        != (size_t) modid)
>> +	modid = ((struct dyn_elf *) h)->dyn->l_tls_modid;
>> +      else if (((struct dyn_elf *)h)->dyn->l_tls_modid != (size_t) modid)
>>   	{
>>   	  printf ("round %d: modid now %zu, initially %d\n",
>>   		  i,
>> -		  ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
>> +		  ((struct dyn_elf *)h)->dyn->l_tls_modid,
>>   		  modid);
>>   	  result = 1;
>>   	}
>> diff --git a/test/tls/tst-tls8.c b/test/tls/tst-tls8.c
>> index 2541609f1842..e0dd35bbebfc 100644
>> --- a/test/tls/tst-tls8.c
>> +++ b/test/tls/tst-tls8.c
>> @@ -41,13 +41,12 @@ do_test (void)
>>   	 time.  The value of the first round is used.  */
>>   #ifdef __UCLIBC__
>>         if (modid1 == (size_t) -1)
>> -	modid1 = ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid;
>> -      else if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
>> -        != (size_t) modid1)
>> +	modid1 = ((struct dyn_elf *) h1)->dyn->l_tls_modid;
>> +      else if (((struct dyn_elf *)h1)->dyn->l_tls_modid != (size_t) modid1)
>>   	{
>>   	  printf ("round %d: modid now %zd, initially %zd\n",
>>   		  i,
>> -		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
>> +		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
>>   		  modid1);
>>   	  result = 1;
>>   	}
>> @@ -85,13 +84,13 @@ do_test (void)
>>   	 time.  The value of the first round is used.  */
>>   #ifdef __UCLIBC__
>>         if (modid2 == (size_t) -1)
>> -	modid2 = ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid;
>> -      else if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
>> +	modid2 = ((struct dyn_elf *)h1)->dyn->l_tls_modid;
>> +      else if (((struct dyn_elf *)h1)->dyn->l_tls_modid
>>           != (size_t) modid2)
>>   	{
>>   	  printf ("round %d: modid now %zd, initially %zd\n",
>>   		  i,
>> -		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
>> +		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
>>   		  modid2);
>>   	  result = 1;
>>   	}
>> @@ -139,12 +138,12 @@ do_test (void)
>>   	 We make sure that the module gets assigned the same ID every
>>   	 time.  The value of the first round is used.  */
>>   #ifdef __UCLIBC__
>> -      if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
>> +      if (((struct dyn_elf *)h1)->dyn->l_tls_modid
>>           != modid1)
>>   	{
>>   	  printf ("round %d: modid now %zd, initially %zd\n",
>>   		  i,
>> -		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
>> +		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
>>   		  modid1);
>>   	  result = 1;
>>   	}
>> @@ -179,12 +178,12 @@ do_test (void)
>>   	 We make sure that the module gets assigned the same ID every
>>   	 time.  The value of the first round is used.  */
>>   #ifdef __UCLIBC__
>> -      if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
>> +      if (((struct dyn_elf *)h1)->dyn->l_tls_modid
>>           != modid2)
>>   	{
>>   	  printf ("round %d: modid now %zd, initially %zd\n",
>>   		  i,
>> -		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
>> +		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
>>   		  modid2);
>>   	  result = 1;
>>   	}
>> -- 
>> 1.8.3.2
Baruch Siach Feb. 7, 2014, 4:40 a.m. UTC | #4
Hi Vineet,

On Thu, Feb 06, 2014 at 12:42:08PM +0000, Vineet Gupta wrote:
> On Thursday 06 February 2014 05:53 PM, Baruch Siach wrote:
> > Hi Vineet,
> >
> > On Thu, Feb 06, 2014 at 05:49:21PM +0530, Vineet Gupta wrote:
> >> --------------->8-------------------
> >> tst-tls7.c: In function 'do_test':
> >> tst-tls7.c:39:57: error: 'struct link_map' has no member named 'l_tls_modid'
> >>   modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
> >>                                                          ^
> >> tst-tls7.c:40:63: error: 'struct link_map' has no member named 'l_tls_modid'
> >>        else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
> >>                                                                ^
> >> tst-tls7.c:45:52: error: 'struct link_map' has no member named 'l_tls_modid'
> >>      ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
> >>                                                     ^
> >> make[2]: *** [tst-tls7] Error 1
> >> --------------->8-------------------
> > I used a different approach to fix the same issue some while ago: 
> > http://article.gmane.org/gmane.comp.lib.uclibc.general/23449 . Does this work 
> > for you?
> 
> It does - thanks and indeed smaller patch.
> What's your opinion on the other one, does it make sense ?

I haven't looked too deeply into it, but the fix looks correct. The original 
glibc version of this test (elf/tst-tls8.c) seems to need the same fix (with 
the uClibc specific part removed). You probably have better chance of having 
your patch reviewed (and applied) on the glibc list.

baruch
Baruch Siach Feb. 7, 2014, 4:43 a.m. UTC | #5
Hi Filippo,

On Thu, Feb 06, 2014 at 02:25:08PM +0100, Filippo Arcidiacono wrote:
> On 2/6/2014 1:23 PM, Baruch Siach wrote:
> >Hi Vineet,
> >
> >On Thu, Feb 06, 2014 at 05:49:21PM +0530, Vineet Gupta wrote:
> >>--------------->8-------------------
> >>tst-tls7.c: In function 'do_test':
> >>tst-tls7.c:39:57: error: 'struct link_map' has no member named 'l_tls_modid'
> >>   modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
> >>                                                          ^
> >>tst-tls7.c:40:63: error: 'struct link_map' has no member named 'l_tls_modid'
> >>        else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
> >>                                                                ^
> >>tst-tls7.c:45:52: error: 'struct link_map' has no member named 'l_tls_modid'
> >>      ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
> >>                                                     ^
> >>make[2]: *** [tst-tls7] Error 1
> >>--------------->8-------------------
> >I used a different approach to fix the same issue some while ago:
> >http://article.gmane.org/gmane.comp.lib.uclibc.general/23449 . Does this work
> >for you?
> I wonder it should be fixed time ago by commit
> d9c7e6a19ea2c96080f3bf7de069acf87c9a8a5d,
> adding include path directive in Makefile.in.

No. It's broken since a2fdd604d (link.h: guard TLS related internals of struct 
link_map with _LIBC).

baruch

> >>Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
> >>---
> >>  test/tls/tst-tls6.c |  7 +++----
> >>  test/tls/tst-tls7.c |  7 +++----
> >>  test/tls/tst-tls8.c | 21 ++++++++++-----------
> >>  3 files changed, 16 insertions(+), 19 deletions(-)
> >>
> >>diff --git a/test/tls/tst-tls6.c b/test/tls/tst-tls6.c
> >>index e692aca6b7c3..0ebc50737b3e 100644
> >>--- a/test/tls/tst-tls6.c
> >>+++ b/test/tls/tst-tls6.c
> >>@@ -38,13 +38,12 @@ do_test (void)
> >>  	 time.  The value of the first round is used.  */
> >>  #ifdef __UCLIBC__
> >>        if (modid == -1)
> >>-	modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
> >>-      else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
> >>-        != (size_t) modid)
> >>+	modid = ((struct dyn_elf *) h)->dyn->l_tls_modid;
> >>+      else if (((struct dyn_elf *)h)->dyn->l_tls_modid != (size_t) modid)
> >>  	{
> >>  	  printf ("round %d: modid now %zu, initially %d\n",
> >>  		  i,
> >>-		  ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
> >>+		  ((struct dyn_elf *)h)->dyn->l_tls_modid,
> >>  		  modid);
> >>  	  result = 1;
> >>  	}
> >>diff --git a/test/tls/tst-tls7.c b/test/tls/tst-tls7.c
> >>index 41da2708d34b..2dde9afa4935 100644
> >>--- a/test/tls/tst-tls7.c
> >>+++ b/test/tls/tst-tls7.c
> >>@@ -36,13 +36,12 @@ do_test (void)
> >>  	 time.  The value of the first round is used.  */
> >>  #ifdef __UCLIBC__
> >>        if (modid == -1)
> >>-	modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
> >>-      else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
> >>-        != (size_t) modid)
> >>+	modid = ((struct dyn_elf *) h)->dyn->l_tls_modid;
> >>+      else if (((struct dyn_elf *)h)->dyn->l_tls_modid != (size_t) modid)
> >>  	{
> >>  	  printf ("round %d: modid now %zu, initially %d\n",
> >>  		  i,
> >>-		  ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
> >>+		  ((struct dyn_elf *)h)->dyn->l_tls_modid,
> >>  		  modid);
> >>  	  result = 1;
> >>  	}
> >>diff --git a/test/tls/tst-tls8.c b/test/tls/tst-tls8.c
> >>index 2541609f1842..e0dd35bbebfc 100644
> >>--- a/test/tls/tst-tls8.c
> >>+++ b/test/tls/tst-tls8.c
> >>@@ -41,13 +41,12 @@ do_test (void)
> >>  	 time.  The value of the first round is used.  */
> >>  #ifdef __UCLIBC__
> >>        if (modid1 == (size_t) -1)
> >>-	modid1 = ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid;
> >>-      else if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
> >>-        != (size_t) modid1)
> >>+	modid1 = ((struct dyn_elf *) h1)->dyn->l_tls_modid;
> >>+      else if (((struct dyn_elf *)h1)->dyn->l_tls_modid != (size_t) modid1)
> >>  	{
> >>  	  printf ("round %d: modid now %zd, initially %zd\n",
> >>  		  i,
> >>-		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
> >>+		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
> >>  		  modid1);
> >>  	  result = 1;
> >>  	}
> >>@@ -85,13 +84,13 @@ do_test (void)
> >>  	 time.  The value of the first round is used.  */
> >>  #ifdef __UCLIBC__
> >>        if (modid2 == (size_t) -1)
> >>-	modid2 = ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid;
> >>-      else if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
> >>+	modid2 = ((struct dyn_elf *)h1)->dyn->l_tls_modid;
> >>+      else if (((struct dyn_elf *)h1)->dyn->l_tls_modid
> >>          != (size_t) modid2)
> >>  	{
> >>  	  printf ("round %d: modid now %zd, initially %zd\n",
> >>  		  i,
> >>-		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
> >>+		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
> >>  		  modid2);
> >>  	  result = 1;
> >>  	}
> >>@@ -139,12 +138,12 @@ do_test (void)
> >>  	 We make sure that the module gets assigned the same ID every
> >>  	 time.  The value of the first round is used.  */
> >>  #ifdef __UCLIBC__
> >>-      if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
> >>+      if (((struct dyn_elf *)h1)->dyn->l_tls_modid
> >>          != modid1)
> >>  	{
> >>  	  printf ("round %d: modid now %zd, initially %zd\n",
> >>  		  i,
> >>-		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
> >>+		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
> >>  		  modid1);
> >>  	  result = 1;
> >>  	}
> >>@@ -179,12 +178,12 @@ do_test (void)
> >>  	 We make sure that the module gets assigned the same ID every
> >>  	 time.  The value of the first round is used.  */
> >>  #ifdef __UCLIBC__
> >>-      if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
> >>+      if (((struct dyn_elf *)h1)->dyn->l_tls_modid
> >>          != modid2)
> >>  	{
> >>  	  printf ("round %d: modid now %zd, initially %zd\n",
> >>  		  i,
> >>-		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
> >>+		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
> >>  		  modid2);
> >>  	  result = 1;
> >>  	}
> >>-- 
> >>1.8.3.2
>
Filippo Arcidiacono Feb. 7, 2014, 7:03 a.m. UTC | #6
On 2/7/2014 5:43 AM, Baruch Siach wrote:
> Hi Filippo,
>
> On Thu, Feb 06, 2014 at 02:25:08PM +0100, Filippo Arcidiacono wrote:
>> On 2/6/2014 1:23 PM, Baruch Siach wrote:
>>> Hi Vineet,
>>>
>>> On Thu, Feb 06, 2014 at 05:49:21PM +0530, Vineet Gupta wrote:
>>>> --------------->8-------------------
>>>> tst-tls7.c: In function 'do_test':
>>>> tst-tls7.c:39:57: error: 'struct link_map' has no member named 'l_tls_modid'
>>>>    modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
>>>>                                                           ^
>>>> tst-tls7.c:40:63: error: 'struct link_map' has no member named 'l_tls_modid'
>>>>         else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
>>>>                                                                 ^
>>>> tst-tls7.c:45:52: error: 'struct link_map' has no member named 'l_tls_modid'
>>>>       ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
>>>>                                                      ^
>>>> make[2]: *** [tst-tls7] Error 1
>>>> --------------->8-------------------
>>> I used a different approach to fix the same issue some while ago:
>>> http://article.gmane.org/gmane.comp.lib.uclibc.general/23449 . Does this work
>>> for you?
>> I wonder it should be fixed time ago by commit
>> d9c7e6a19ea2c96080f3bf7de069acf87c9a8a5d,
>> adding include path directive in Makefile.in.
> No. It's broken since a2fdd604d (link.h: guard TLS related internals of struct
> link_map with _LIBC).
Ok.
This commit is only in master branch. I'm using the 0.9.33 stable 
branch, and no problem to compile these tests.
>
> baruch
>
>>>> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
>>>> ---
>>>>   test/tls/tst-tls6.c |  7 +++----
>>>>   test/tls/tst-tls7.c |  7 +++----
>>>>   test/tls/tst-tls8.c | 21 ++++++++++-----------
>>>>   3 files changed, 16 insertions(+), 19 deletions(-)
>>>>
>>>> diff --git a/test/tls/tst-tls6.c b/test/tls/tst-tls6.c
>>>> index e692aca6b7c3..0ebc50737b3e 100644
>>>> --- a/test/tls/tst-tls6.c
>>>> +++ b/test/tls/tst-tls6.c
>>>> @@ -38,13 +38,12 @@ do_test (void)
>>>>   	 time.  The value of the first round is used.  */
>>>>   #ifdef __UCLIBC__
>>>>         if (modid == -1)
>>>> -	modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
>>>> -      else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
>>>> -        != (size_t) modid)
>>>> +	modid = ((struct dyn_elf *) h)->dyn->l_tls_modid;
>>>> +      else if (((struct dyn_elf *)h)->dyn->l_tls_modid != (size_t) modid)
>>>>   	{
>>>>   	  printf ("round %d: modid now %zu, initially %d\n",
>>>>   		  i,
>>>> -		  ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
>>>> +		  ((struct dyn_elf *)h)->dyn->l_tls_modid,
>>>>   		  modid);
>>>>   	  result = 1;
>>>>   	}
>>>> diff --git a/test/tls/tst-tls7.c b/test/tls/tst-tls7.c
>>>> index 41da2708d34b..2dde9afa4935 100644
>>>> --- a/test/tls/tst-tls7.c
>>>> +++ b/test/tls/tst-tls7.c
>>>> @@ -36,13 +36,12 @@ do_test (void)
>>>>   	 time.  The value of the first round is used.  */
>>>>   #ifdef __UCLIBC__
>>>>         if (modid == -1)
>>>> -	modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
>>>> -      else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
>>>> -        != (size_t) modid)
>>>> +	modid = ((struct dyn_elf *) h)->dyn->l_tls_modid;
>>>> +      else if (((struct dyn_elf *)h)->dyn->l_tls_modid != (size_t) modid)
>>>>   	{
>>>>   	  printf ("round %d: modid now %zu, initially %d\n",
>>>>   		  i,
>>>> -		  ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
>>>> +		  ((struct dyn_elf *)h)->dyn->l_tls_modid,
>>>>   		  modid);
>>>>   	  result = 1;
>>>>   	}
>>>> diff --git a/test/tls/tst-tls8.c b/test/tls/tst-tls8.c
>>>> index 2541609f1842..e0dd35bbebfc 100644
>>>> --- a/test/tls/tst-tls8.c
>>>> +++ b/test/tls/tst-tls8.c
>>>> @@ -41,13 +41,12 @@ do_test (void)
>>>>   	 time.  The value of the first round is used.  */
>>>>   #ifdef __UCLIBC__
>>>>         if (modid1 == (size_t) -1)
>>>> -	modid1 = ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid;
>>>> -      else if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
>>>> -        != (size_t) modid1)
>>>> +	modid1 = ((struct dyn_elf *) h1)->dyn->l_tls_modid;
>>>> +      else if (((struct dyn_elf *)h1)->dyn->l_tls_modid != (size_t) modid1)
>>>>   	{
>>>>   	  printf ("round %d: modid now %zd, initially %zd\n",
>>>>   		  i,
>>>> -		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
>>>> +		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
>>>>   		  modid1);
>>>>   	  result = 1;
>>>>   	}
>>>> @@ -85,13 +84,13 @@ do_test (void)
>>>>   	 time.  The value of the first round is used.  */
>>>>   #ifdef __UCLIBC__
>>>>         if (modid2 == (size_t) -1)
>>>> -	modid2 = ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid;
>>>> -      else if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
>>>> +	modid2 = ((struct dyn_elf *)h1)->dyn->l_tls_modid;
>>>> +      else if (((struct dyn_elf *)h1)->dyn->l_tls_modid
>>>>           != (size_t) modid2)
>>>>   	{
>>>>   	  printf ("round %d: modid now %zd, initially %zd\n",
>>>>   		  i,
>>>> -		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
>>>> +		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
>>>>   		  modid2);
>>>>   	  result = 1;
>>>>   	}
>>>> @@ -139,12 +138,12 @@ do_test (void)
>>>>   	 We make sure that the module gets assigned the same ID every
>>>>   	 time.  The value of the first round is used.  */
>>>>   #ifdef __UCLIBC__
>>>> -      if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
>>>> +      if (((struct dyn_elf *)h1)->dyn->l_tls_modid
>>>>           != modid1)
>>>>   	{
>>>>   	  printf ("round %d: modid now %zd, initially %zd\n",
>>>>   		  i,
>>>> -		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
>>>> +		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
>>>>   		  modid1);
>>>>   	  result = 1;
>>>>   	}
>>>> @@ -179,12 +178,12 @@ do_test (void)
>>>>   	 We make sure that the module gets assigned the same ID every
>>>>   	 time.  The value of the first round is used.  */
>>>>   #ifdef __UCLIBC__
>>>> -      if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
>>>> +      if (((struct dyn_elf *)h1)->dyn->l_tls_modid
>>>>           != modid2)
>>>>   	{
>>>>   	  printf ("round %d: modid now %zd, initially %zd\n",
>>>>   		  i,
>>>> -		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
>>>> +		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
>>>>   		  modid2);
>>>>   	  result = 1;
>>>>   	}
>>>> -- 
>>>> 1.8.3.2
Bernhard Reutner-Fischer Feb. 15, 2014, 10:05 a.m. UTC | #7
On Thu, Feb 06, 2014 at 05:49:21PM +0530, Vineet Gupta wrote:
> --------------->8-------------------
> tst-tls7.c: In function 'do_test':
> tst-tls7.c:39:57: error: 'struct link_map' has no member named 'l_tls_modid'
>   modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
>                                                          ^
> tst-tls7.c:40:63: error: 'struct link_map' has no member named 'l_tls_modid'
>        else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
>                                                                ^
> tst-tls7.c:45:52: error: 'struct link_map' has no member named 'l_tls_modid'
>      ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
>                                                     ^
> make[2]: *** [tst-tls7] Error 1
> --------------->8-------------------

Applied.
Please fix this in glibc too, these tests are imported from glibc.
Baruch Siach Feb. 15, 2014, 8:42 p.m. UTC | #8
Hi Bernhard,

On Sat, Feb 15, 2014 at 11:05:51AM +0100, Bernhard Reutner-Fischer wrote:
> On Thu, Feb 06, 2014 at 05:49:21PM +0530, Vineet Gupta wrote:
> > --------------->8-------------------
> > tst-tls7.c: In function 'do_test':
> > tst-tls7.c:39:57: error: 'struct link_map' has no member named 'l_tls_modid'
> >   modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
> >                                                          ^
> > tst-tls7.c:40:63: error: 'struct link_map' has no member named 'l_tls_modid'
> >        else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
> >                                                                ^
> > tst-tls7.c:45:52: error: 'struct link_map' has no member named 'l_tls_modid'
> >      ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
> >                                                     ^
> > make[2]: *** [tst-tls7] Error 1
> > --------------->8-------------------
> 
> Applied.
> Please fix this in glibc too, these tests are imported from glibc.

This breakage is uClibc specific since a2fdd604d, nothing to do with glibc. 
See http://article.gmane.org/gmane.comp.lib.uclibc.general/23449 for an 
alternate solution that deviates less from the original glibc code.

baruch
diff mbox

Patch

diff --git a/test/tls/tst-tls6.c b/test/tls/tst-tls6.c
index e692aca6b7c3..0ebc50737b3e 100644
--- a/test/tls/tst-tls6.c
+++ b/test/tls/tst-tls6.c
@@ -38,13 +38,12 @@  do_test (void)
 	 time.  The value of the first round is used.  */
 #ifdef __UCLIBC__
       if (modid == -1)
-	modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
-      else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
-        != (size_t) modid)
+	modid = ((struct dyn_elf *) h)->dyn->l_tls_modid;
+      else if (((struct dyn_elf *)h)->dyn->l_tls_modid != (size_t) modid)
 	{
 	  printf ("round %d: modid now %zu, initially %d\n",
 		  i,
-		  ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
+		  ((struct dyn_elf *)h)->dyn->l_tls_modid,
 		  modid);
 	  result = 1;
 	}
diff --git a/test/tls/tst-tls7.c b/test/tls/tst-tls7.c
index 41da2708d34b..2dde9afa4935 100644
--- a/test/tls/tst-tls7.c
+++ b/test/tls/tst-tls7.c
@@ -36,13 +36,12 @@  do_test (void)
 	 time.  The value of the first round is used.  */
 #ifdef __UCLIBC__
       if (modid == -1)
-	modid = ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid;
-      else if (((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid
-        != (size_t) modid)
+	modid = ((struct dyn_elf *) h)->dyn->l_tls_modid;
+      else if (((struct dyn_elf *)h)->dyn->l_tls_modid != (size_t) modid)
 	{
 	  printf ("round %d: modid now %zu, initially %d\n",
 		  i,
-		  ((struct link_map *)((struct dyn_elf *)h)->dyn)->l_tls_modid,
+		  ((struct dyn_elf *)h)->dyn->l_tls_modid,
 		  modid);
 	  result = 1;
 	}
diff --git a/test/tls/tst-tls8.c b/test/tls/tst-tls8.c
index 2541609f1842..e0dd35bbebfc 100644
--- a/test/tls/tst-tls8.c
+++ b/test/tls/tst-tls8.c
@@ -41,13 +41,12 @@  do_test (void)
 	 time.  The value of the first round is used.  */
 #ifdef __UCLIBC__
       if (modid1 == (size_t) -1)
-	modid1 = ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid;
-      else if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
-        != (size_t) modid1)
+	modid1 = ((struct dyn_elf *) h1)->dyn->l_tls_modid;
+      else if (((struct dyn_elf *)h1)->dyn->l_tls_modid != (size_t) modid1)
 	{
 	  printf ("round %d: modid now %zd, initially %zd\n",
 		  i,
-		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
+		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
 		  modid1);
 	  result = 1;
 	}
@@ -85,13 +84,13 @@  do_test (void)
 	 time.  The value of the first round is used.  */
 #ifdef __UCLIBC__
       if (modid2 == (size_t) -1)
-	modid2 = ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid;
-      else if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
+	modid2 = ((struct dyn_elf *)h1)->dyn->l_tls_modid;
+      else if (((struct dyn_elf *)h1)->dyn->l_tls_modid
         != (size_t) modid2)
 	{
 	  printf ("round %d: modid now %zd, initially %zd\n",
 		  i,
-		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
+		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
 		  modid2);
 	  result = 1;
 	}
@@ -139,12 +138,12 @@  do_test (void)
 	 We make sure that the module gets assigned the same ID every
 	 time.  The value of the first round is used.  */
 #ifdef __UCLIBC__
-      if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
+      if (((struct dyn_elf *)h1)->dyn->l_tls_modid
         != modid1)
 	{
 	  printf ("round %d: modid now %zd, initially %zd\n",
 		  i,
-		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
+		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
 		  modid1);
 	  result = 1;
 	}
@@ -179,12 +178,12 @@  do_test (void)
 	 We make sure that the module gets assigned the same ID every
 	 time.  The value of the first round is used.  */
 #ifdef __UCLIBC__
-      if (((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid
+      if (((struct dyn_elf *)h1)->dyn->l_tls_modid
         != modid2)
 	{
 	  printf ("round %d: modid now %zd, initially %zd\n",
 		  i,
-		  ((struct link_map *)((struct dyn_elf *)h1)->dyn)->l_tls_modid,
+		  ((struct dyn_elf *)h1)->dyn->l_tls_modid,
 		  modid2);
 	  result = 1;
 	}