bug-binutils
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]