From ae08542f8973eab03727a4fd8f1d4a314dd66454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20Ha=CC=88user?= <8659494+mhaeuser@users.noreply.github.com> Date: Sun, 23 Apr 2023 22:55:02 +0200 Subject: [PATCH] ImageTool: Support stripping relocs --- BaseTools/ImageTool/Image.c | 12 ++++++++++++ BaseTools/ImageTool/ImageTool.c | 12 ++++++++---- BaseTools/ImageTool/ImageTool.h | 8 +++++++- BaseTools/ImageTool/ImageToolEmit.c | 5 +++-- BaseTools/ImageTool/ImageToolEmit.h | 3 ++- BaseTools/ImageTool/PeEmitCommon.c | 7 ++++++- 6 files changed, 38 insertions(+), 9 deletions(-) diff --git a/BaseTools/ImageTool/Image.c b/BaseTools/ImageTool/Image.c index b384c213b8..702e33824e 100644 --- a/BaseTools/ImageTool/Image.c +++ b/BaseTools/ImageTool/Image.c @@ -639,3 +639,15 @@ ToolImageCompare ( return true; } + +void +ToolImageStripRelocs ( + image_tool_image_info_t *Image + ) +{ + Image->RelocInfo.NumRelocs = 0; + free (Image->RelocInfo.Relocs); + Image->RelocInfo.Relocs = NULL; + + Image->RelocInfo.RelocsStripped = TRUE; +} diff --git a/BaseTools/ImageTool/ImageTool.c b/BaseTools/ImageTool/ImageTool.c index aa88c1d0d6..a20ed81a94 100644 --- a/BaseTools/ImageTool/ImageTool.c +++ b/BaseTools/ImageTool/ImageTool.c @@ -9,6 +9,8 @@ #include #include +#include + #include "ImageToolEmit.h" #define EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION 0x0 @@ -289,7 +291,8 @@ GenExecutable ( IN const char *FormatName, IN const char *TypeName, IN const char *HiiFileName, - IN const char *BaseAddress + IN const char *BaseAddress, + IN bool Strip ) { UINT32 InputFileSize; @@ -356,7 +359,8 @@ GenExecutable ( HiiFileSize, BaseAddress != NULL, NewBaseAddress, - InputFileName + InputFileName, + Strip ); if (OutputFile == NULL) { @@ -390,7 +394,7 @@ int main (int argc, const char *argv[]) return -1; } - Status = GenExecutable (argv[3], argv[2], "PE", argv[4], argc >= 6 ? argv[5] : NULL, NULL); + Status = GenExecutable (argv[3], argv[2], "PE", argv[4], argc >= 6 ? argv[5] : NULL, NULL, FALSE); if (RETURN_ERROR (Status)) { raise (); return -1; @@ -418,7 +422,7 @@ int main (int argc, const char *argv[]) return -1; } - Status = GenExecutable (argv[4], argv[3], "PE", NULL, NULL, argv[2]); + Status = GenExecutable (argv[4], argv[3], "PE", NULL, NULL, argv[2], FALSE); if (RETURN_ERROR (Status)) { raise (); return -1; diff --git a/BaseTools/ImageTool/ImageTool.h b/BaseTools/ImageTool/ImageTool.h index 170264ff85..8b9650a7f7 100644 --- a/BaseTools/ImageTool/ImageTool.h +++ b/BaseTools/ImageTool/ImageTool.h @@ -130,6 +130,11 @@ ToolImageCompare ( const image_tool_image_info_t *Image2 ); +void +ToolImageStripRelocs ( + image_tool_image_info_t *Image + ); + RETURN_STATUS ToolContextConstructPe ( OUT image_tool_image_info_t *Image, @@ -145,7 +150,8 @@ CheckToolImage ( void * ToolImageEmitPe ( image_tool_image_info_t *Image, - uint32_t *FileSize + uint32_t *FileSize, + bool Strip ); RETURN_STATUS diff --git a/BaseTools/ImageTool/ImageToolEmit.c b/BaseTools/ImageTool/ImageToolEmit.c index 0062a89a78..a9fd32689b 100644 --- a/BaseTools/ImageTool/ImageToolEmit.c +++ b/BaseTools/ImageTool/ImageToolEmit.c @@ -96,7 +96,8 @@ ToolImageEmit ( IN uint32_t HiiFileSize, IN bool Relocate, IN uint64_t BaseAddress, - IN const char *SymbolsPath OPTIONAL + IN const char *SymbolsPath OPTIONAL, + IN bool Strip ) { RETURN_STATUS Status; @@ -161,7 +162,7 @@ ToolImageEmit ( OutputFile = NULL; if (Format == UefiImageFormatPe) { - OutputFile = ToolImageEmitPe (&ImageInfo, OutputFileSize); + OutputFile = ToolImageEmitPe (&ImageInfo, OutputFileSize, Strip); } else { assert (false); } diff --git a/BaseTools/ImageTool/ImageToolEmit.h b/BaseTools/ImageTool/ImageToolEmit.h index d52a2bf7d3..8f056d94a8 100644 --- a/BaseTools/ImageTool/ImageToolEmit.h +++ b/BaseTools/ImageTool/ImageToolEmit.h @@ -21,7 +21,8 @@ ToolImageEmit ( IN uint32_t HiiFileSize, IN bool Relocate, IN uint64_t BaseAddress, - IN const char *SymbolsPath OPTIONAL + IN const char *SymbolsPath OPTIONAL, + IN bool Strip ); #endif // IMAGE_TOOL_EMIT_H diff --git a/BaseTools/ImageTool/PeEmitCommon.c b/BaseTools/ImageTool/PeEmitCommon.c index eb8b612636..cbef5ac9c9 100644 --- a/BaseTools/ImageTool/PeEmitCommon.c +++ b/BaseTools/ImageTool/PeEmitCommon.c @@ -8,9 +8,14 @@ void * ToolImageEmitPe ( image_tool_image_info_t *Image, - uint32_t *FileSize + uint32_t *FileSize, + bool Strip ) { + if (Strip) { + ToolImageStripRelocs (Image); + } + switch (Image->HeaderInfo.Machine) { case IMAGE_FILE_MACHINE_I386: case IMAGE_FILE_MACHINE_ARMTHUMB_MIXED: