[PECOFF] Drop stdcall's atsign suffix only.

You can omit @number suffix when specifying /export option,
but you can do that only for stdcall functions.

llvm-svn: 207809
This commit is contained in:
Rui Ueyama 2014-05-01 22:44:42 +00:00
parent 1f03d08a8c
commit efa8076c29
3 changed files with 15 additions and 2 deletions

View File

@ -46,7 +46,9 @@ static void assignOrdinals(PECOFFLinkingContext &ctx) {
ctx.getDllExports().swap(exports); ctx.getDllExports().swap(exports);
} }
static StringRef removeAtSignSuffix(StringRef sym) { static StringRef removeStdcallSuffix(StringRef sym) {
if (!sym.startswith("_"))
return sym;
StringRef trimmed = sym.rtrim("0123456789"); StringRef trimmed = sym.rtrim("0123456789");
if (sym.size() != trimmed.size() && trimmed.endswith("@")) if (sym.size() != trimmed.size() && trimmed.endswith("@"))
return trimmed.drop_back(); return trimmed.drop_back();
@ -63,7 +65,7 @@ static bool getExportedAtoms(PECOFFLinkingContext &ctx, MutableFile *file,
std::vector<TableEntry> &ret) { std::vector<TableEntry> &ret) {
std::map<StringRef, const DefinedAtom *> definedAtoms; std::map<StringRef, const DefinedAtom *> definedAtoms;
for (const DefinedAtom *atom : file->defined()) for (const DefinedAtom *atom : file->defined())
definedAtoms[removeAtSignSuffix(atom->name())] = atom; definedAtoms[removeStdcallSuffix(atom->name())] = atom;
std::set<PECOFFLinkingContext::ExportDesc> exports; std::set<PECOFFLinkingContext::ExportDesc> exports;
for (PECOFFLinkingContext::ExportDesc desc : ctx.getDllExports()) { for (PECOFFLinkingContext::ExportDesc desc : ctx.getDllExports()) {

View File

@ -7,6 +7,10 @@ sections:
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ] Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
Alignment: 4 Alignment: 4
SectionData: B800000000506800000000680000000050E80000000050E800000000 SectionData: B800000000506800000000680000000050E80000000050E800000000
- Name: .drectve
Characteristics: [ IMAGE_SCN_LNK_INFO, IMAGE_SCN_LNK_REMOVE ]
Alignment: 2147483648
SectionData: 2f6578706f72743a6578706f7274666e334032353600 # /export:exportfn3@256
symbols: symbols:
- Name: .text - Name: .text
Value: 0 Value: 0
@ -38,4 +42,10 @@ symbols:
SimpleType: IMAGE_SYM_TYPE_NULL SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_NULL ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_EXTERNAL StorageClass: IMAGE_SYM_CLASS_EXTERNAL
- Name: exportfn3@256
Value: 16
SectionNumber: 1
SimpleType: IMAGE_SYM_TYPE_NULL
ComplexType: IMAGE_SYM_DTYPE_NULL
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
... ...

View File

@ -39,3 +39,4 @@ CHECK4: DLL name: export.test.tmp4.dll
CHECK4: Ordinal RVA Name CHECK4: Ordinal RVA Name
CHECK4-NEXT: 5 0x2008 exportfn1 CHECK4-NEXT: 5 0x2008 exportfn1
CHECK4-NEXT: 6 0x2010 exportfn2 CHECK4-NEXT: 6 0x2010 exportfn2
CHECK4-NEXT: 7 0x2010 exportfn3@256