- Don't strip relocations for some sections. Linker knows better if they are needed. Fixes removed relocations for delayed imports in idata section. Bug traced by me, Timo and Amine.
See issue #6618 for more details.

svn path=/trunk/; revision=54613
This commit is contained in:
Rafal Harabien
2011-12-08 19:02:04 +00:00
parent 65b1bedcb3
commit 5ef42e9838
+1 -30
View File
@@ -431,35 +431,6 @@ FindSectionForRVA(DWORD RVA, unsigned NumberOfSections, PIMAGE_SECTION_HEADER Se
return NULL;
}
static int
IncludeRelocationsForSection(PIMAGE_SECTION_HEADER SectionHeader)
{
static char *BlacklistedSections[] =
{
".edata",
".idata",
".reloc"
};
char SectionName[IMAGE_SIZEOF_SHORT_NAME];
unsigned i;
if (0 != (SectionHeader->Characteristics & IMAGE_SCN_LNK_REMOVE))
{
return 0;
}
for (i = 0; i < sizeof(BlacklistedSections) / sizeof(BlacklistedSections[0]); i++)
{
strncpy(SectionName, BlacklistedSections[i], IMAGE_SIZEOF_SHORT_NAME);
if (0 == memcmp(SectionName, SectionHeader->Name, IMAGE_SIZEOF_SHORT_NAME))
{
return 0;
}
}
return 1;
}
static int
ProcessRelocations(ULONG *ProcessedRelocsLength, void **ProcessedRelocs,
void *RawData, PIMAGE_OPTIONAL_HEADER OptHeader,
@@ -505,7 +476,7 @@ ProcessRelocations(ULONG *ProcessedRelocsLength, void **ProcessedRelocs,
{
TargetSectionHeader = FindSectionForRVA(BaseReloc->VirtualAddress, NumberOfSections,
SectionHeaders);
if (NULL != TargetSectionHeader && IncludeRelocationsForSection(TargetSectionHeader))
if (NULL != TargetSectionHeader)
{
AcceptedRelocs = *ProcessedRelocs;
Found = 0;