This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: Issue while using -rdynamic with binutils 2.22-8
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Makarand Pradhan <makarandpradhan at ruggedcom dot com>, Alan Modra <amodra at gmail dot com>
- Cc: Binutils <binutils at sourceware dot org>
- Date: Wed, 29 Jan 2014 15:26:41 -0800
- Subject: Re: Issue while using -rdynamic with binutils 2.22-8
- Authentication-results: sourceware.org; auth=none
- References: <CAMe9rOp8H_9To8ytZg10Kf=CmhNRfvDqHkcsimgosB8j9w5PJg at mail dot gmail dot com>
On Wed, Jan 29, 2014 at 2:12 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Wed, Jan 29, 2014 at 1:31 PM, Makarand Pradhan
> <makarandpradhan@ruggedcom.com> wrote:
>> Hi All,
>>
>> We are in the process of migrating from binutils 2.20.1-16 to 2.22-8.
>>
>> I notice an issue while using linker option -rdynamic. Details below:
>>
>> I'm using the sample code given at the end of this email for the test. The
>> code links fine in 2.20.1-16, but fails in 2.22-8.
>>
>> e.g.:
>> In 2.20.1-16:
>> # g++ -ffunction-sections -fdata-sections -rdynamic -Wl,--gc-sections t.cpp
>> #
>>
>> In 2.22-8:
>> # g++ -ffunction-sections -fdata-sections -rdynamic -Wl,--gc-sections t.cpp
>> /tmp/ccU6re3d.o: In function `c1_type::c1_func1()':
>> t.cpp:(.text._ZN7c1_type8c1_func1Ev+0x12): undefined reference to
>> `c1_type::int_1'
>> t.cpp:(.text._ZN7c1_type8c1_func1Ev+0x1e): undefined reference to
>> `c1_type::int_1'
>> collect2: ld returned 1 exit status
>>
>> Problem:
>> The unused code is supposed to be stripped of by -Wl,--gc-sections. When
>> used alone it works as expected. All the same when paied with ïrdynamic the
>> build fails in the newer version.
>>
>> Would appreciate any opinions if this is a bug or if I'm missing anything.
>>
>> Warm Rgds,
>> Makarand.
>>
>> System configuration:
>> # uname -a
>> Linux makarandpradhan-ppc 3.2.0-0.bpo.4-powerpc64 #1 SMP Debian
>> 3.2.41-2+deb7u2~bpo60+1 ppc GNU/Linux # cat /etc/*release
>> PRETTY_NAME="Debian GNU/Linux 7 (wheezy)"
>> NAME="Debian GNU/Linux"
>> VERSION_ID="7"
>> VERSION="7 (wheezy)"
>> ID=debian
>> ANSI_COLOR="1;31"
>> HOME_URL="http://www.debian.org/"
>> SUPPORT_URL="http://www.debian.org/support/"
>> BUG_REPORT_URL="http://bugs.debian.org/"
>>
>>
>> File: t.cpp
>> #include <stdio.h>
>>
>> class c1_type
>> {
>> public:
>> static int int_1;
>>
>> void c1_func1(void);
>> };
>>
>> void c1_type::c1_func1()
>> {
>> int_1 = 25;
>> }
>>
>> int main()
>> {
>> return 0;
>> }
>>
>
> This regression is caused by
>
> https://sourceware.org/ml/binutils/2011-11/msg00056.html
>
I think your code is invalid. You need either to provide definition
for
static int int_1;
or drop -rdynamic.
--
H.J.