diff options
Diffstat (limited to 'llvm/lib/Object/COFFModuleDefinition.cpp')
-rw-r--r-- | llvm/lib/Object/COFFModuleDefinition.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/llvm/lib/Object/COFFModuleDefinition.cpp b/llvm/lib/Object/COFFModuleDefinition.cpp index 0666970d5c60..a33949733c8e 100644 --- a/llvm/lib/Object/COFFModuleDefinition.cpp +++ b/llvm/lib/Object/COFFModuleDefinition.cpp @@ -138,8 +138,11 @@ private: class Parser { public: - explicit Parser(StringRef S, MachineTypes M, bool B) - : Lex(S), Machine(M), MingwDef(B) {} + explicit Parser(StringRef S, MachineTypes M, bool B, bool AU) + : Lex(S), Machine(M), MingwDef(B), AddUnderscores(AU) { + if (Machine != IMAGE_FILE_MACHINE_I386) + AddUnderscores = false; + } Expected<COFFModuleDefinition> parse() { do { @@ -234,7 +237,7 @@ private: unget(); } - if (Machine == IMAGE_FILE_MACHINE_I386) { + if (AddUnderscores) { if (!isDecorated(E.Name, MingwDef)) E.Name = (std::string("_").append(E.Name)); if (!E.ExtName.empty() && !isDecorated(E.ExtName, MingwDef)) @@ -279,7 +282,7 @@ private: if (Tok.K == EqualEqual) { read(); E.AliasTarget = std::string(Tok.Value); - if (Machine == IMAGE_FILE_MACHINE_I386 && !isDecorated(E.AliasTarget, MingwDef)) + if (AddUnderscores && !isDecorated(E.AliasTarget, MingwDef)) E.AliasTarget = std::string("_").append(E.AliasTarget); continue; } @@ -349,12 +352,14 @@ private: MachineTypes Machine; COFFModuleDefinition Info; bool MingwDef; + bool AddUnderscores; }; Expected<COFFModuleDefinition> parseCOFFModuleDefinition(MemoryBufferRef MB, MachineTypes Machine, - bool MingwDef) { - return Parser(MB.getBuffer(), Machine, MingwDef).parse(); + bool MingwDef, + bool AddUnderscores) { + return Parser(MB.getBuffer(), Machine, MingwDef, AddUnderscores).parse(); } } // namespace object |