[llvm-bugs] [Bug 46970] New: LLD does not preserve symbol types for defsym

via llvm-bugs llvm-bugs at lists.llvm.org
Mon Aug 3 12:10:18 PDT 2020


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

            Bug ID: 46970
           Summary: LLD does not preserve symbol types for defsym
           Product: lld
           Version: unspecified
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: ELF
          Assignee: unassignedbugs at nondot.org
          Reporter: smeenai at fb.com
                CC: grimar at accesssoftek.com, i at maskray.me,
                    llvm-bugs at lists.llvm.org, ruiu at google.com,
                    smithp352 at googlemail.com

$ cat f.c
void f() {}

$ clang -c f.c
$ ld.lld -shared --defsym=g=f f.o
$ objdump -T a.out
DYNAMIC SYMBOL TABLE:
00000000000012a0 g    DF .text  0000000000000006 f
00000000000012a0 g    D  .text  0000000000000000 g

f is marked STT_FUNC, but g is not. It might be hard to do in the general case
(where e.g. you can have arithmetic in the defsym expression), but in this
case, it seems desirable for the alias to get the same symbol type as the
original.

>From Peter Smith:

There can be a problem on Arm as no interworking will be performed for symbols
that are not STT_FUNC.

$ cat h.c
extern void f();
extern void g();
void h() { f(); g(); }

$ clang --target=armv7a-none-eabi -c f.c
$ clang --target=armv7a-none-eabi -c h.c -mthumb
$ ld.lld f.o h.o --defsym g=f  # No --shared to prevent a PLT entry.
$ objdump -d a.out
000200e8 <h>:
   200e8:       b580            push    {r7, lr}
   200ea:       466f            mov     r7, sp
   200ec:       f7ff effa       blx     200e4 <f>
   200f0:       f7ff fff8       bl      200e4 <f>
   200f4:       bd80            pop     {r7, pc}

The blx to f() is correct as a state change is required. The bl to f() will
likely crash the program.

ld.bfd correctly marks g as STT_FUNC so it gets the state change correct for
both calls.
00008004 <h>:
    8004:       b580            push    {r7, lr}
    8006:       466f            mov     r7, sp
    8008:       f7ff effa       blx     8000 <f>
    800c:       f7ff eff8       blx     8000 <f>
    8010:       bd80            pop     {r7, pc}

-- 
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/20200803/47d51dbe/attachment.html>


More information about the llvm-bugs mailing list