Skip to content

Latest commit

 

History

History
43 lines (35 loc) · 1.12 KB

README.md

File metadata and controls

43 lines (35 loc) · 1.12 KB

This is a self-contained testcase for an ld64 bug with symbol aliases; it is a reduced testcase for problems we observed in Firefox.

The aliases.ll file contains LLVM assembly. You may need to tweak the target of aliases.ll to make the LTO link, below, work properly. main.c has calls to all the of the functions contained in aliases.ll.

run.sh compiles the appropriate files, links with -flto=thin, and runs the testcase. The expected output is:

f1: 5
f2: 5
g: 42

The output on my machine, using an ld64 with the bug, is:

f1: 5
f2: 18
g: 42

YMMV. The core problem can be seen from looking at the symbol table of the testcase:

jubilee:linker-bug froydnj$ nm testcase
0000000100000000 T __mh_execute_header
0000000100000f60 T _f1
0000000100000f70 t _f2
0000000100000f70 t _g
0000000100000f20 T _main
                 U _printf
                 U dyld_stub_binder

We would expect that _f1 and _f2 have identical addresses, given the aliases.ll file. The actual result is that _f2 and _g have identical addresses, with predictably bad results when those functions are actually used.