mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
3e31edf817
This commit introduces `FixPointerSize`, a pipe changing the `DataLayout` of module in order to have a pointer size identical to the one of `targetABI()`. The pipe also performs safety checks to ensure this does not corrupt semantics.
171 lines
6.6 KiB
C++
171 lines
6.6 KiB
C++
//
|
|
// This file is distributed under the MIT License. See LICENSE.md for details.
|
|
//
|
|
|
|
#include "revng/ABI/Analyses/ConvertFunctionsToCABI.h"
|
|
#include "revng/ABI/Analyses/ConvertFunctionsToRaw.h"
|
|
#include "revng/Canonicalize/FixPointerSize.h"
|
|
#include "revng/Canonicalize/SimplifySwitch.h"
|
|
#include "revng/Canonicalize/SwitchToStatements.h"
|
|
#include "revng/CliftPipes/Clifter.h"
|
|
#include "revng/CliftPipes/EmitC.h"
|
|
#include "revng/CliftPipes/EmitCAsDirectory.h"
|
|
#include "revng/CliftPipes/EmitCAsSingleFile.h"
|
|
#include "revng/CliftPipes/Headers.h"
|
|
#include "revng/CliftPipes/ImportDataModel.h"
|
|
#include "revng/CliftPipes/ImportDescriptiveInfo.h"
|
|
#include "revng/CliftPipes/ImportTypes.h"
|
|
#include "revng/CliftPipes/VerifyAgainstModel.h"
|
|
#include "revng/DataLayoutAnalysis/DLA.h"
|
|
#include "revng/EarlyFunctionAnalysis/AttachDebugInfo.h"
|
|
#include "revng/EarlyFunctionAnalysis/CollectCFG.h"
|
|
#include "revng/EarlyFunctionAnalysis/DetectABI.h"
|
|
#include "revng/FunctionIsolation/EnforceABI.h"
|
|
#include "revng/FunctionIsolation/InvokeIsolatedFunctions.h"
|
|
#include "revng/FunctionIsolation/IsolateFunctions.h"
|
|
#include "revng/FunctionIsolation/PromoteCSVs.h"
|
|
#include "revng/HeadersGeneration/ModelToHeaderPipe.h"
|
|
#include "revng/HeadersGeneration/ModelTypeDefinitionPipe.h"
|
|
#include "revng/ImportFromC/ImportFromCAnalysis.h"
|
|
#include "revng/LLMRename/LLMRenameAnalysis.h"
|
|
#include "revng/Lift/Lift.h"
|
|
#include "revng/Lift/LinkSupportPipe.h"
|
|
#include "revng/Model/Importer/Binary/ImportBinaryAnalysis.h"
|
|
#include "revng/Model/Importer/ImportPrototypesFromDatabase.h"
|
|
#include "revng/Pipebox/LLVMPipe.h"
|
|
#include "revng/Pipebox/MLIRPipe.h"
|
|
#include "revng/Pipebox/MergeLLVMModules.h"
|
|
#include "revng/PipeboxCommon/BinariesContainer.h"
|
|
#include "revng/PipeboxCommon/CliftContainers.h"
|
|
#include "revng/PipeboxCommon/Helpers/Registrars.h"
|
|
#include "revng/PipeboxCommon/ModelManipulationAnalyses.h"
|
|
#include "revng/PipeboxCommon/RawContainer.h"
|
|
#include "revng/PromoteStackPointer/DetectStackSize.h"
|
|
#include "revng/PromoteStackPointer/InjectStackSizeProbesAtCallSites.h"
|
|
#include "revng/PromoteStackPointer/PromoteStackPointer.h"
|
|
#include "revng/PromoteStackPointer/SegregateStackAccesses.h"
|
|
#include "revng/Recompile/CompileModulePipe.h"
|
|
#include "revng/Recompile/LinkForTranslationPipe.h"
|
|
#include "revng/RemoveLiftingArtifacts/CleanupIR.h"
|
|
#include "revng/RemoveLiftingArtifacts/MakeSegmentRef.h"
|
|
#include "revng/RemoveLiftingArtifacts/PromoteInitCSVToUndef.h"
|
|
#include "revng/RemoveLiftingArtifacts/RemoveLiftingArtifacts.h"
|
|
#include "revng/Yield/HexDump.h"
|
|
#include "revng/Yield/Pipes/ProcessAssembly.h"
|
|
#include "revng/Yield/Pipes/ProcessCallGraph.h"
|
|
#include "revng/Yield/Pipes/YieldAssembly.h"
|
|
#include "revng/Yield/Pipes/YieldCallGraph.h"
|
|
#include "revng/Yield/Pipes/YieldCallGraphSlice.h"
|
|
|
|
#define REGISTER(TYPE, NAME) \
|
|
static Register##TYPE<NAME> CONCAT3(TYPE, _, __COUNTER__)
|
|
|
|
//
|
|
// Containers
|
|
//
|
|
|
|
using namespace revng::pypeline;
|
|
|
|
REGISTER(Container, AssemblyContainer);
|
|
REGISTER(Container, AssemblyInternalContainer);
|
|
REGISTER(Container, BinariesContainer);
|
|
REGISTER(Container, CallGraphContainer);
|
|
REGISTER(Container, CallGraphSliceContainer);
|
|
REGISTER(Container, CFGMap);
|
|
REGISTER(Container, CliftFunctionContainer);
|
|
REGISTER(Container, CliftModuleContainer);
|
|
REGISTER(Container, CliftSingleTypeContainer);
|
|
REGISTER(Container, CrossRelationsContainer);
|
|
REGISTER(Container, FunctionControlFlowContainer);
|
|
REGISTER(Container, HexDumpContainer);
|
|
REGISTER(Container, LLVMFunctionContainer);
|
|
REGISTER(Container, LLVMRootContainer);
|
|
REGISTER(Container, ObjectFileContainer);
|
|
REGISTER(Container, PTMLCBytesContainer);
|
|
REGISTER(Container, PTMLCFunctionBytesContainer);
|
|
REGISTER(Container, PTMLCTypeBytesContainer);
|
|
REGISTER(Container, PTMLCTypeContainer);
|
|
REGISTER(Container, RecompilableArchiveContainer);
|
|
REGISTER(Container, TranslatedContainer);
|
|
|
|
//
|
|
// Pipes
|
|
//
|
|
|
|
using namespace revng::pypeline::pipes;
|
|
|
|
REGISTER(Pipe, FixPointerSize);
|
|
REGISTER(Pipe, PureLLVMPassesPipe);
|
|
REGISTER(Pipe, PureLLVMPassesRootPipe);
|
|
REGISTER(Pipe, PureMLIRPassesPipe);
|
|
|
|
using namespace revng::pypeline::piperuns;
|
|
|
|
REGISTER(FunctionPipeRun, AttachDebugInfo);
|
|
REGISTER(FunctionPipeRun, Clifter);
|
|
REGISTER(FunctionPipeRun, CollectCFG);
|
|
REGISTER(FunctionPipeRun, EmitC);
|
|
REGISTER(FunctionPipeRun, EnforceABI);
|
|
REGISTER(FunctionPipeRun, ImportDescriptiveFunctionInfo);
|
|
REGISTER(FunctionPipeRun, ImportFunctionDataModel);
|
|
REGISTER(FunctionPipeRun, InjectStackSizeProbesAtCallSites);
|
|
REGISTER(FunctionPipeRun, Isolate);
|
|
REGISTER(FunctionPipeRun, LegacySegregateStackAccesses);
|
|
REGISTER(FunctionPipeRun, MakeSegmentRef);
|
|
REGISTER(FunctionPipeRun, ProcessAssembly);
|
|
REGISTER(FunctionPipeRun, PromoteCSVs);
|
|
REGISTER(FunctionPipeRun, PromoteInitCSVToUndef);
|
|
REGISTER(FunctionPipeRun, PromoteStackPointer);
|
|
REGISTER(FunctionPipeRun, RemoveLiftingArtifacts);
|
|
REGISTER(FunctionPipeRun, SegregateStackAccesses);
|
|
REGISTER(FunctionPipeRun, SimplifySwitch);
|
|
REGISTER(FunctionPipeRun, SwitchToStatements);
|
|
REGISTER(FunctionPipeRun, VerifyFunctionAgainstModel);
|
|
REGISTER(FunctionPipeRun, YieldAssembly);
|
|
REGISTER(FunctionPipeRun, YieldCallGraphSlice);
|
|
REGISTER(FunctionPipeRun, YieldCFG);
|
|
|
|
REGISTER(SingleOutputPipeRun, CleanupIR);
|
|
REGISTER(SingleOutputPipeRun, CompileRootModule);
|
|
REGISTER(SingleOutputPipeRun, EmitCAsDirectory);
|
|
REGISTER(SingleOutputPipeRun, EmitCAsSingleFile);
|
|
REGISTER(SingleOutputPipeRun, EmitHelperHeader);
|
|
REGISTER(SingleOutputPipeRun, EmitTypeAndGlobalHeader);
|
|
REGISTER(SingleOutputPipeRun, HexDump);
|
|
REGISTER(SingleOutputPipeRun, ImportDescriptiveInfo);
|
|
REGISTER(SingleOutputPipeRun, ImportFunctionDeclarations);
|
|
REGISTER(SingleOutputPipeRun, ImportSegmentDeclarations);
|
|
REGISTER(SingleOutputPipeRun, ImportTypes);
|
|
REGISTER(SingleOutputPipeRun, InvokeIsolatedFunctions);
|
|
REGISTER(SingleOutputPipeRun, Lift);
|
|
REGISTER(SingleOutputPipeRun, LinkForTranslation);
|
|
REGISTER(SingleOutputPipeRun, LinkSupport);
|
|
REGISTER(SingleOutputPipeRun, MergeLLVMModules);
|
|
REGISTER(SingleOutputPipeRun, ModelToHeader);
|
|
REGISTER(SingleOutputPipeRun, ProcessCallGraph);
|
|
REGISTER(SingleOutputPipeRun, VerifyAgainstModel);
|
|
REGISTER(SingleOutputPipeRun, YieldCallGraph);
|
|
|
|
REGISTER(TypeDefinitionPipeRun, EmitSingleTypeDefinition);
|
|
REGISTER(TypeDefinitionPipeRun, GenerateModelTypeDefinition);
|
|
|
|
//
|
|
// Analyses
|
|
//
|
|
|
|
using namespace revng::pypeline::analyses;
|
|
|
|
REGISTER(Analysis, AnalyzeDataLayout);
|
|
REGISTER(Analysis, ApplyDiff);
|
|
REGISTER(Analysis, ConvertFunctionsToCABI);
|
|
REGISTER(Analysis, ConvertFunctionsToRaw);
|
|
REGISTER(Analysis, DetectABI);
|
|
REGISTER(Analysis, DetectStackSize);
|
|
REGISTER(Analysis, ImportFromC);
|
|
REGISTER(Analysis, ImportPrototypesFromDatabase);
|
|
REGISTER(Analysis, LLMRename);
|
|
REGISTER(Analysis, ParseBinaryAnalysis);
|
|
REGISTER(Analysis, SetModel);
|
|
REGISTER(Analysis, VerifyDiff);
|
|
REGISTER(Analysis, VerifyModel);
|