summaryrefslogtreecommitdiff
path: root/ArmPkg/Library
diff options
context:
space:
mode:
authorAJFISH <AJFISH@6f19259b-4bc3-4df7-8a09-765794883524>2010-01-14 23:39:29 +0000
committerAJFISH <AJFISH@6f19259b-4bc3-4df7-8a09-765794883524>2010-01-14 23:39:29 +0000
commit225290eba733e5ca7149d1789ccce5ef15c38df5 (patch)
treeaead584e85f8169bea5b4282e66b047706e42569 /ArmPkg/Library
parent7c1c4dcf78041c489abc3314f19775929b7c8d29 (diff)
downloadedk2-platforms-225290eba733e5ca7149d1789ccce5ef15c38df5.tar.xz
Added new PeCoffGetEntryPoint lib function to get size of PE/COFF header. This is needed for debug prints with PE/COFF images that started as ELF or Mach-O. Moved and debugged ARM semihosting lib for RVD that prints out the debugger symbol load commands in a window on the debugger. Trying to write a script file, but that crashes RVD. Added debug print to BeagleBoard Sec that prints out RVD debugger command to load symbols for the Sec. Synced the rest of the code.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9763 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPkg/Library')
-rw-r--r--ArmPkg/Library/RvdPeCoffExtraActionLib/RvdPeCoffExtraActionLib.c (renamed from ArmPkg/Library/RviPeCoffExtraActionLib/RviPeCoffExtraActionLib.c)59
-rw-r--r--ArmPkg/Library/RvdPeCoffExtraActionLib/RvdPeCoffExtraActionLib.inf (renamed from ArmPkg/Library/RviPeCoffExtraActionLib/RviPeCoffExtraActionLib.inf)14
-rw-r--r--ArmPkg/Library/SemiHostingSerialPortLib/SerialPortLib.c2
-rw-r--r--ArmPkg/Library/SemihostLib/Arm/SemihostLib.c50
-rw-r--r--ArmPkg/Library/SemihostLib/SemihostLib.inf4
5 files changed, 82 insertions, 47 deletions
diff --git a/ArmPkg/Library/RviPeCoffExtraActionLib/RviPeCoffExtraActionLib.c b/ArmPkg/Library/RvdPeCoffExtraActionLib/RvdPeCoffExtraActionLib.c
index 2e44c629e4..071c510dde 100644
--- a/ArmPkg/Library/RviPeCoffExtraActionLib/RviPeCoffExtraActionLib.c
+++ b/ArmPkg/Library/RvdPeCoffExtraActionLib/RvdPeCoffExtraActionLib.c
@@ -10,8 +10,6 @@ http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-
**/
#include <PiDxe.h>
@@ -21,12 +19,53 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include <Library/DebugLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/PeCoffExtraActionLib.h>
-#include <Library/SerialPortLib.h>
+#include <Library/SemihostLib.h>
#include <Library/PrintLib.h>
+/**
+ Append string to debugger script file, create file if needed.
+
+ This library can show up in mulitple places so we need to append the file every time we write to it.
+ For example Sec can use this to load the DXE core, and the DXE core would use this to load all the
+ other modules. So we have two instances of the library in the system.
+ @param Buffer Buffer to write to file.
+ @param Length Length of Buffer in bytes.
+**/
VOID
-DeCygwinIfNeeded (
+WriteStringToFile (
+ IN VOID *Buffer,
+ IN UINT32 Length
+ )
+{
+ // Working around and issue with the code that is commented out. For now send it to the console.
+ // You can copy the console into a file and source the file as a script and you get symbols.
+ // This gets you all the symbols except for SEC. To get SEC symbols you need to copy the
+ // debug print in the SEC into the debugger manually
+ SemihostWriteString (Buffer);
+/*
+ I'm currently having issues with this code crashing the debugger. Seems like it should work.
+
+ UINT32 SemihostHandle;
+ UINT32 SemihostMode = SEMIHOST_FILE_MODE_WRITE | SEMIHOST_FILE_MODE_BINARY | SEMIHOST_FILE_MODE_CREATE;
+
+ SemihostFileOpen ("c:\rvi_symbols.inc", SemihostMode, &SemihostHandle);
+ SemihostFileWrite (SemihostHandle, &Length, Buffer);
+ SemihostFileClose (SemihostHandle);
+ */
+}
+
+
+/**
+ If the build is done on cygwin the paths are cygpaths.
+ /cygdrive/c/tmp.txt vs c:\tmp.txt so we need to convert
+ them to work with RVD commands
+
+ @param Name Path to convert if needed
+
+**/
+CHAR8 *
+DeCygwinPathIfNeeded (
IN CHAR8 *Name
)
{
@@ -36,7 +75,7 @@ DeCygwinIfNeeded (
Ptr = AsciiStrStr (Name, "/cygdrive/");
if (Ptr == NULL) {
- return;
+ return Name;
}
Len = AsciiStrLen (Ptr);
@@ -56,6 +95,8 @@ DeCygwinIfNeeded (
Ptr[Index] = '\\' ;
}
}
+
+ return Name;
}
@@ -77,9 +118,9 @@ PeCoffLoaderRelocateImageExtraAction (
CHAR8 Buffer[256];
AsciiSPrint (Buffer, sizeof(Buffer), "load /a /ni /np %a &0x%08x\n", ImageContext->PdbPointer, (UINTN)(ImageContext->ImageAddress + ImageContext->SizeOfHeaders));
- DeCygwinIfNeeded (&Buffer[16]);
+ DeCygwinPathIfNeeded (&Buffer[16]);
- SerialPortWrite ((UINT8 *) Buffer, AsciiStrLen (Buffer));
+ WriteStringToFile (Buffer, AsciiStrSize (Buffer));
}
@@ -103,7 +144,7 @@ PeCoffLoaderUnloadImageExtraAction (
CHAR8 Buffer[256];
AsciiSPrint (Buffer, sizeof(Buffer), "unload symbols_only %a", ImageContext->PdbPointer);
- DeCygwinIfNeeded (Buffer);
+ DeCygwinPathIfNeeded (Buffer);
- SerialPortWrite ((UINT8 *) Buffer, AsciiStrLen (Buffer));
+ WriteStringToFile (Buffer, AsciiStrSize (Buffer));
}
diff --git a/ArmPkg/Library/RviPeCoffExtraActionLib/RviPeCoffExtraActionLib.inf b/ArmPkg/Library/RvdPeCoffExtraActionLib/RvdPeCoffExtraActionLib.inf
index 947fcf4461..50eb57b2a9 100644
--- a/ArmPkg/Library/RviPeCoffExtraActionLib/RviPeCoffExtraActionLib.inf
+++ b/ArmPkg/Library/RvdPeCoffExtraActionLib/RvdPeCoffExtraActionLib.inf
@@ -17,13 +17,11 @@
[Defines]
INF_VERSION = 0x00010005
- BASE_NAME = RviUnixPeCoffExtraActionLib
+ BASE_NAME = RvdUnixPeCoffExtraActionLib
FILE_GUID = 5EDEB7E7-EA55-4E92-8216-335AC98A3B11
- MODULE_TYPE = DXE_DRIVER
+ MODULE_TYPE = BASE
VERSION_STRING = 1.0
- LIBRARY_CLASS = PeCoffExtraActionLib|DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_DRIVER
- EDK_RELEASE_VERSION = 0x00020000
- EFI_SPECIFICATION_VERSION = 0x00020000
+ LIBRARY_CLASS = PeCoffExtraActionLib
#
# The following information is for reference only and not required by the build tools.
@@ -32,7 +30,7 @@
#
[Sources.common]
- RviPeCoffExtraActionLib.c
+ RvdPeCoffExtraActionLib.c
[Packages]
MdePkg/MdePkg.dec
@@ -40,6 +38,4 @@
[LibraryClasses]
DebugLib
- HobLib
- BaseMemoryLib
- SerialLib
+ SemihostLib
diff --git a/ArmPkg/Library/SemiHostingSerialPortLib/SerialPortLib.c b/ArmPkg/Library/SemiHostingSerialPortLib/SerialPortLib.c
index df43f31413..114dfe804d 100644
--- a/ArmPkg/Library/SemiHostingSerialPortLib/SerialPortLib.c
+++ b/ArmPkg/Library/SemiHostingSerialPortLib/SerialPortLib.c
@@ -129,7 +129,7 @@ SerialPortRead (
Check to see if any data is avaiable to be read from the debug device.
@retval TRUE At least one byte of data is avaiable to be read
- @retval FALS No data is avaiable to be read
+ @retval FALSE No data is avaiable to be read
**/
BOOLEAN
diff --git a/ArmPkg/Library/SemihostLib/Arm/SemihostLib.c b/ArmPkg/Library/SemihostLib/Arm/SemihostLib.c
index e1a515ef21..31efc0a16e 100644
--- a/ArmPkg/Library/SemihostLib/Arm/SemihostLib.c
+++ b/ArmPkg/Library/SemihostLib/Arm/SemihostLib.c
@@ -36,8 +36,9 @@ SemihostFileOpen (
SEMIHOST_FILE_OPEN_BLOCK OpenBlock;
INT32 Result;
- if (FileHandle == NULL)
+ if (FileHandle == NULL) {
return EFI_INVALID_PARAMETER;
+ }
OpenBlock.FileName = FileName;
OpenBlock.Mode = Mode;
@@ -45,12 +46,9 @@ SemihostFileOpen (
Result = Semihost_SYS_OPEN(&OpenBlock);
- if (Result == -1)
- {
+ if (Result == -1) {
return EFI_NOT_FOUND;
- }
- else
- {
+ } else {
*FileHandle = Result;
return EFI_SUCCESS;
}
@@ -70,10 +68,11 @@ SemihostFileSeek (
Result = Semihost_SYS_SEEK(&SeekBlock);
- if (Result == 0)
+ if (Result == 0) {
return EFI_SUCCESS;
- else
+ } else {
return EFI_ABORTED;
+ }
}
EFI_STATUS
@@ -86,8 +85,9 @@ SemihostFileRead (
SEMIHOST_FILE_READ_WRITE_BLOCK ReadBlock;
UINT32 Result;
- if ((Length == NULL) || (Buffer == NULL))
- return EFI_INVALID_PARAMETER;
+ if ((Length == NULL) || (Buffer == NULL)) {
+ return EFI_INVALID_PARAMETER;
+ }
ReadBlock.Handle = FileHandle;
ReadBlock.Buffer = Buffer;
@@ -95,12 +95,9 @@ SemihostFileRead (
Result = Semihost_SYS_READ(&ReadBlock);
- if (Result == *Length)
- {
+ if (Result == *Length) {
return EFI_ABORTED;
- }
- else
- {
+ } else {
*Length -= Result;
return EFI_SUCCESS;
}
@@ -115,8 +112,9 @@ SemihostFileWrite (
{
SEMIHOST_FILE_READ_WRITE_BLOCK WriteBlock;
- if ((Length == NULL) || (Buffer == NULL))
+ if ((Length == NULL) || (Buffer == NULL)) {
return EFI_INVALID_PARAMETER;
+ }
WriteBlock.Handle = FileHandle;
WriteBlock.Buffer = Buffer;
@@ -134,10 +132,11 @@ SemihostFileClose (
{
INT32 Result = Semihost_SYS_CLOSE(&FileHandle);
- if (Result == -1)
+ if (Result == -1) {
return EFI_INVALID_PARAMETER;
- else
+ } else {
return EFI_SUCCESS;
+ }
}
EFI_STATUS
@@ -148,17 +147,15 @@ SemihostFileLength (
{
INT32 Result;
- if (Length == NULL)
+ if (Length == NULL) {
return EFI_INVALID_PARAMETER;
+ }
Result = Semihost_SYS_FLEN(&FileHandle);
- if (Result == -1)
- {
+ if (Result == -1) {
return EFI_ABORTED;
- }
- else
- {
+ } else {
*Length = Result;
return EFI_SUCCESS;
}
@@ -177,10 +174,11 @@ SemihostFileRemove (
Result = Semihost_SYS_REMOVE(&RemoveBlock);
- if (Result == 0)
+ if (Result == 0) {
return EFI_SUCCESS;
- else
+ } else {
return EFI_ABORTED;
+ }
}
CHAR8
diff --git a/ArmPkg/Library/SemihostLib/SemihostLib.inf b/ArmPkg/Library/SemihostLib/SemihostLib.inf
index d05188c771..c4b5c682d0 100644
--- a/ArmPkg/Library/SemihostLib/SemihostLib.inf
+++ b/ArmPkg/Library/SemihostLib/SemihostLib.inf
@@ -1,5 +1,5 @@
#/** @file
-# Semihosting serail port lib
+# Semihosting JTAG lib
#
# Copyright (c) 2008 - 2010, Apple Inc.
#
@@ -17,7 +17,7 @@
INF_VERSION = 0x00010005
BASE_NAME = SemihostLib
FILE_GUID = C40D08BA-DB7B-4F07-905A-C5FE4B5AF987
- MODULE_TYPE = UEFI_DRIVER
+ MODULE_TYPE = BASE
VERSION_STRING = 1.0
LIBRARY_CLASS = SemihostLib