================ @@ -0,0 +1,78 @@ +//===----------------------------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// LFI-specific MC implementation. +/// +//===----------------------------------------------------------------------===// + +#include "llvm/MC/MCLFI.h" +#include "llvm/BinaryFormat/ELF.h" +#include "llvm/MC/MCContext.h" +#include "llvm/MC/MCLFIRewriter.h" +#include "llvm/MC/MCSectionELF.h" +#include "llvm/MC/MCStreamer.h" +#include "llvm/MC/TargetRegistry.h" +#include "llvm/Support/Alignment.h" +#include "llvm/TargetParser/Triple.h" + +static const char NoteNamespace[] = "LFI"; + +namespace llvm { + +cl::opt<bool> FlagEnableRewriting("lfi-enable-rewriter", + cl::desc("Enable rewriting for LFI."), + cl::init(true)); + +void initializeLFIMCStreamer(MCStreamer &Streamer, MCContext &Ctx, + const Triple &TheTriple) { + assert(TheTriple.isLFI()); + const char *NoteName; + const char *NoteArch; + switch (TheTriple.getArch()) { + case Triple::aarch64: + NoteName = ".note.LFI.ABI.aarch64"; + NoteArch = "aarch64"; + break; + default: + reportFatalUsageError("Unsupported architecture for LFI"); + } + + std::string Error; // empty + const Target *TheTarget = TargetRegistry::lookupTarget(TheTriple, Error); + + // Create the Target specific MCLFIRewriter. + assert(TheTarget != nullptr); + if (FlagEnableRewriting) { + TheTarget->createMCLFIRewriter( ---------------- zyedidia wrote:
The ownership is manually handled by the backend-specific constructor. See https://github.com/llvm/llvm-project/pull/186896/changes#diff-25b1d6cc0406e6bd694b3fc463ee338186ef032edfd7c4db1c91326cd39af5cfR508. However, we could make the API for `createMCLFIRewriter` return a raw pointer, consistent with the other `create*` functions and have this code call `Streamer.setLFIRewriter` directly (and create the `unique_ptr` at the call site), rather than doing that in the backend constructor. In that case the constructor will only need `MCContext` rather than `MCStreamer` as the first argument as well. I think this is cleaner so I can make the change in #186896. https://github.com/llvm/llvm-project/pull/172906 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
