[PECOFF] Truncate long section name.

Executable files do not use a string table, so section names longer than 8
characters are not permitted. Long section names should just be truncated.

llvm-svn: 197470
This commit is contained in:
Rui Ueyama 2013-12-17 06:15:09 +00:00
parent a4acde39e9
commit 1fc1bab8a8
2 changed files with 9 additions and 5 deletions

View File

@ -631,12 +631,9 @@ llvm::object::coff_section
SectionHeaderTableChunk::createSectionHeader(SectionChunk *chunk) {
llvm::object::coff_section header;
// Section name equal to or shorter than 8 byte fits in the section
// header. Longer names should be stored to string table, which is not
// implemented yet.
// Section name must be equal to or less than 8 characters in the
// executable. Longer names will be truncated.
StringRef sectionName = chunk->getSectionName();
if (sizeof(header.Name) < sectionName.size())
llvm_unreachable("Cannot handle section name longer than 8 byte");
// Name field must be NUL-padded. If the name is exactly 8 byte long,
// there's no terminating NUL.

View File

@ -0,0 +1,7 @@
# RUN: yaml2obj %p/Inputs/nop.obj.yaml > %t.obj
#
# RUN: lld -flavor link /out:%t.exe /subsystem:console /entry:start \
# RUN: /merge:.text=.longsectionname -- %t.obj
# RUN: llvm-readobj -sections %t.exe | FileCheck %s
CHECK: Name: .longsec (2E 6C 6F 6E 67 73 65 63)