[MC][ARM] Don't create multiple .ARM.exidx associated to one .text
authorFangrui Song <maskray@google.com>
Tue, 25 Feb 2020 01:54:39 +0000 (17:54 -0800)
committerFangrui Song <maskray@google.com>
Wed, 26 Feb 2020 02:18:13 +0000 (18:18 -0800)
commitd0c4277d388628154b647a45cbc6914a1ea5a822
treebe818dee2872963d25478770f08fb4a6906c1894
parent6fb70c87251708af8fc27b501fd79e26162f7e65
[MC][ARM] Don't create multiple .ARM.exidx associated to one .text

Fixed an issue exposed by D74006.

In clang cc1as, MCContext::UseNamesOnTempLabels is true.
When parsing a .fnstart directive, FnStart gets redefined to a temporary symbol of a different name (.Ltmp0, .Ltmp1, ...).
MCContext::getELFSection() called by SwitchToEHSection() will create a different .ARM.exidx each time.

llvm-mc uses `Ctx.setUseNamesOnTempLabels(false);` and FnStart is unnamed.
MCContext::getELFSection() called by SwitchToEHSection() will reuse the same .ARM.exidx .

Reviewed By: efriedma

Differential Revision: https://reviews.llvm.org/D75095
llvm/lib/MC/MCContext.cpp
llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp