Your gas changes caused weakref failures for cris-elf, supposedly others too

Khem Raj kraj@mvista.com
Tue Nov 8 19:01:00 GMT 2005


Hi Alexandre

This will cause glibc build failure. I am attaching the preprocessed 
sourcefile from glibc which
shows this problem. It comes from some equates defined in glibc
sysdeps/wordsize-32/symbol-hacks.c

Thanks

Khem


Alexandre Oliva wrote:

>On Nov  4, 2005, "Jan Beulich" <JBeulich@novell.com> wrote:
>
>  
>
>>Finally, Alexandre promised to address the problems (attached,
>>unfortunately not copied to the list), which is why I didn't spend
>>any time on addressing these (not to mention that I didn't really
>>have time to do so).  Meanwhile I suggest the following (probably I
>>could even consider this obvious and don't wait for approval...):
>>    
>>
>
>Yeah, sorry that it took me so long to get back to this.  Funny that
>I'd start working on the patch before even seeing this exchange of
>yours.  I had to update my source tree and re-create my patch such
>that it would apply after your check in :-)
>
>There's one bit I'm confused about.  It seems to be that, after your
>patch to flag redefinitions, we'd still accept:
>
>.set a, b
>a:
>
>although I'd think this should be rejected, just like other
>redefinitions, no?  I've included the change to reject this (and
>similar redefinitions of weakrefs) in my patch, which I'm checking in
>as obvious, although I'm a bit concerned that this one change is not
>entirely obvious, so if anyone disagrees with it, feel free to revert
>the bit in symbols.c to get it back in shape.
>
>Jan, I couldn't quite figure out the meaning of volatile and
>forward_ref, that I believe were introduced in your patch (I don't
>recall having seen them before).  Would you please document them in
>gas/doc, like the other fields and accessor functions?
>
>Tested on amd64-linux-gnu.  Checking in...
>
>  
>
>------------------------------------------------------------------------
>
>Index: gas/ChangeLog
>from  Alexandre Oliva  <aoliva@redhat.com>
>
>	* read.c (s_weakref): Do not permit redefinitions.
>	* symbols.c (colon): Do not permit redefinitions of equated
>	symbols.
>
>Index: gas/read.c
>===================================================================
>RCS file: /cvs/src/src/gas/read.c,v
>retrieving revision 1.111
>diff -u -p -r1.111 read.c
>--- gas/read.c 27 Oct 2005 07:40:07 -0000 1.111
>+++ gas/read.c 4 Nov 2005 19:36:10 -0000
>@@ -3178,6 +3178,14 @@ s_weakref (int ignore ATTRIBUTE_UNUSED)
> 
>   symbolP = symbol_find_or_make (name);
> 
>+  if (S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
>+    {
>+      as_bad (_("symbol `%s' is already defined"), name);
>+      *end_name = delim;
>+      ignore_rest_of_line ();
>+      return;
>+    }
>+
>   *end_name = delim;
> 
>   SKIP_WHITESPACE ();
>Index: gas/symbols.c
>===================================================================
>RCS file: /cvs/src/src/gas/symbols.c,v
>retrieving revision 1.68
>diff -u -p -r1.68 symbols.c
>--- gas/symbols.c 27 Oct 2005 07:40:07 -0000 1.68
>+++ gas/symbols.c 4 Nov 2005 19:36:12 -0000
>@@ -332,7 +332,8 @@ colon (/* Just seen "x:" - rattle symbol
> 	  local_symbol_set_frag (locsym, frag_now);
> 	  locsym->lsy_value = frag_now_fix ();
> 	}
>-      else if (!S_IS_DEFINED (symbolP) || S_IS_COMMON (symbolP))
>+      else if (!(S_IS_DEFINED (symbolP) || symbol_equated_p (symbolP))
>+	       || S_IS_COMMON (symbolP))
> 	{
> 	  if (S_GET_VALUE (symbolP) == 0)
> 	    {
>Index: gas/testsuite/ChangeLog
>from  Alexandre Oliva  <aoliva@redhat.com>
>
>	* gas/all/gas.exp: Remove weakref xfail.  Run weakref4.s.
>	* gas/all/weakref1.s: Move redefinition bits to...
>	* gas/all/weakref4.s: ... new file.
>	* gas/all/weakref1.d: Remove command moved to weakref1u.  Adjust
>	remaining command for leading tabs.  Regenerate.
>	* gas/all/weakref1l.d: Regenerate.
>	* gas/all/weakref1u.d: Likewise.
>	* gas/all/wealref1w.d: Likewise.
>
>Index: gas/testsuite/gas/all/gas.exp
>===================================================================
>RCS file: /cvs/src/src/gas/testsuite/gas/all/gas.exp,v
>retrieving revision 1.35
>diff -u -p -r1.35 gas.exp
>--- gas/testsuite/gas/all/gas.exp 4 Nov 2005 13:25:59 -0000 1.35
>+++ gas/testsuite/gas/all/gas.exp 4 Nov 2005 19:36:19 -0000
>@@ -256,20 +256,16 @@ if { ![istarget "i960-*-*"] } {
> case $target_triplet in {
>     { z80-*-* } { }
>     default {
>-	setup_xfail *-*-*
> 	run_dump_test weakref1
>-	setup_xfail *-*-*
> 	run_dump_test weakref1g
>-	setup_xfail *-*-*
> 	run_dump_test weakref1l
>-	setup_xfail *-*-*
> 	run_dump_test weakref1u
>-	setup_xfail *-*-*
> 	run_dump_test weakref1w
>     }
> }
> gas_test_error "weakref2.s" "" "e: would close weakref loop: e => a => b => c => d => e"
> gas_test_error "weakref3.s" "" "a: would close weakref loop: a => b => c => d => e => a"
>+gas_test_error "weakref4.s" "" "is already defined"
> 
> load_lib gas-dg.exp
> dg-init
>Index: gas/testsuite/gas/all/weakref1.d
>===================================================================
>RCS file: /cvs/src/src/gas/testsuite/gas/all/weakref1.d,v
>retrieving revision 1.1
>diff -u -p -r1.1 weakref1.d
>--- gas/testsuite/gas/all/weakref1.d 24 Oct 2005 17:51:42 -0000 1.1
>+++ gas/testsuite/gas/all/weakref1.d 4 Nov 2005 19:36:19 -0000
>@@ -11,9 +11,7 @@ OFFSET +TYPE +VALUE *
> # the rest of this file is generated with the following script:
> # # script begin
> # echo \#...
>-# sed -n 's:^\.weakref .*, \(\(u\|\(w\)\).*\)$:.*( \3 |\(sec  0\)).* \1:p' weakref1.s | uniq | while read line; do echo "$line"; echo "#..."; done
>-
>-# sed -n 's:^\.long \(W\|\)\(.*[^a-z]\)[a-z]*\(\| - .*\)$:\2:p' weakref1.s | sed -e 's,^[lg].*,(&|\\.text)(\\+0x[0-9a-f]+)?,' | sed 's,^,[0-9a-f]+ [^ ]*  +,'
>+# sed -n 's:^[ 	]*\.long \(W\|\)\(.*[^a-z]\)[a-z]*\(\| - .*\)$:\2:p' weakref1.s | sed -e 's,^[lg].*,(&|\\.text)(\\+0x[0-9a-f]+)?,' | sed 's,^,[0-9a-f]+ [^ ]*  +,'
> # # script output:
> #...
> [0-9a-f]+ [^ ]*  +wa1
>@@ -71,8 +69,6 @@ OFFSET +TYPE +VALUE *
> [0-9a-f]+ [^ ]*  +ww9
> [0-9a-f]+ [^ ]*  +ww10
> [0-9a-f]+ [^ ]*  +ww10
>-[0-9a-f]+ [^ ]*  +um2
>-[0-9a-f]+ [^ ]*  +wm3
> [0-9a-f]+ [^ ]*  +um5
> [0-9a-f]+ [^ ]*  +wm6
> [0-9a-f]+ [^ ]*  +wm7
>@@ -87,18 +83,6 @@ OFFSET +TYPE +VALUE *
> [0-9a-f]+ [^ ]*  +uh8
> [0-9a-f]+ [^ ]*  +uh9
> [0-9a-f]+ [^ ]*  +uh9
>-[0-9a-f]+ [^ ]*  +(lr1|\.text)(\+0x[0-9a-f]+)?
>-[0-9a-f]+ [^ ]*  +(lr1|\.text)(\+0x[0-9a-f]+)?
>-[0-9a-f]+ [^ ]*  +(lr2|\.text)(\+0x[0-9a-f]+)?
>-[0-9a-f]+ [^ ]*  +(lr2|\.text)(\+0x[0-9a-f]+)?
>-[0-9a-f]+ [^ ]*  +wr3
>-[0-9a-f]+ [^ ]*  +wr3
>-[0-9a-f]+ [^ ]*  +wr4
>-[0-9a-f]+ [^ ]*  +wr5
>-[0-9a-f]+ [^ ]*  +(lr6|\.text)(\+0x[0-9a-f]+)?
>-[0-9a-f]+ [^ ]*  +ur6
>-[0-9a-f]+ [^ ]*  +(lr7|\.text)(\+0x[0-9a-f]+)?
>-[0-9a-f]+ [^ ]*  +(lr7|\.text)(\+0x[0-9a-f]+)?
> [0-9a-f]+ [^ ]*  +(ld1|\.text)(\+0x[0-9a-f]+)?
> [0-9a-f]+ [^ ]*  +(ld2|\.text)(\+0x[0-9a-f]+)?
> [0-9a-f]+ [^ ]*  +(ld3|\.text)(\+0x[0-9a-f]+)?
>Index: gas/testsuite/gas/all/weakref1.s
>===================================================================
>RCS file: /cvs/src/src/gas/testsuite/gas/all/weakref1.s,v
>retrieving revision 1.1
>diff -u -p -r1.1 weakref1.s
>--- gas/testsuite/gas/all/weakref1.s 24 Oct 2005 17:51:42 -0000 1.1
>+++ gas/testsuite/gas/all/weakref1.s 4 Nov 2005 19:36:19 -0000
>@@ -126,17 +126,6 @@ l:
> 	.weak ww10
> 
> /* m# test multiple weakrefs */
>-	.weakref Wnm1, nm1
>-	.weakref Wnm1, nm1
>-
>-	.weakref Wum2, um2
>-	.weakref Wum2, um2
>-	.long um2
>-
>-	.weakref Wwm3, wm3
>-	.weakref Wwm3, wm3
>-	.long Wwm3
>-
> 	.weakref Wnm4a, nm4
> 	.weakref Wnm4b, nm4
> 
>@@ -197,40 +186,6 @@ l:
> 	.weakref Wuh9a, uh9
> 	.long uh9
> 
>-/* r# weakref redefinitions, to and from */
>-	.weakref lr1, nr1
>-	.long lr1
>-	.set lr1, l
>-	.long lr1
>-
>-	.long lr2
>-	.weakref lr2, nr2
>-	.set lr2, l
>-	.long lr2
>-
>-	.set Wwr3, l
>-	.long Wwr3
>-	.weakref Wwr3, wr3
>-	.long Wwr3
>-
>-	.set Wwr4, l
>-	.weakref Wwr4, wr4
>-	.long Wwr4
>-
>-	.set Wwr5, l
>-	.long Wwr5
>-	.weakref Wwr5, wr5
>-
>-	.weakref lr6, ur6
>-	.long lr6
>-	.set lr6, l
>-	.long ur6
>-
>-	.weakref lr7, nr7
>-	.long lr7
>-lr7:
>-	.long lr7
>-
> /* d# target symbol definitions */
> 	.weakref Wld1, ld1
> 	.long Wld1
>Index: gas/testsuite/gas/all/weakref1l.d
>===================================================================
>RCS file: /cvs/src/src/gas/testsuite/gas/all/weakref1l.d,v
>retrieving revision 1.1
>diff -u -p -r1.1 weakref1l.d
>--- gas/testsuite/gas/all/weakref1l.d 24 Oct 2005 17:51:42 -0000 1.1
>+++ gas/testsuite/gas/all/weakref1l.d 4 Nov 2005 19:36:19 -0000
>@@ -13,14 +13,6 @@
> #...
> .* t l
> #...
>-.* t lr1
>-#...
>-.* t lr2
>-#...
>-.* t lr6
>-#...
>-.* t lr7
>-#...
> .* t ld1
> #...
> .* t ld2
>Index: gas/testsuite/gas/all/weakref1u.d
>===================================================================
>RCS file: /cvs/src/src/gas/testsuite/gas/all/weakref1u.d,v
>retrieving revision 1.1
>diff -u -p -r1.1 weakref1u.d
>--- gas/testsuite/gas/all/weakref1u.d 24 Oct 2005 17:51:42 -0000 1.1
>+++ gas/testsuite/gas/all/weakref1u.d 4 Nov 2005 19:36:19 -0000
>@@ -39,15 +39,11 @@
> #...
> .* U uc9
> #...
>-.* U um2
>-#...
> .* U um5
> #...
> .* U uh8
> #...
> .* U uh9
> #...
>-.* U ur6
>-#...
> .* U ud5
> #pass
>Index: gas/testsuite/gas/all/weakref1w.d
>===================================================================
>RCS file: /cvs/src/src/gas/testsuite/gas/all/weakref1w.d,v
>retrieving revision 1.1
>diff -u -p -r1.1 weakref1w.d
>--- gas/testsuite/gas/all/weakref1w.d 24 Oct 2005 17:51:42 -0000 1.1
>+++ gas/testsuite/gas/all/weakref1w.d 4 Nov 2005 19:36:19 -0000
>@@ -36,8 +36,6 @@
> #...
> .* w ww10
> #...
>-.* w wm3
>-#...
> .* w wm6
> #...
> .* w wm7
>@@ -55,10 +53,4 @@
> .* w wh6
> #...
> .* w wh7
>-#...
>-.* w wr3
>-#...
>-.* w wr4
>-#...
>-.* w wr5
> #pass
>Index: gas/testsuite/gas/all/weakref4.s
>===================================================================
>RCS file: gas/testsuite/gas/all/weakref4.s
>diff -N gas/testsuite/gas/all/weakref4.s
>--- /dev/null	1 Jan 1970 00:00:00 -0000
>+++ gas/testsuite/gas/all/weakref4.s 4 Nov 2005 19:36:19 -0000
>@@ -0,0 +1,45 @@
>+/* m# test multiple weakrefs */
>+	.weakref Wnm1, nm1
>+	.weakref Wnm1, nm1
>+
>+	.weakref Wum2, um2
>+	.weakref Wum2, um2
>+	.long um2
>+
>+	.weakref Wwm3, wm3
>+	.weakref Wwm3, wm3
>+	.long Wwm3
>+
>+/* r# weakref redefinitions, to and from */
>+	.weakref lr1, nr1
>+	.long lr1
>+	.set lr1, l
>+	.long lr1
>+
>+	.long lr2
>+	.weakref lr2, nr2
>+	.set lr2, l
>+	.long lr2
>+
>+	.set Wwr3, l
>+	.long Wwr3
>+	.weakref Wwr3, wr3
>+	.long Wwr3
>+
>+	.set Wwr4, l
>+	.weakref Wwr4, wr4
>+	.long Wwr4
>+
>+	.set Wwr5, l
>+	.long Wwr5
>+	.weakref Wwr5, wr5
>+
>+	.weakref lr6, ur6
>+	.long lr6
>+	.set lr6, l
>+	.long ur6
>+
>+	.weakref lr7, nr7
>+	.long lr7
>+lr7:
>+	.long lr7
>  
>
>------------------------------------------------------------------------
>
>
>  
>

-- 
Khem Raj <kraj@mvista.com>
MontaVista Software, Inc.
www.mvista.com

-------------- next part --------------
A non-text attachment was scrubbed...
Name: tr-e.c
Type: text/x-csrc
Size: 55771 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20051108/0fa1136f/attachment.bin>


More information about the Binutils mailing list