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/MC/MCELFStreamer.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/MC/MCELFStreamer.cpp')
-rw-r--r-- | llvm/lib/MC/MCELFStreamer.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/MC/MCELFStreamer.cpp b/llvm/lib/MC/MCELFStreamer.cpp index fa2133078bf..c2e2beb23cb 100644 --- a/llvm/lib/MC/MCELFStreamer.cpp +++ b/llvm/lib/MC/MCELFStreamer.cpp @@ -106,9 +106,10 @@ void MCELFStreamer::EmitLabel(MCSymbol *S, SMLoc Loc) { Symbol->setType(ELF::STT_TLS); } -void MCELFStreamer::EmitLabel(MCSymbol *S, SMLoc Loc, MCFragment *F) { +void MCELFStreamer::EmitLabelAtPos(MCSymbol *S, SMLoc Loc, MCFragment *F, + uint64_t Offset) { auto *Symbol = cast<MCSymbolELF>(S); - MCObjectStreamer::EmitLabel(Symbol, Loc, F); + MCObjectStreamer::EmitLabelAtPos(Symbol, Loc, F, Offset); const MCSectionELF &Section = static_cast<const MCSectionELF &>(*getCurrentSectionOnly()); |