UeImageLib: Fix image debug address

This commit is contained in:
Marvin Häuser 2023-11-30 10:00:06 +00:00 committed by Mike Beaton
parent d1d2a0ed1f
commit 948e8e854a
3 changed files with 12 additions and 12 deletions

View File

@ -598,7 +598,7 @@ ToolImageEmitUeDebugTable (
) )
{ {
UE_DEBUG_TABLE DebugTable; UE_DEBUG_TABLE DebugTable;
uint8_t SymOffsetFactor; uint8_t SymSubtrahendFactor;
uint32_t DebugTableOffset; uint32_t DebugTableOffset;
uint32_t DebugTableSize; uint32_t DebugTableSize;
uint16_t Index; uint16_t Index;
@ -609,14 +609,14 @@ ToolImageEmitUeDebugTable (
assert (Image->DebugInfo.SymbolsPathLen <= MAX_UINT8); assert (Image->DebugInfo.SymbolsPathLen <= MAX_UINT8);
assert (IS_ALIGNED (BaseAddressSubtrahend, Image->SegmentInfo.SegmentAlignment)); assert (IS_ALIGNED (BaseAddressSubtrahend, Image->SegmentInfo.SegmentAlignment));
SymOffsetFactor = (uint8_t)(BaseAddressSubtrahend / Image->SegmentInfo.SegmentAlignment); SymSubtrahendFactor = (uint8_t)(BaseAddressSubtrahend / Image->SegmentInfo.SegmentAlignment);
if (SymOffsetFactor > 0x03) { if (SymSubtrahendFactor > 0x03) {
DEBUG_RAISE (); DEBUG_RAISE ();
return false; return false;
} }
DebugTable.ImageInfo = SymOffsetFactor; DebugTable.ImageInfo = SymSubtrahendFactor;
assert (UE_DEBUG_TABLE_IMAGE_INFO_SYM_OFFSET_FACTOR (DebugTable.ImageInfo) == SymOffsetFactor); assert (UE_DEBUG_TABLE_IMAGE_INFO_SYM_SUBTRAHEND_FACTOR (DebugTable.ImageInfo) == SymSubtrahendFactor);
assert ((DebugTable.ImageInfo & 0xFCU) == 0); assert ((DebugTable.ImageInfo & 0xFCU) == 0);
DebugTable.SymbolsPathLength = (uint8_t)Image->DebugInfo.SymbolsPathLen; DebugTable.SymbolsPathLength = (uint8_t)Image->DebugInfo.SymbolsPathLen;

View File

@ -407,11 +407,11 @@ typedef struct {
(OFFSET_OF (UE_DEBUG_TABLE, SymbolsPath) + 1U) (OFFSET_OF (UE_DEBUG_TABLE, SymbolsPath) + 1U)
/** /**
Retrieves the UE symbols address offset in SegmentAlignment-units. Retrieves the UE symbol address subtrahend in SegmentAlignment-units.
@param[in] ImageInfo The UE debug table image information. @param[in] ImageInfo The UE debug table image information.
**/ **/
#define UE_DEBUG_TABLE_IMAGE_INFO_SYM_OFFSET_FACTOR(ImageInfo) \ #define UE_DEBUG_TABLE_IMAGE_INFO_SYM_SUBTRAHEND_FACTOR(ImageInfo) \
((UINT8)((ImageInfo) & 0x03U)) ((UINT8)((ImageInfo) & 0x03U))
/** /**

View File

@ -1231,21 +1231,21 @@ UeLoaderGetImageDebugAddress (
RETURN_STATUS Status; RETURN_STATUS Status;
CONST UE_DEBUG_TABLE *DebugTable; CONST UE_DEBUG_TABLE *DebugTable;
UINT8 SymOffsetFactor; UINT8 SymOffsetFactor;
UINT32 SymOffsetAddend; UINT32 SymOffsetSubtrahend;
ASSERT (Context != NULL); ASSERT (Context != NULL);
SymOffsetAddend = 0; SymOffsetSubtrahend = 0;
Status = InternalGetDebugTable (Context, &DebugTable); Status = InternalGetDebugTable (Context, &DebugTable);
if (!RETURN_ERROR (Status)) { if (!RETURN_ERROR (Status)) {
SymOffsetFactor = UE_DEBUG_TABLE_IMAGE_INFO_SYM_OFFSET_FACTOR ( SymOffsetFactor = UE_DEBUG_TABLE_IMAGE_INFO_SYM_SUBTRAHEND_FACTOR (
DebugTable->ImageInfo DebugTable->ImageInfo
); );
SymOffsetAddend = (UINT32)SymOffsetFactor * Context->SegmentAlignment; SymOffsetSubtrahend = (UINT32)SymOffsetFactor * Context->SegmentAlignment;
} }
return UeLoaderGetImageAddress (Context) + SymOffsetAddend; return UeLoaderGetImageAddress (Context) - SymOffsetSubtrahend;
} }
RETURN_STATUS RETURN_STATUS