mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-03 10:54:42 +00:00
[llvm-objcopy] [COFF] Fix writing object files without symbols/string table
Previously, this was broken - by setting PointerToSymbolTable to zero but still actually writing the string table length, the object file header was corrupted. Differential Revision: https://reviews.llvm.org/D56584 llvm-svn: 350926
This commit is contained in:
parent
eb4956cdb9
commit
c1a1893d9d
11
test/tools/llvm-objcopy/COFF/Inputs/no-symbols.yaml
Normal file
11
test/tools/llvm-objcopy/COFF/Inputs/no-symbols.yaml
Normal file
@ -0,0 +1,11 @@
|
||||
--- !COFF
|
||||
header:
|
||||
Machine: IMAGE_FILE_MACHINE_AMD64
|
||||
Characteristics: [ ]
|
||||
sections:
|
||||
- Name: .text
|
||||
Characteristics: [ ]
|
||||
Alignment: 4
|
||||
SectionData: E800000000C3C3C3
|
||||
symbols:
|
||||
...
|
@ -40,3 +40,9 @@ RUN: llvm-objcopy %t.x86_64.exe %t.x86_64-copy.exe
|
||||
RUN: obj2yaml %t.x86_64.exe > %t.x86_64.exe.yaml
|
||||
RUN: obj2yaml %t.x86_64-copy.exe > %t.x86_64-copy.exe.yaml
|
||||
RUN: cmp %t.x86_64.exe.yaml %t.x86_64-copy.exe.yaml
|
||||
|
||||
RUN: yaml2obj %p/Inputs/no-symbols.yaml > %t.no-symbols.o
|
||||
RUN: llvm-objcopy %t.no-symbols.o %t.no-symbols-copy.o
|
||||
RUN: obj2yaml %t.no-symbols.o > %t.no-symbols.o.yaml
|
||||
RUN: obj2yaml %t.no-symbols-copy.o > %t.no-symbols-copy.o.yaml
|
||||
RUN: cmp %t.no-symbols.o.yaml %t.no-symbols-copy.o.yaml
|
||||
|
@ -154,12 +154,11 @@ Error COFFWriter::finalize(bool IsBigObj) {
|
||||
size_t PointerToSymbolTable = FileSize;
|
||||
// StrTabSize <= 4 is the size of an empty string table, only consisting
|
||||
// of the length field.
|
||||
if (SymTabSize == 0 && StrTabSize <= 4) {
|
||||
// Don't point to the symbol table if empty.
|
||||
if (SymTabSize == 0 && StrTabSize <= 4 && Obj.IsPE) {
|
||||
// For executables, don't point to the symbol table and skip writing
|
||||
// the length field, if both the symbol and string tables are empty.
|
||||
PointerToSymbolTable = 0;
|
||||
// For executables, skip the length field of an empty string table.
|
||||
if (Obj.IsPE)
|
||||
StrTabSize = 0;
|
||||
StrTabSize = 0;
|
||||
}
|
||||
|
||||
size_t NumRawSymbols = SymTabSize / SymbolSize;
|
||||
|
Loading…
x
Reference in New Issue
Block a user