diff options
| author | James Y Knight <jyknight@google.com> | 2019-11-10 16:12:29 -0500 |
|---|---|---|
| committer | James Y Knight <jyknight@google.com> | 2019-11-16 09:52:07 -0500 |
| commit | bf142fc43347d8a35a71f46f7dda7e2a0a992e0d (patch) | |
| tree | 637c0d55792d11174365c5ffd6bd2d8f2d392990 /llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp | |
| parent | 5987cc1bb5d5eb624135e76a6b3ade1aef94caf7 (diff) | |
| download | bcm5719-llvm-bf142fc43347d8a35a71f46f7dda7e2a0a992e0d.tar.gz bcm5719-llvm-bf142fc43347d8a35a71f46f7dda7e2a0a992e0d.zip | |
MCObjectStreamer: assign MCSymbols in the dummy fragment to offset 0.
In MCObjectStreamer, when there is no current fragment, initially
symbols are created in a "pending" state and assigned to a dummy
empty fragment.
Previously, they were not being assigned an offset, and thus
evaluateAbsolute would fail if trying to evaluate an expression 'a -
b', where both 'a' and 'b' were in this pending state.
Also slightly refactored the EmitLabel overload which takes an
MCFragment for clarity.
Fixes: https://llvm.org/PR41825
Differential Revision: https://reviews.llvm.org/D70062
Diffstat (limited to 'llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp')
| -rw-r--r-- | llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp index 01b98ccf897..f558ca8d2d9 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp @@ -659,11 +659,10 @@ private: uint64_t Offset) { auto *Symbol = cast<MCSymbolELF>(getContext().getOrCreateSymbol( Name + "." + Twine(MappingSymbolCounter++))); - EmitLabel(Symbol, Loc, F); + EmitLabelAtPos(Symbol, Loc, F, Offset); Symbol->setType(ELF::STT_NOTYPE); Symbol->setBinding(ELF::STB_LOCAL); Symbol->setExternal(false); - Symbol->setOffset(Offset); } void EmitThumbFunc(MCSymbol *Func) override { |

