diff options
author | shadchin <shadchin@yandex-team.ru> | 2022-02-10 16:44:39 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:44:39 +0300 |
commit | e9656aae26e0358d5378e5b63dcac5c8dbe0e4d0 (patch) | |
tree | 64175d5cadab313b3e7039ebaa06c5bc3295e274 /contrib/libs/llvm12/lib/MC/MCObjectStreamer.cpp | |
parent | 2598ef1d0aee359b4b6d5fdd1758916d5907d04f (diff) | |
download | ydb-e9656aae26e0358d5378e5b63dcac5c8dbe0e4d0.tar.gz |
Restoring authorship annotation for <shadchin@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/llvm12/lib/MC/MCObjectStreamer.cpp')
-rw-r--r-- | contrib/libs/llvm12/lib/MC/MCObjectStreamer.cpp | 172 |
1 files changed, 86 insertions, 86 deletions
diff --git a/contrib/libs/llvm12/lib/MC/MCObjectStreamer.cpp b/contrib/libs/llvm12/lib/MC/MCObjectStreamer.cpp index 10cbc00bc5..1c23d31f87 100644 --- a/contrib/libs/llvm12/lib/MC/MCObjectStreamer.cpp +++ b/contrib/libs/llvm12/lib/MC/MCObjectStreamer.cpp @@ -248,7 +248,7 @@ void MCObjectStreamer::emitValueImpl(const MCExpr *Value, unsigned Size, } MCSymbol *MCObjectStreamer::emitCFILabel() { - MCSymbol *Label = getContext().createTempSymbol("cfi"); + MCSymbol *Label = getContext().createTempSymbol("cfi"); emitLabel(Label); return Label; } @@ -665,68 +665,68 @@ void MCObjectStreamer::emitGPRel64Value(const MCExpr *Value) { DF->getContents().resize(DF->getContents().size() + 8, 0); } -static Optional<std::pair<bool, std::string>> -getOffsetAndDataFragment(const MCSymbol &Symbol, uint32_t &RelocOffset, - MCDataFragment *&DF) { - if (Symbol.isVariable()) { - const MCExpr *SymbolExpr = Symbol.getVariableValue(); - MCValue OffsetVal; - if(!SymbolExpr->evaluateAsRelocatable(OffsetVal, nullptr, nullptr)) - return std::make_pair(false, - std::string("symbol in .reloc offset is not " - "relocatable")); - if (OffsetVal.isAbsolute()) { - RelocOffset = OffsetVal.getConstant(); - MCFragment *Fragment = Symbol.getFragment(); - // FIXME Support symbols with no DF. For example: - // .reloc .data, ENUM_VALUE, <some expr> - if (!Fragment || Fragment->getKind() != MCFragment::FT_Data) - return std::make_pair(false, - std::string("symbol in offset has no data " - "fragment")); - DF = cast<MCDataFragment>(Fragment); - return None; - } - - if (OffsetVal.getSymB()) - return std::make_pair(false, - std::string(".reloc symbol offset is not " - "representable")); - - const MCSymbolRefExpr &SRE = cast<MCSymbolRefExpr>(*OffsetVal.getSymA()); - if (!SRE.getSymbol().isDefined()) - return std::make_pair(false, - std::string("symbol used in the .reloc offset is " - "not defined")); - - if (SRE.getSymbol().isVariable()) - return std::make_pair(false, - std::string("symbol used in the .reloc offset is " - "variable")); - - MCFragment *Fragment = SRE.getSymbol().getFragment(); - // FIXME Support symbols with no DF. For example: - // .reloc .data, ENUM_VALUE, <some expr> - if (!Fragment || Fragment->getKind() != MCFragment::FT_Data) - return std::make_pair(false, - std::string("symbol in offset has no data " - "fragment")); - RelocOffset = SRE.getSymbol().getOffset() + OffsetVal.getConstant(); - DF = cast<MCDataFragment>(Fragment); - } else { - RelocOffset = Symbol.getOffset(); - MCFragment *Fragment = Symbol.getFragment(); - // FIXME Support symbols with no DF. For example: - // .reloc .data, ENUM_VALUE, <some expr> - if (!Fragment || Fragment->getKind() != MCFragment::FT_Data) - return std::make_pair(false, - std::string("symbol in offset has no data " - "fragment")); - DF = cast<MCDataFragment>(Fragment); - } - return None; -} - +static Optional<std::pair<bool, std::string>> +getOffsetAndDataFragment(const MCSymbol &Symbol, uint32_t &RelocOffset, + MCDataFragment *&DF) { + if (Symbol.isVariable()) { + const MCExpr *SymbolExpr = Symbol.getVariableValue(); + MCValue OffsetVal; + if(!SymbolExpr->evaluateAsRelocatable(OffsetVal, nullptr, nullptr)) + return std::make_pair(false, + std::string("symbol in .reloc offset is not " + "relocatable")); + if (OffsetVal.isAbsolute()) { + RelocOffset = OffsetVal.getConstant(); + MCFragment *Fragment = Symbol.getFragment(); + // FIXME Support symbols with no DF. For example: + // .reloc .data, ENUM_VALUE, <some expr> + if (!Fragment || Fragment->getKind() != MCFragment::FT_Data) + return std::make_pair(false, + std::string("symbol in offset has no data " + "fragment")); + DF = cast<MCDataFragment>(Fragment); + return None; + } + + if (OffsetVal.getSymB()) + return std::make_pair(false, + std::string(".reloc symbol offset is not " + "representable")); + + const MCSymbolRefExpr &SRE = cast<MCSymbolRefExpr>(*OffsetVal.getSymA()); + if (!SRE.getSymbol().isDefined()) + return std::make_pair(false, + std::string("symbol used in the .reloc offset is " + "not defined")); + + if (SRE.getSymbol().isVariable()) + return std::make_pair(false, + std::string("symbol used in the .reloc offset is " + "variable")); + + MCFragment *Fragment = SRE.getSymbol().getFragment(); + // FIXME Support symbols with no DF. For example: + // .reloc .data, ENUM_VALUE, <some expr> + if (!Fragment || Fragment->getKind() != MCFragment::FT_Data) + return std::make_pair(false, + std::string("symbol in offset has no data " + "fragment")); + RelocOffset = SRE.getSymbol().getOffset() + OffsetVal.getConstant(); + DF = cast<MCDataFragment>(Fragment); + } else { + RelocOffset = Symbol.getOffset(); + MCFragment *Fragment = Symbol.getFragment(); + // FIXME Support symbols with no DF. For example: + // .reloc .data, ENUM_VALUE, <some expr> + if (!Fragment || Fragment->getKind() != MCFragment::FT_Data) + return std::make_pair(false, + std::string("symbol in offset has no data " + "fragment")); + DF = cast<MCDataFragment>(Fragment); + } + return None; +} + Optional<std::pair<bool, std::string>> MCObjectStreamer::emitRelocDirective(const MCExpr &Offset, StringRef Name, const MCExpr *Expr, SMLoc Loc, @@ -760,17 +760,17 @@ MCObjectStreamer::emitRelocDirective(const MCExpr &Offset, StringRef Name, std::string(".reloc offset is not representable")); const MCSymbolRefExpr &SRE = cast<MCSymbolRefExpr>(*OffsetVal.getSymA()); - const MCSymbol &Symbol = SRE.getSymbol(); - if (Symbol.isDefined()) { - uint32_t SymbolOffset = 0; - Optional<std::pair<bool, std::string>> Error; - Error = getOffsetAndDataFragment(Symbol, SymbolOffset, DF); - - if (Error != None) - return Error; - + const MCSymbol &Symbol = SRE.getSymbol(); + if (Symbol.isDefined()) { + uint32_t SymbolOffset = 0; + Optional<std::pair<bool, std::string>> Error; + Error = getOffsetAndDataFragment(Symbol, SymbolOffset, DF); + + if (Error != None) + return Error; + DF->getFixups().push_back( - MCFixup::create(SymbolOffset + OffsetVal.getConstant(), + MCFixup::create(SymbolOffset + OffsetVal.getConstant(), Expr, Kind, Loc)); return None; } @@ -819,16 +819,16 @@ void MCObjectStreamer::emitFill(const MCExpr &NumValues, int64_t Size, insert(new MCFillFragment(Expr, Size, NumValues, Loc)); } -void MCObjectStreamer::emitNops(int64_t NumBytes, int64_t ControlledNopLength, - SMLoc Loc) { - // Emit an NOP fragment. - MCDataFragment *DF = getOrCreateDataFragment(); - flushPendingLabels(DF, DF->getContents().size()); - - assert(getCurrentSectionOnly() && "need a section"); - insert(new MCNopsFragment(NumBytes, ControlledNopLength, Loc)); -} - +void MCObjectStreamer::emitNops(int64_t NumBytes, int64_t ControlledNopLength, + SMLoc Loc) { + // Emit an NOP fragment. + MCDataFragment *DF = getOrCreateDataFragment(); + flushPendingLabels(DF, DF->getContents().size()); + + assert(getCurrentSectionOnly() && "need a section"); + insert(new MCNopsFragment(NumBytes, ControlledNopLength, Loc)); +} + void MCObjectStreamer::emitFileDirective(StringRef Filename) { getAssembler().addFileName(Filename); } @@ -852,9 +852,9 @@ void MCObjectStreamer::finishImpl() { // Dump out the dwarf file & directory tables and line tables. MCDwarfLineTable::Emit(this, getAssembler().getDWARFLinetableParams()); - // Emit pseudo probes for the current module. - MCPseudoProbeTable::emit(this); - + // Emit pseudo probes for the current module. + MCPseudoProbeTable::emit(this); + // Update any remaining pending labels with empty data fragments. flushPendingLabels(); |