| Message ID | 1391689162-1702-1-git-send-email-vgupta@synopsys.com |
|---|---|
| State | Accepted, archived |
| Headers | show |
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
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
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
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
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 >
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
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.
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 --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; }
--------------->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(-)