boot: Be more explicit where to look for sections

It only really makes sense to fetch the location from either one of
these fields, depending on whether we are looking at an in-memory
(relocated) or a file PE image.
This commit is contained in:
Jan Janssen
2022-09-10 08:24:41 +02:00
parent 9a18458834
commit c01bf79432
+9 -11
View File
@@ -142,12 +142,13 @@ static void locate_sections(
const PeSectionHeader section_table[],
UINTN n_table,
const char * const sections[],
UINTN *addrs,
UINTN *offsets,
UINTN *sizes) {
UINTN *sizes,
bool in_memory) {
assert(section_table);
assert(sections);
assert(offsets);
assert(sizes);
for (UINTN i = 0; i < n_table; i++) {
@@ -157,10 +158,7 @@ static void locate_sections(
if (memcmp(sect->Name, sections[j], strlen8(sections[j])) != 0)
continue;
if (addrs)
addrs[j] = sect->VirtualAddress;
if (offsets)
offsets[j] = sect->PointerToRawData;
offsets[j] = in_memory ? sect->VirtualAddress : sect->PointerToRawData;
sizes[j] = sect->VirtualSize;
}
}
@@ -178,8 +176,8 @@ static uint32_t get_compatibility_entry_address(const DosFileHeader *dos, const
pe->FileHeader.NumberOfSections,
sections,
&addr,
NULL,
&size);
&size,
/*in_memory=*/true);
if (size == 0)
return 0;
@@ -270,8 +268,8 @@ EFI_STATUS pe_memory_locate_sections(const void *base, const char * const sectio
pe->FileHeader.NumberOfSections,
sections,
addrs,
NULL,
sizes);
sizes,
/*in_memory=*/true);
return EFI_SUCCESS;
}
@@ -334,7 +332,7 @@ EFI_STATUS pe_file_locate_sections(
return EFI_LOAD_ERROR;
locate_sections(section_table, pe.FileHeader.NumberOfSections,
sections, NULL, offsets, sizes);
sections, offsets, sizes, /*in_memory=*/false);
return EFI_SUCCESS;
}