3 Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
4 Portions copyright (c) 2008 - 2010, Apple Inc. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #include <Library/PeCoffLib.h>
18 #include <Library/BaseLib.h>
19 #include <Library/DebugLib.h>
20 #include <Library/BaseMemoryLib.h>
21 #include <Library/PeCoffExtraActionLib.h>
22 #include <Library/PrintLib.h>
26 If the build is done on cygwin the paths are cygpaths.
27 /cygdrive/c/tmp.txt vs c:\tmp.txt so we need to convert
28 them to work with RVD commands
30 @param Name Path to convert if needed
34 DeCygwinPathIfNeeded (
42 Ptr
= AsciiStrStr (Name
, "/cygdrive/");
47 Len
= AsciiStrLen (Ptr
);
49 // convert "/cygdrive" to spaces
50 for (Index
= 0; Index
< 9; Index
++) {
58 // switch path seperators
59 for (Index
= 11; Index
< Len
; Index
++) {
60 if (Ptr
[Index
] == '/') {
70 Performs additional actions after a PE/COFF image has been loaded and relocated.
72 If ImageContext is NULL, then ASSERT().
74 @param ImageContext Pointer to the image context structure that describes the
75 PE/COFF image that has already been loaded and relocated.
80 PeCoffLoaderRelocateImageExtraAction (
81 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
85 // Print out the command for the RVD debugger to load symbols for this image
86 DEBUG ((EFI_D_ERROR
, "load /a /ni /np %a &0x%08x\n", DeCygwinPathIfNeeded (ImageContext
->PdbPointer
), (UINTN
)(ImageContext
->ImageAddress
+ ImageContext
->SizeOfHeaders
)));
88 // This may not work correctly if you generate PE/COFF directlyas then the Offset would not be required
89 DEBUG ((EFI_D_ERROR
, "add-symbol-file %a 0x%08x\n", DeCygwinPathIfNeeded (ImageContext
->PdbPointer
), (UINTN
)(ImageContext
->ImageAddress
+ ImageContext
->SizeOfHeaders
)));
91 DEBUG ((EFI_D_ERROR
, "Loading driver at 0x%11p EntryPoint=0x%11p ", (VOID
*)(UINTN
) ImageContext
->ImageAddress
, FUNCTION_ENTRY_POINT (ImageContext
->EntryPoint
)));
98 Performs additional actions just before a PE/COFF image is unloaded. Any resources
99 that were allocated by PeCoffLoaderRelocateImageExtraAction() must be freed.
101 If ImageContext is NULL, then ASSERT().
103 @param ImageContext Pointer to the image context structure that describes the
104 PE/COFF image that is being unloaded.
109 PeCoffLoaderUnloadImageExtraAction (
110 IN OUT PE_COFF_LOADER_IMAGE_CONTEXT
*ImageContext
114 // Print out the command for the RVD debugger to load symbols for this image
115 DEBUG ((EFI_D_ERROR
, "unload symbols_only %a", DeCygwinPathIfNeeded (ImageContext
->PdbPointer
)));
117 // This may not work correctly if you generate PE/COFF directlyas then the Offset would not be required
118 DEBUG ((EFI_D_ERROR
, "remove-symbol-file %a 0x%08x\n", DeCygwinPathIfNeeded (ImageContext
->PdbPointer
), (UINTN
)(ImageContext
->ImageAddress
+ ImageContext
->SizeOfHeaders
)));
120 DEBUG ((EFI_D_ERROR
, "Unloading %a", ImageContext
->PdbPointer
));