[llvm-bugs] [Bug 26818] New: lld incorrectly resolves function pointer relocation in dso

via llvm-bugs llvm-bugs at lists.llvm.org
Wed Mar 2 11:43:45 PST 2016


https://llvm.org/bugs/show_bug.cgi?id=26818

            Bug ID: 26818
           Summary: lld incorrectly resolves function pointer relocation
                    in dso
           Product: lld
           Version: unspecified
          Hardware: PC
                OS: FreeBSD
            Status: NEW
          Severity: normal
          Priority: P
         Component: All Bugs
          Assignee: unassignedbugs at nondot.org
          Reporter: emaste at freebsd.org
                CC: llvm-bugs at lists.llvm.org
            Blocks: 23214
    Classification: Unclassified

Consider this test program:

% cat lib.c
#include <stdio.h>

int(*fp)(const char *, ...) = printf;

void
fn(void)
{
        fp("hello %s\n", "world");
}

% cat main.c
void fn(void);

int
main(int argc, char *argv[])
{
        fn();
}

Linking with ld.bfd:
% cc -fPIC -shared -o lib.so lib.c
% cc -fPIC -Wl,-rpath=. lib.so main.c
% ./a.out
hello world

And there's a relocation for 'fp' for printf:

% readelf -s lib.so | grep fp
     7: 0000000000200808     8 OBJECT  GLOBAL DEFAULT   22 fp
    47: 0000000000200808     8 OBJECT  GLOBAL DEFAULT   22 fp

% readelf -r lib.so | grep 200808                 
0000002007c8  000700000006 R_X86_64_GLOB_DAT 0000000000200808 fp + 0
000000200808  000400000001 R_X86_64_64       0000000000000000 printf + 0

Linking with ld.lld:
% cc -fuse-ld=lld -fPIC -shared -o lib.so lib.c
% cc -fuse-ld=lld -fPIC -Wl,-rpath=. lib.so main.c
% ./a.out
zsh: segmentation fault (core dumped)  ./a.out

And no relocation for the function pointer:

% readelf -s lib.so | grep fp
     6: 0000000000003018     8 OBJECT  GLOBAL DEFAULT   19 fp
    21: 0000000000003018     8 OBJECT  GLOBAL DEFAULT   19 fp

% readelf -r lib.so            

Relocation section '.rela.dyn' at offset 0x438 contains 5 entries:
  Offset          Info           Type           Sym. Value    Sym. Name +
Addend
000000002138  000300000006 R_X86_64_GLOB_DAT 0000000000000000 __cxa_finalize +
0
000000002140  000200000006 R_X86_64_GLOB_DAT 0000000000000000
_Jv_RegisterClasses + 0
000000003008  000000000008 R_X86_64_RELATIVE                   
0000000000003008
000000003010  000000000008 R_X86_64_RELATIVE                   
0000000000002018
000000002148  000600000006 R_X86_64_GLOB_DAT 0000000000003018 fp + 0

Relocation section '.rela.plt' at offset 0x4b0 contains 2 entries:
  Offset          Info           Type           Sym. Value    Sym. Name +
Addend
000000003038  000300000007 R_X86_64_JUMP_SLO 0000000000000000 __cxa_finalize +
0
000000003040  000700000007 R_X86_64_JUMP_SLO 0000000000001150 printf + 0

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20160302/222b9b3e/attachment-0001.html>


More information about the llvm-bugs mailing list