[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug ld/15469] New: GNU LD incorrectly binds weakref to a random symbol
From: |
hubicka at gcc dot gnu.org |
Subject: |
[Bug ld/15469] New: GNU LD incorrectly binds weakref to a random symbol when weakref target is taken away by linker plugin |
Date: |
Wed, 15 May 2013 15:01:22 +0000 |
http://sourceware.org/bugzilla/show_bug.cgi?id=15469
Bug #: 15469
Summary: GNU LD incorrectly binds weakref to a random symbol
when weakref target is taken away by linker plugin
Product: binutils
Version: unspecified
Status: NEW
Severity: normal
Priority: P2
Component: ld
AssignedTo: address@hidden
ReportedBy: address@hidden
Classification: Unclassified
GCC revision r198926 is needed to reproduce this bug.
evans:/abuild/jh/trunk-3/build-inst11-check/gcc/:[0]# cat a.c
/* { dg-lto-do run } */
int first = 0;
void abort (void);
int second = 0;
void callmealias (void)
{
if (!first || !second)
abort ();
}
void callmefirst (void)
{
if (first)
abort();
first = 1;
}
void callmesecond (void)
{
if (!first)
abort();
if (second)
abort();
second = 1;
}
main()
{
c();
b();
return 0;
}
evans:/abuild/jh/trunk-3/build-inst11-check/gcc/:[0]# cat b.c
extern void callmesecond();
static void callmealias() __attribute__((weakref ("callmesecond")));
b()
{
callmealias();
}
evans:/abuild/jh/trunk-3/build-inst11-check/gcc/:[0]# cat c.c
extern void callmefirst();
static void callmealias() __attribute__((weakref ("callmefirst")));
c()
{
callmealias();
}
evans:/abuild/jh/trunk-3/build-inst11-check/gcc/:[0]# ./xgcc -B ./ -O2 -flto
-flto-partition=none -fuse-linker-plugin -fno-fat-lto-objects ?.c -g
-fdump-ipa-all
leads to working segfaulting binary with gold and infinite loop with GNU LD.
There is bug in GCC that optimize away the targets of weakrefs (callmefirst and
callmesecond) but it keeps the weakrefs. Gold correctly makes the weakref
target to be NULL, while GNU LD binds it to other function causing the infinite
loop.
I believe GNU LD ought to be fixed.
--
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
- [Bug ld/15469] New: GNU LD incorrectly binds weakref to a random symbol when weakref target is taken away by linker plugin,
hubicka at gcc dot gnu.org <=