- 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
-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,
static int
ProcessRelocations(ULONG *ProcessedRelocsLength, void **ProcessedRelocs,
void *RawData, PIMAGE_OPTIONAL_HEADER OptHeader,
{
TargetSectionHeader = FindSectionForRVA(BaseReloc->VirtualAddress, NumberOfSections,
SectionHeaders);
{
TargetSectionHeader = FindSectionForRVA(BaseReloc->VirtualAddress, NumberOfSections,
SectionHeaders);
- if (NULL != TargetSectionHeader && IncludeRelocationsForSection(TargetSectionHeader))
+ if (NULL != TargetSectionHeader)
{
AcceptedRelocs = *ProcessedRelocs;
Found = 0;
{
AcceptedRelocs = *ProcessedRelocs;
Found = 0;