diff --git a/test/Object/Inputs/COFF/long-file-symbol.yaml b/test/Object/Inputs/COFF/long-file-symbol.yaml new file mode 100644 index 00000000000..37caad79620 --- /dev/null +++ b/test/Object/Inputs/COFF/long-file-symbol.yaml @@ -0,0 +1,14 @@ +--- +header: + Machine: IMAGE_FILE_MACHINE_AMD64 + Characteristics: [ IMAGE_FILE_RELOCS_STRIPPED, IMAGE_FILE_LINE_NUMS_STRIPPED ] +sections: +symbols: + - Name: .file + Value: 0 + SectionNumber: 65534 + SimpleType: IMAGE_SYM_TYPE_NULL + ComplexType: IMAGE_SYM_DTYPE_NULL + StorageClass: IMAGE_SYM_CLASS_FILE + File: filename_with_22_chars +... diff --git a/test/Object/obj2yaml-coff-long-file-symbol.test b/test/Object/obj2yaml-coff-long-file-symbol.test new file mode 100644 index 00000000000..3a4d380bd8e --- /dev/null +++ b/test/Object/obj2yaml-coff-long-file-symbol.test @@ -0,0 +1,3 @@ +RUN: yaml2obj %p/Inputs/COFF/long-file-symbol.yaml | obj2yaml | FileCheck %s --check-prefix COFF-I386 + +COFF-I386: File: filename_with_22_chars diff --git a/tools/obj2yaml/coff2yaml.cpp b/tools/obj2yaml/coff2yaml.cpp index 1542506e5f9..ef709222a17 100644 --- a/tools/obj2yaml/coff2yaml.cpp +++ b/tools/obj2yaml/coff2yaml.cpp @@ -178,7 +178,8 @@ void COFFDumper::dumpSymbols(unsigned NumSymbols) { } else if (Symbol->isFileRecord()) { // This symbol represents a file record. Sym.File = StringRef(reinterpret_cast(AuxData.data()), - Symbol->NumberOfAuxSymbols * COFF::SymbolSize); + Symbol->NumberOfAuxSymbols * COFF::SymbolSize) + .rtrim(StringRef("\0", /*length=*/1)); } else if (Symbol->isSectionDefinition()) { // This symbol represents a section definition. assert(Symbol->NumberOfAuxSymbols == 1 &&