aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Object/COFFModuleDefinition.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Object/COFFModuleDefinition.cpp')
-rw-r--r--llvm/lib/Object/COFFModuleDefinition.cpp17
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