[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