OSDN Git Service

Object/COFF: Support large relocation table.
authorRui Ueyama <ruiu@google.com>
Fri, 21 Mar 2014 00:44:19 +0000 (00:44 +0000)
committerRui Ueyama <ruiu@google.com>
Fri, 21 Mar 2014 00:44:19 +0000 (00:44 +0000)
commit99995267aec69859a039670e3ba76c64f969b2bf
tree52728200aec3dfb7ab0c42e73ab4a26fc7b289f6
parentfab1a40a7b6133dec43fc9de7a6a36c7c719ed30
Object/COFF: Support large relocation table.

NumberOfRelocations field in COFF section table is only 16-bit wide. If an
object has more than 65535 relocations, the number of relocations is stored
to VirtualAddress field in the first relocation field, and a special flag
(IMAGE_SCN_LNK_NRELOC_OVFL) is set to Characteristics field.

In test we cheated a bit. I made up a test file so that it has
IMAGE_SCN_LNK_NRELOC_OVFL flag but the number of relocations is much smaller
than 65535. This is to avoid checking in a large test file just to test a
file with many relocations.

Differential Revision: http://llvm-reviews.chandlerc.com/D3139

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204418 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/Object/COFF.h
lib/Object/COFFObjectFile.cpp
test/tools/llvm-objdump/Inputs/many-relocs.obj-i386 [new file with mode: 0644]
test/tools/llvm-objdump/coff-many-relocs.test [new file with mode: 0644]