summaryrefslogtreecommitdiffstats
path: root/ArmPkg/Library/DebugPeCoffExtraActionLib/DebugPeCoffExtraActionLib.c
blob: 992c14d7ef9bdade760f8b8dbc9523751a447270 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/**@file

Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
Portions copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
Portions copyright (c) 2011 - 2012, ARM Ltd. All rights reserved.<BR>

SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#include <PiDxe.h>
#include <Library/PeCoffLib.h>

#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/PeCoffExtraActionLib.h>
#include <Library/PrintLib.h>

/**
  Performs additional actions after a PE/COFF image has been loaded and relocated.

  If ImageContext is NULL, then ASSERT().

  @param  ImageContext  Pointer to the image context structure that describes the
                        PE/COFF image that has already been loaded and relocated.

**/
VOID
EFIAPI
PeCoffLoaderRelocateImageExtraAction (
  IN OUT PE_COFF_LOADER_IMAGE_CONTEXT  *ImageContext
  )
{
#ifdef __GNUC__
  if (ImageContext->PdbPointer) {
    DEBUG ((
      DEBUG_LOAD | DEBUG_INFO,
      "add-symbol-file %a 0x%p\n",
      ImageContext->PdbPointer,
      (UINTN)(ImageContext->ImageAddress + ImageContext->SizeOfHeaders)
      ));
    return;
  }
#endif

  DEBUG ((
    DEBUG_LOAD | DEBUG_INFO,
    "Loading driver at 0x%11p EntryPoint=0x%11p\n",
    (VOID *)(UINTN)ImageContext->ImageAddress,
    FUNCTION_ENTRY_POINT (ImageContext->EntryPoint)
    ));
}

/**
  Performs additional actions just before a PE/COFF image is unloaded.  Any resources
  that were allocated by PeCoffLoaderRelocateImageExtraAction() must be freed.

  If ImageContext is NULL, then ASSERT().

  @param  ImageContext  Pointer to the image context structure that describes the
                        PE/COFF image that is being unloaded.

**/
VOID
EFIAPI
PeCoffLoaderUnloadImageExtraAction (
  IN OUT PE_COFF_LOADER_IMAGE_CONTEXT  *ImageContext
  )
{
#ifdef __GNUC__
  if (ImageContext->PdbPointer) {
    DEBUG ((
      DEBUG_LOAD | DEBUG_INFO,
      "remove-symbol-file %a 0x%08x\n",
      ImageContext->PdbPointer,
      (UINTN)(ImageContext->ImageAddress + ImageContext->SizeOfHeaders)
      ));
    return;
  }
#endif

  DEBUG ((
    DEBUG_LOAD | DEBUG_INFO,
    "Unloading driver at 0x%11p\n",
    (VOID *)(UINTN)ImageContext->ImageAddress
    ));
}