mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-01 19:26:16 +00:00
[RSYM]
- 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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user