This is the mail archive of the mailing list for the binutils project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Issue while using -rdynamic with binutils 2.22-8

On 30/01/14 10:43 AM, H.J. Lu wrote:
On Thu, Jan 30, 2014 at 7:09 AM, Makarand Pradhan
<>  wrote:
On 29/01/14 06:26 PM, H.J. Lu wrote:
On Wed, Jan 29, 2014 at 2:12 PM, H.J. Lu<>   wrote:
On Wed, Jan 29, 2014 at 1:31 PM, Makarand Pradhan
<>   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.
code links fine in 2.20.1-16, but fails in 2.22-8.

In 2.20.1-16:
# g++ -ffunction-sections -fdata-sections -rdynamic -Wl,--gc-sections

In 2.22-8:
# g++ -ffunction-sections -fdata-sections -rdynamic -Wl,--gc-sections
/tmp/ccU6re3d.o: In function `c1_type::c1_func1()':
t.cpp:(.text._ZN7c1_type8c1_func1Ev+0x12): undefined reference to
t.cpp:(.text._ZN7c1_type8c1_func1Ev+0x1e): undefined reference to
collect2: ld returned 1 exit status

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
build fails in the newer version.

Would appreciate any opinions if this is a bug or if I'm missing

Warm Rgds,

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="7 (wheezy)"

File: t.cpp

class c1_type
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

I think your code is invalid.  You need either to provide definition

static int int_1;

or drop -rdynamic.

Hi H.J. Lu,

Appreciate your replies.

The definition is intentionally dropped so that it is stripped by
-Wl,--gc-sections. Only when used in conjunction with -rdynamic it causes a

I could successfully use both -Wl,--gc-sections and -rdynamic in 2.20.1-16
but it fails in 2.22-8.

That's why I was wondering if any commit has caused this change. And if this
is intentional or a bug.

-rdynamic tells linker to make ALL global symbols available for
dynamic linking, including those unused.  You have

void c1_type::c1_func1()
int_1 = 25;

Linker will export it even if --gc-sections is used.  When -rdynamic
is used, --gc-sections will only discard unused LOCAL symbols.
This is the bug fixed in binutils 2.21.


Makarand Pradhan
Software Engineer Ruggedcom
Siemens Canada Limited
Industry Sector
300 Applewood Crescent,
Vaughan, ON, L4K 5C7
Tel: 905 482 4572

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]