1e5428043SMichael Ilseman //===- StripNonLineTableDebugInfo.cpp -- Strip parts of Debug Info --------===// 2e5428043SMichael Ilseman // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e5428043SMichael Ilseman // 7e5428043SMichael Ilseman //===----------------------------------------------------------------------===// 8e5428043SMichael Ilseman 9*da48fe17SReid Kleckner #include "llvm/Transforms/Utils/StripNonLineTableDebugInfo.h" 10e5428043SMichael Ilseman #include "llvm/IR/DebugInfo.h" 1105da2fe5SReid Kleckner #include "llvm/InitializePasses.h" 12e5428043SMichael Ilseman #include "llvm/Pass.h" 13f423062aSDavid Blaikie #include "llvm/Transforms/Utils.h" 14e5428043SMichael Ilseman using namespace llvm; 15e5428043SMichael Ilseman 16e5428043SMichael Ilseman namespace { 17e5428043SMichael Ilseman 18e5428043SMichael Ilseman /// This pass strips all debug info that is not related line tables. 19e5428043SMichael Ilseman /// The result will be the same as if the program where compiled with 20e5428043SMichael Ilseman /// -gline-tables-only. 21*da48fe17SReid Kleckner struct StripNonLineTableDebugLegacyPass : public ModulePass { 22e5428043SMichael Ilseman static char ID; // Pass identification, replacement for typeid StripNonLineTableDebugLegacyPass__anon24a619be0111::StripNonLineTableDebugLegacyPass23*da48fe17SReid Kleckner StripNonLineTableDebugLegacyPass() : ModulePass(ID) { 24*da48fe17SReid Kleckner initializeStripNonLineTableDebugLegacyPassPass( 25*da48fe17SReid Kleckner *PassRegistry::getPassRegistry()); 26e5428043SMichael Ilseman } 27e5428043SMichael Ilseman getAnalysisUsage__anon24a619be0111::StripNonLineTableDebugLegacyPass28e5428043SMichael Ilseman void getAnalysisUsage(AnalysisUsage &AU) const override { 29e5428043SMichael Ilseman AU.setPreservesAll(); 30e5428043SMichael Ilseman } 31e5428043SMichael Ilseman runOnModule__anon24a619be0111::StripNonLineTableDebugLegacyPass32e5428043SMichael Ilseman bool runOnModule(Module &M) override { 33e5428043SMichael Ilseman return llvm::stripNonLineTableDebugInfo(M); 34e5428043SMichael Ilseman } 35e5428043SMichael Ilseman }; 36e5428043SMichael Ilseman } 37e5428043SMichael Ilseman 38*da48fe17SReid Kleckner char StripNonLineTableDebugLegacyPass::ID = 0; 39*da48fe17SReid Kleckner INITIALIZE_PASS(StripNonLineTableDebugLegacyPass, 40*da48fe17SReid Kleckner "strip-nonlinetable-debuginfo", 41e5428043SMichael Ilseman "Strip all debug info except linetables", false, false) 42e5428043SMichael Ilseman createStripNonLineTableDebugLegacyPass()43*da48fe17SReid KlecknerModulePass *llvm::createStripNonLineTableDebugLegacyPass() { 44*da48fe17SReid Kleckner return new StripNonLineTableDebugLegacyPass(); 45*da48fe17SReid Kleckner } 46*da48fe17SReid Kleckner 47*da48fe17SReid Kleckner PreservedAnalyses run(Module & M,ModuleAnalysisManager & AM)48*da48fe17SReid KlecknerStripNonLineTableDebugInfoPass::run(Module &M, ModuleAnalysisManager &AM) { 49*da48fe17SReid Kleckner llvm::stripNonLineTableDebugInfo(M); 50*da48fe17SReid Kleckner return PreservedAnalyses::all(); 51e5428043SMichael Ilseman } 52