diff --git a/src/hir2mpl/ast_input/common/include/ast_decl.h b/src/hir2mpl/ast_input/common/include/ast_decl.h index b21cc36a083bbb7c946f9c4f6911338e759d4061..2a396f1b3cbce0f0a4a363d38ca03e43cad4c938 100644 --- a/src/hir2mpl/ast_input/common/include/ast_decl.h +++ b/src/hir2mpl/ast_input/common/include/ast_decl.h @@ -46,7 +46,9 @@ struct BoundaryInfo { class ASTDecl { public: ASTDecl(const std::string &srcFile, const std::string &nameIn, const MapleVector &typeDescIn) - : isGlobalDecl(false), srcFileName(srcFile), name(nameIn), typeDesc(typeDescIn) {} + : isGlobalDecl(false), srcFileName(srcFile), name(nameIn), typeDesc(typeDescIn) { + isDbgFriendly = FEOptions::GetInstance().IsDbgFriendly(); + } virtual ~ASTDecl() = default; const std::string &GetSrcFileName() const; const std::string &GetName() const; @@ -171,6 +173,7 @@ class ASTDecl { virtual void GenerateInitStmtImpl(std::list &stmts) {} bool isGlobalDecl; bool isParam = false; + bool isDbgFriendly = false; uint32 align = 1; // in byte const std::string srcFileName; diff --git a/src/hir2mpl/ast_input/common/src/ast_decl.cpp b/src/hir2mpl/ast_input/common/src/ast_decl.cpp index e18c917115fae9ddd02aa8d2d2bdc427d4f6f5e0..3d8c106f1595d13b06e357db16e588426d423c3a 100644 --- a/src/hir2mpl/ast_input/common/src/ast_decl.cpp +++ b/src/hir2mpl/ast_input/common/src/ast_decl.cpp @@ -46,7 +46,7 @@ MIRConst *ASTDecl::Translate2MIRConst() const { std::string ASTDecl::GenerateUniqueVarName() const { // add `_line_column` suffix for avoiding local var name conflict - if (isGlobalDecl || isParam) { + if (isGlobalDecl || isParam || isDbgFriendly) { return name; } else { std::stringstream os; diff --git a/src/hir2mpl/common/include/fe_options.h b/src/hir2mpl/common/include/fe_options.h index dea1d79b5f0827840ce9b4670d712ef5e83f419f..d7ec8672511bd6adc02d6405d3a988f21f8a33c6 100644 --- a/src/hir2mpl/common/include/fe_options.h +++ b/src/hir2mpl/common/include/fe_options.h @@ -236,6 +236,16 @@ class FEOptions { return isDumpLOC; } + void SetDbgFriendly(bool flag) { + isDbgFriendly = flag; + // set isDumpLOC if flag is true + isDumpLOC = flag ? flag : isDumpLOC; + } + + bool IsDbgFriendly() const { + return isDbgFriendly; + } + void SetIsDumpPhaseTime(bool flag) { isDumpPhaseTime = flag; } @@ -505,6 +515,7 @@ class FEOptions { bool isDumpTime; bool isDumpComment = false; bool isDumpLOC = true; + bool isDbgFriendly = false; bool isDumpPhaseTime = false; bool isDumpPhaseTimeDetail = false; diff --git a/src/hir2mpl/common/include/hir2mpl_options.h b/src/hir2mpl/common/include/hir2mpl_options.h index bbfe437c9b53e1181ae15cd33d5c5dc33a2c5e48..b7e5cefb6022cf888172babce29c74170e9d80a5 100644 --- a/src/hir2mpl/common/include/hir2mpl_options.h +++ b/src/hir2mpl/common/include/hir2mpl_options.h @@ -75,6 +75,7 @@ class HIR2MPLOptions : public maple::MapleDriverOptionBase { bool ProcessDumpTime(const mapleOption::Option &opt); bool ProcessDumpComment(const mapleOption::Option &opt); bool ProcessDumpLOC(const mapleOption::Option &opt); + bool ProcessDbgFriendly(const mapleOption::Option &opt); bool ProcessDumpPhaseTime(const mapleOption::Option &opt); bool ProcessDumpPhaseTimeDetail(const mapleOption::Option &opt); diff --git a/src/hir2mpl/common/src/hir2mpl_options.cpp b/src/hir2mpl/common/src/hir2mpl_options.cpp index 25534be94daf8444a6453ef909552b8f7676156d..7b9d88e5470ff739bcb92d4669bea8dd89112dc7 100644 --- a/src/hir2mpl/common/src/hir2mpl_options.cpp +++ b/src/hir2mpl/common/src/hir2mpl_options.cpp @@ -47,6 +47,7 @@ enum OptionIndex : uint32 { kDumpTime, kDumpComment, kDumpLOC, + kDbgFriendly, kDumpPhaseTime, kDumpPhaseTimeDetail, // bc bytecode compile options @@ -164,6 +165,11 @@ const Descriptor kUsage[] = { { kUnknown, 0, "", "", kBuildTypeAll, kArgCheckPolicyUnknown, "\n====== Debug Info Control Options ======", "hir2mpl", {} }, + { kDbgFriendly, 0, "", "g", + kBuildTypeAll, kArgCheckPolicyNone, + " -g : emit debug friendly mpl, including\n" + " no variable renaming\n" + " gen LOC", "hir2mpl", {} }, { kDumpLevel, 0, "d", "dump-level", kBuildTypeAll, kArgCheckPolicyNumeric, " -d, -dump-level xx : debug info dump level\n" @@ -346,6 +352,8 @@ bool HIR2MPLOptions::InitFactory() { &HIR2MPLOptions::ProcessDumpComment); RegisterFactoryFunction(kDumpLOC, &HIR2MPLOptions::ProcessDumpLOC); + RegisterFactoryFunction(kDbgFriendly, + &HIR2MPLOptions::ProcessDbgFriendly); RegisterFactoryFunction(kDumpPhaseTime, &HIR2MPLOptions::ProcessDumpPhaseTime); RegisterFactoryFunction(kDumpPhaseTimeDetail, @@ -596,6 +604,11 @@ bool HIR2MPLOptions::ProcessDumpLOC(const Option &opt) { return true; } +bool HIR2MPLOptions::ProcessDbgFriendly(const Option &opt) { + FEOptions::GetInstance().SetDbgFriendly(true); + return true; +} + bool HIR2MPLOptions::ProcessDumpPhaseTime(const Option &opt) { FEOptions::GetInstance().SetIsDumpPhaseTime(true); return true;