Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com X-Authenticated: #14308112 Date: Thu, 10 Mar 2005 16:40:58 +0200 From: Pavel Tsekov X-X-Sender: ptsekov AT mordor To: cygwin AT cygwin DOT com cc: binutils AT sourceware DOT org Subject: Possible bug in gas/ld when using .linkonce Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-559023410-1939519850-1110465452=:624" Content-ID: X-Y-GMX-Trusted: 0 X-IsSubscribed: yes ---559023410-1939519850-1110465452=:624 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: Hello, I found this one while playing with Cygwin's code which takes care of seamless loading of dll functions (autoload.cc). It seems that when a symbol in a section marked .linkonce is referenced, wrong relocation info is generated for that symbol. For example if you have several symbols - symbol1, symbol2 and symbol3, - which are placed like this: offset name 0 symbol1 3 symbol2 15 symbol3 References to this symbols will be generated like this: symbol1 -> 0 symbol2 -> 6 symbol3 -> 30 I am attaching a testcase. linkonce.cc is the code which demonstrates the problem. linkonce1.cc is the same code but with .linkonce directives removed and doesn't suffer from the problem. Here is also the output of `objdump -r' on both object files. $ g++ -o linkonce.o -c linkonce.cc $ objdump -r linkonce.o linkonce.o: file format pe-i386 RELOCATION RECORDS FOR [.text]: OFFSET TYPE VALUE 00000015 DISP32 __alloca 0000001a DISP32 ___main RELOCATION RECORDS FOR [.some_section1_text]: OFFSET TYPE VALUE 00000001 dir32 .some_section1_text 00000007 dir32 _label_1 RELOCATION RECORDS FOR [.some_section2_text]: OFFSET TYPE VALUE 00000001 dir32 .some_section2_text 00000007 dir32 _label_2+0xffffffee RELOCATION RECORDS FOR [.some_section3_text]: OFFSET TYPE VALUE 00000001 dir32 .some_section3_text 00000007 dir32 _label_3+0xffffffe3 $ g++ -o linkonce1.o -c linkonce1.cc $ objdump -r linkonce1.o linkonce1.o: file format pe-i386 RELOCATION RECORDS FOR [.text]: OFFSET TYPE VALUE 00000015 DISP32 __alloca 0000001a DISP32 ___main RELOCATION RECORDS FOR [.some_section1_text]: OFFSET TYPE VALUE 00000001 dir32 .some_section1_text 00000007 dir32 .some_section RELOCATION RECORDS FOR [.some_section2_text]: OFFSET TYPE VALUE 00000001 dir32 .some_section2_text 00000007 dir32 .some_section RELOCATION RECORDS FOR [.some_section3_text]: OFFSET TYPE VALUE 00000001 dir32 .some_section3_text 00000007 dir32 .some_section ---559023410-1939519850-1110465452=:624 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="linkonce1.cc" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME="linkonce1.cc" X19hc21fXyAoIgkJCQkJCVxuXA0KICAuc2VjdGlvbgkuc29tZV9zZWN0aW9u LFwid1wiCQkJXG5cDQpfbGFiZWxfMToJCQkJCQlcblwNCiAgLmxvbmcJCTB4 MTIzNDU2NzgJCQkJXG5cDQogIC5hc2NpeglcIkhlbGxvLCBXb3JsZCFcIgkJ CVxuXA0KICAudGV4dAkJCQkJCQlcblwNCiIpOw0KDQpfX2FzbV9fICgiCQkJ CQkJXG5cDQogIC5zZWN0aW9uCS5zb21lX3NlY3Rpb24sXCJ3XCIJCQlcblwN Cl9sYWJlbF8yOgkJCQkJCVxuXA0KICAubG9uZwkJMHgxMjM0NTY3OAkJCQlc blwNCiAgLmFzY2l6CVwiYWJjZGVmXCIJCQkJXG5cDQogIC50ZXh0CQkJCQkJ CVxuXA0KIik7DQoNCl9fYXNtX18gKCIJCQkJCQlcblwNCiAgLnNlY3Rpb24J LnNvbWVfc2VjdGlvbixcIndcIgkJCVxuXA0KX2xhYmVsXzM6CQkJCQkJXG5c DQogIC5sb25nCQkweDEyMzQ1Njc4CQkJCVxuXA0KICAuYXNjaXoJXCJ4eXpc IgkJCQkJXG5cDQogIC50ZXh0CQkJCQkJCVxuXA0KIik7DQoNCg0KX19hc21f XyAoIgkJCQkJCVxuXA0KICAuc2VjdGlvbgkuc29tZV9zZWN0aW9uMV90ZXh0 LFwid3hcIgkJXG5cDQogIC5hbGlnbgk4CQkJCQlcblwNCiAgbW92bAkJKDFm KSwlZWF4CQkJCVxuXA0KICBjYWxsCQkqKCVlYXgpCQkJCQlcblwNCjE6Lmxv bmcJCV9sYWJlbF8xCQkJCVxuXA0KICAudGV4dAkJCQkJCQlcblwNCiIpOw0K DQpfX2FzbV9fICgiCQkJCQkJXG5cDQogIC5zZWN0aW9uCS5zb21lX3NlY3Rp b24yX3RleHQsXCJ3eFwiCQlcblwNCiAgLmFsaWduCTgJCQkJCVxuXA0KICBt b3ZsCQkoMWYpLCVlYXgJCQkJXG5cDQogIGNhbGwJCSooJWVheCkJCQkJCVxu XA0KMToubG9uZwkJX2xhYmVsXzIJCQkJXG5cDQogIC50ZXh0CQkJCQkJCVxu XA0KIik7DQoNCl9fYXNtX18gKCIJCQkJCQlcblwNCiAgLnNlY3Rpb24JLnNv bWVfc2VjdGlvbjNfdGV4dCxcInd4XCIJCVxuXA0KICAuYWxpZ24JOAkJCQkJ XG5cDQogIG1vdmwJCSgxZiksJWVheAkJCQlcblwNCiAgY2FsbAkJKiglZWF4 KQkJCQkJXG5cDQoxOi5sb25nCQlfbGFiZWxfMwkJCQlcblwNCiAgLnRleHQJ CQkJCQkJXG5cDQoiKTsNCg0KaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoq YXJndikNCnsNCiAgcmV0dXJuIDA7DQp9DQo= ---559023410-1939519850-1110465452=:624 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="linkonce.cc" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME="linkonce.cc" X19hc21fXyAoIgkJCQkJCVxuXA0KICAuc2VjdGlvbgkuc29tZV9zZWN0aW9u LFwid1wiCQkJXG5cDQogIC5saW5rb25jZQkJCQkJCVxuXA0KX2xhYmVsXzE6 CQkJCQkJXG5cDQogIC5sb25nCQkweDEyMzQ1Njc4CQkJCVxuXA0KICAuYXNj aXoJXCJIZWxsbywgV29ybGQhXCIJCQlcblwNCiAgLnRleHQJCQkJCQkJXG5c DQoiKTsNCg0KX19hc21fXyAoIgkJCQkJCVxuXA0KICAuc2VjdGlvbgkuc29t ZV9zZWN0aW9uLFwid1wiCQkJXG5cDQogIC5saW5rb25jZQkJCQkJCVxuXA0K X2xhYmVsXzI6CQkJCQkJXG5cDQogIC5sb25nCQkweDEyMzQ1Njc4CQkJCVxu XA0KICAuYXNjaXoJXCJhYmNkZWZcIgkJCQlcblwNCiAgLnRleHQJCQkJCQkJ XG5cDQoiKTsNCg0KX19hc21fXyAoIgkJCQkJCVxuXA0KICAuc2VjdGlvbgku c29tZV9zZWN0aW9uLFwid1wiCQkJXG5cDQogIC5saW5rb25jZQkJCQkJCVxu XA0KX2xhYmVsXzM6CQkJCQkJXG5cDQogIC5sb25nCQkweDEyMzQ1Njc4CQkJ CVxuXA0KICAuYXNjaXoJXCJ4eXpcIgkJCQkJXG5cDQogIC50ZXh0CQkJCQkJ CVxuXA0KIik7DQoNCg0KX19hc21fXyAoIgkJCQkJCVxuXA0KICAuc2VjdGlv bgkuc29tZV9zZWN0aW9uMV90ZXh0LFwid3hcIgkJXG5cDQogIC5hbGlnbgk4 CQkJCQlcblwNCiAgbW92bAkJKDFmKSwlZWF4CQkJCVxuXA0KICBjYWxsCQkq KCVlYXgpCQkJCQlcblwNCjE6LmxvbmcJCV9sYWJlbF8xCQkJCVxuXA0KICAu dGV4dAkJCQkJCQlcblwNCiIpOw0KDQpfX2FzbV9fICgiCQkJCQkJXG5cDQog IC5zZWN0aW9uCS5zb21lX3NlY3Rpb24yX3RleHQsXCJ3eFwiCQlcblwNCiAg LmFsaWduCTgJCQkJCVxuXA0KICBtb3ZsCQkoMWYpLCVlYXgJCQkJXG5cDQog IGNhbGwJCSooJWVheCkJCQkJCVxuXA0KMToubG9uZwkJX2xhYmVsXzIJCQkJ XG5cDQogIC50ZXh0CQkJCQkJCVxuXA0KIik7DQoNCl9fYXNtX18gKCIJCQkJ CQlcblwNCiAgLnNlY3Rpb24JLnNvbWVfc2VjdGlvbjNfdGV4dCxcInd4XCIJ CVxuXA0KICAuYWxpZ24JOAkJCQkJXG5cDQogIG1vdmwJCSgxZiksJWVheAkJ CQlcblwNCiAgY2FsbAkJKiglZWF4KQkJCQkJXG5cDQoxOi5sb25nCQlfbGFi ZWxfMwkJCQlcblwNCiAgLnRleHQJCQkJCQkJXG5cDQoiKTsNCg0KaW50IG1h aW4gKGludCBhcmdjLCBjaGFyICoqYXJndikNCnsNCiAgcmV0dXJuIDA7DQp9 DQo= ---559023410-1939519850-1110465452=:624 Content-Type: text/plain; charset=us-ascii -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ ---559023410-1939519850-1110465452=:624--