
With aggressive ICF, it's possible to have different local symbols (under different FILE symbols) to be mapped to the same address. FileSymRefs only keeps a single SymbolRef per address, which prevents fragment matching from finding the correct symbol to perform parent function lookup. Work around this issue by switching FileSymRefs to a multimap. In future, uses of FileSymRefs can be replaced with SortedSymbols which keeps essentially the same information. Test Plan: added ambiguous_fragment.test Reviewers: dcci, ayermolo, maksfb, rafaelauler Reviewed By: rafaelauler Pull Request: https://github.com/llvm/llvm-project/pull/98992
55 lines
909 B
ArmAsm
55 lines
909 B
ArmAsm
#--- file1
|
|
.file "file1.cpp"
|
|
.section .text.cold
|
|
.type __func.cold.0, @function
|
|
__func.cold.0:
|
|
ud2
|
|
.size __func.cold.0, .-__func.cold.0
|
|
.section .text
|
|
.type __func, @function
|
|
__func:
|
|
ud2
|
|
.size __func, .-__func
|
|
|
|
#--- file2
|
|
.file "file2.cpp"
|
|
.section .text.cold
|
|
.type __func.cold.0, @function
|
|
__func.cold.0:
|
|
ud2
|
|
.size __func.cold.0, .-__func.cold.0
|
|
.section .text
|
|
.type __func, @function
|
|
__func:
|
|
ud2
|
|
.size __func, .-__func
|
|
|
|
#--- file3
|
|
.file "file3.cpp"
|
|
.section .text.cold
|
|
.type __func.cold.0, @function
|
|
__func.cold.0:
|
|
ud2
|
|
.size __func.cold.0, .-__func.cold.0
|
|
.section .text
|
|
.type __func, @function
|
|
__func:
|
|
ud2
|
|
.size __func, .-__func
|
|
|
|
#--- file4
|
|
.file "file4.cpp"
|
|
.section .text.cold
|
|
.type __func.cold.0, @function
|
|
__func.cold.0:
|
|
ud2
|
|
.size __func.cold.0, .-__func.cold.0
|
|
.section .text
|
|
.type __func, @function
|
|
__func:
|
|
ud2
|
|
.size __func, .-__func
|
|
|
|
#--- file5
|
|
.file "bolt-pseudo.o"
|