Adding support for BeagleBoard.
ArmPkg - Supoprt for ARM specific things that can change as the architecture changes. Plus semihosting JTAG drivers. EmbeddedPkg - Generic support for an embeddded platform. Including a light weight command line shell. BeagleBoardPkg - Platform specifics for BeagleBoard. SD Card works, but USB has issues. Looks like a bug in the open source USB stack (Our internal stack works fine). git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9518 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
21
BeagleBoardPkg/Debugger_scripts/rvi_boot_from_ram.inc
Normal file
21
BeagleBoardPkg/Debugger_scripts/rvi_boot_from_ram.inc
Normal file
@@ -0,0 +1,21 @@
|
||||
//
|
||||
// Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
//
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are licensed and made available under the terms and conditions of the BSD License
|
||||
// which accompanies this distribution. The full text of the license may be found at
|
||||
// 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.
|
||||
//
|
||||
error = continue
|
||||
unload
|
||||
error = abort
|
||||
|
||||
setreg @CP15_CONTROL = 0x0005107E
|
||||
setreg @pc=0x80008208
|
||||
setreg @cpsr=0x000000D3
|
||||
dis/D
|
||||
readfile,raw,nowarn "ZZZZZZ/FV/BEAGLEBOARD_EFI.fd"=0x80008000
|
||||
|
23
BeagleBoardPkg/Debugger_scripts/rvi_convert_symbols.sh
Executable file
23
BeagleBoardPkg/Debugger_scripts/rvi_convert_symbols.sh
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
#
|
||||
# All rights reserved. This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
# 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.
|
||||
#
|
||||
|
||||
|
||||
IN=`/usr/bin/cygpath -u $1`
|
||||
OUT=`/usr/bin/cygpath -u $2`
|
||||
|
||||
/usr/bin/sed -e "s/\/cygdrive\/\(.\)/load\/a\/ni\/np \"\1:/g" \
|
||||
-e 's:\\:/:g' \
|
||||
-e "s/^/load\/a\/ni\/np \"/g" \
|
||||
-e "s/dll /dll\" \&/g" \
|
||||
$IN | /usr/bin/sort.exe --key=3 --output=$OUT
|
||||
|
BIN
BeagleBoardPkg/Debugger_scripts/rvi_dummy.axf
Executable file
BIN
BeagleBoardPkg/Debugger_scripts/rvi_dummy.axf
Executable file
Binary file not shown.
67
BeagleBoardPkg/Debugger_scripts/rvi_hw_setup.inc
Normal file
67
BeagleBoardPkg/Debugger_scripts/rvi_hw_setup.inc
Normal file
@@ -0,0 +1,67 @@
|
||||
//
|
||||
// Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
//
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are licensed and made available under the terms and conditions of the BSD License
|
||||
// which accompanies this distribution. The full text of the license may be found at
|
||||
// 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.
|
||||
//
|
||||
|
||||
error = continue
|
||||
unload
|
||||
error = abort
|
||||
|
||||
setreg @CP15_CONTROL = 0x0005107E
|
||||
setreg @cpsr=0x000000D3
|
||||
|
||||
; General clock settings.
|
||||
setmem /32 0x48307270=0x00000080
|
||||
setmem /32 0x48306D40=0x00000003
|
||||
setmem /32 0x48005140=0x03020A50
|
||||
|
||||
;Clock configuration
|
||||
setmem /32 0x48004A40=0x0000030A
|
||||
setmem /32 0x48004C40=0x00000015
|
||||
|
||||
;DPLL3 (Core) settings
|
||||
setmem /32 0x48004D00=0x00370037
|
||||
setmem /32 0x48004D30=0x00000000
|
||||
setmem /32 0x48004D40=0x094C0C00
|
||||
|
||||
;DPLL4 (Peripheral) settings
|
||||
setmem /32 0x48004D00=0x00370037
|
||||
setmem /32 0x48004D30=0x00000000
|
||||
setmem /32 0x48004D44=0x0001B00C
|
||||
setmem /32 0x48004D48=0x00000009
|
||||
|
||||
;DPLL1 (MPU) settings
|
||||
setmem /32 0x48004904=0x00000037
|
||||
setmem /32 0x48004934=0x00000000
|
||||
setmem /32 0x48004940=0x0011F40C
|
||||
setmem /32 0x48004944=0x00000001
|
||||
setmem /32 0x48004948=0x00000000
|
||||
|
||||
;RAM setup.
|
||||
setmem /16 0x6D000010=0x0000
|
||||
setmem /16 0x6D000040=0x0001
|
||||
setmem /16 0x6D000044=0x0100
|
||||
setmem /16 0x6D000048=0x0000
|
||||
setmem /32 0x6D000060=0x0000000A
|
||||
setmem /32 0x6D000070=0x00000081
|
||||
setmem /16 0x6D000040=0x0003
|
||||
setmem /32 0x6D000080=0x02D04011
|
||||
setmem /16 0x6D000084=0x0032
|
||||
setmem /16 0x6D00008C=0x0000
|
||||
setmem /32 0x6D00009C=0xBA9DC4C6
|
||||
setmem /32 0x6D0000A0=0x00012522
|
||||
setmem /32 0x6D0000A4=0x0004E201
|
||||
setmem /16 0x6D000040=0x0003
|
||||
setmem /32 0x6D0000B0=0x02D04011
|
||||
setmem /16 0x6D0000B4=0x0032
|
||||
setmem /16 0x6D0000BC=0x0000
|
||||
setmem /32 0x6D0000C4=0xBA9DC4C6
|
||||
setmem /32 0x6D0000C8=0x00012522
|
||||
setmem /32 0x6D0000D4=0x0004E201
|
23
BeagleBoardPkg/Debugger_scripts/rvi_load_symbols.inc
Normal file
23
BeagleBoardPkg/Debugger_scripts/rvi_load_symbols.inc
Normal file
@@ -0,0 +1,23 @@
|
||||
//
|
||||
// Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
//
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are licensed and made available under the terms and conditions of the BSD License
|
||||
// which accompanies this distribution. The full text of the license may be found at
|
||||
// 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 'ZZZZZZ/rvi_symbols_macros.inc'
|
||||
|
||||
macro write_symbols_file("ZZZZZZ/rvi_symbols.tmp", 0x00000000, 0x10000000)
|
||||
|
||||
host "bash -o igncr ZZZZZZ/rvi_convert_symbols.sh ZZZZZZ/rvi_symbols.tmp ZZZZZZ/rvi_symbols.inc"
|
||||
include 'ZZZZZZ/rvi_symbols.inc'
|
||||
load /NI /NP 'ZZZZZZ/rvi_dummy.axf' ;.constdata
|
||||
unload rvi_dummy.axf
|
||||
delfile rvi_dummy.axf
|
||||
|
||||
|
194
BeagleBoardPkg/Debugger_scripts/rvi_symbols_macros.inc
Executable file
194
BeagleBoardPkg/Debugger_scripts/rvi_symbols_macros.inc
Executable file
@@ -0,0 +1,194 @@
|
||||
//
|
||||
// Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
//
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are licensed and made available under the terms and conditions of the BSD License
|
||||
// which accompanies this distribution. The full text of the license may be found at
|
||||
// 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.
|
||||
//
|
||||
|
||||
define /R int compare_guid(guid1, guid2)
|
||||
unsigned char *guid1;
|
||||
unsigned char *guid2;
|
||||
{
|
||||
return strncmp(guid1, guid2, 16);
|
||||
}
|
||||
.
|
||||
|
||||
define /R unsigned char * find_system_table(mem_start, mem_size)
|
||||
unsigned char *mem_start;
|
||||
unsigned long mem_size;
|
||||
{
|
||||
unsigned char *mem_ptr;
|
||||
|
||||
mem_ptr = mem_start + mem_size;
|
||||
|
||||
do
|
||||
{
|
||||
mem_ptr -= 0x400000; // 4 MB
|
||||
|
||||
if (strncmp(mem_ptr, "IBI SYST", 8) == 0)
|
||||
{
|
||||
return *(unsigned long *)(mem_ptr + 8); // EfiSystemTableBase
|
||||
}
|
||||
|
||||
} while (mem_ptr > mem_start);
|
||||
|
||||
return 0;
|
||||
}
|
||||
.
|
||||
|
||||
define /R unsigned char * find_debug_info_table_header(system_table)
|
||||
unsigned char *system_table;
|
||||
{
|
||||
unsigned long configuration_table_entries;
|
||||
unsigned char *configuration_table;
|
||||
unsigned long index;
|
||||
unsigned char debug_table_guid[16];
|
||||
|
||||
// Fill in the debug table's guid
|
||||
debug_table_guid[ 0] = 0x77;
|
||||
debug_table_guid[ 1] = 0x2E;
|
||||
debug_table_guid[ 2] = 0x15;
|
||||
debug_table_guid[ 3] = 0x49;
|
||||
debug_table_guid[ 4] = 0xDA;
|
||||
debug_table_guid[ 5] = 0x1A;
|
||||
debug_table_guid[ 6] = 0x64;
|
||||
debug_table_guid[ 7] = 0x47;
|
||||
debug_table_guid[ 8] = 0xB7;
|
||||
debug_table_guid[ 9] = 0xA2;
|
||||
debug_table_guid[10] = 0x7A;
|
||||
debug_table_guid[11] = 0xFE;
|
||||
debug_table_guid[12] = 0xFE;
|
||||
debug_table_guid[13] = 0xD9;
|
||||
debug_table_guid[14] = 0x5E;
|
||||
debug_table_guid[15] = 0x8B;
|
||||
|
||||
configuration_table_entries = *(unsigned long *)(system_table + 64);
|
||||
configuration_table = *(unsigned long *)(system_table + 68);
|
||||
|
||||
for (index = 0; index < configuration_table_entries; index++)
|
||||
{
|
||||
if (compare_guid(configuration_table, debug_table_guid) == 0)
|
||||
{
|
||||
return *(unsigned long *)(configuration_table + 16);
|
||||
}
|
||||
|
||||
configuration_table += 20;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
.
|
||||
|
||||
define /R int valid_pe_header(header)
|
||||
unsigned char *header;
|
||||
{
|
||||
if ((header[0x00] == 'M') &&
|
||||
(header[0x01] == 'Z') &&
|
||||
(header[0x80] == 'P') &&
|
||||
(header[0x81] == 'E'))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
.
|
||||
|
||||
define /R unsigned long pe_headersize(header)
|
||||
unsigned char *header;
|
||||
{
|
||||
unsigned long *size;
|
||||
|
||||
size = header + 0x00AC;
|
||||
|
||||
return *size;
|
||||
}
|
||||
.
|
||||
|
||||
define /R unsigned char *pe_filename(header)
|
||||
unsigned char *header;
|
||||
{
|
||||
unsigned long *debugOffset;
|
||||
unsigned char *stringOffset;
|
||||
|
||||
if (valid_pe_header(header))
|
||||
{
|
||||
debugOffset = header + 0x0128;
|
||||
stringOffset = header + *debugOffset + 0x002C;
|
||||
|
||||
return stringOffset;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
.
|
||||
|
||||
define /R int char_is_valid(c)
|
||||
unsigned char c;
|
||||
{
|
||||
if (c >= 32 && c < 127)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
.
|
||||
|
||||
define /R write_symbols_file(filename, mem_start, mem_size)
|
||||
unsigned char *filename;
|
||||
unsigned char *mem_start;
|
||||
unsigned long mem_size;
|
||||
{
|
||||
unsigned char *system_table;
|
||||
unsigned char *debug_info_table_header;
|
||||
unsigned char *debug_info_table;
|
||||
unsigned long debug_info_table_size;
|
||||
unsigned long index;
|
||||
unsigned char *debug_image_info;
|
||||
unsigned char *loaded_image_protocol;
|
||||
unsigned char *image_base;
|
||||
unsigned char *debug_filename;
|
||||
unsigned long header_size;
|
||||
int status;
|
||||
|
||||
system_table = find_system_table(mem_start, mem_size);
|
||||
if (system_table == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
status = fopen(88, filename, "w");
|
||||
|
||||
debug_info_table_header = find_debug_info_table_header(system_table);
|
||||
|
||||
debug_info_table = *(unsigned long *)(debug_info_table_header + 8);
|
||||
debug_info_table_size = *(unsigned long *)(debug_info_table_header + 4);
|
||||
|
||||
for (index = 0; index < (debug_info_table_size * 4); index += 4)
|
||||
{
|
||||
debug_image_info = *(unsigned long *)(debug_info_table + index);
|
||||
|
||||
if (debug_image_info == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
loaded_image_protocol = *(unsigned long *)(debug_image_info + 4);
|
||||
|
||||
image_base = *(unsigned long *)(loaded_image_protocol + 32);
|
||||
|
||||
debug_filename = pe_filename(image_base);
|
||||
header_size = pe_headersize(image_base);
|
||||
|
||||
$fprintf 88, "%s 0x%08x\n", debug_filename, image_base + header_size$;
|
||||
}
|
||||
|
||||
|
||||
fclose(88);
|
||||
}
|
||||
.
|
||||
|
118
BeagleBoardPkg/Debugger_scripts/rvi_unload_symbols.inc
Executable file
118
BeagleBoardPkg/Debugger_scripts/rvi_unload_symbols.inc
Executable file
@@ -0,0 +1,118 @@
|
||||
//
|
||||
// Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
//
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are licensed and made available under the terms and conditions of the BSD License
|
||||
// which accompanies this distribution. The full text of the license may be found at
|
||||
// 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.
|
||||
//
|
||||
|
||||
error = continue
|
||||
|
||||
unload
|
||||
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
delfile 1
|
||||
|
||||
error = abort
|
211
BeagleBoardPkg/Debugger_scripts/trace32_load_symbols.cmm
Normal file
211
BeagleBoardPkg/Debugger_scripts/trace32_load_symbols.cmm
Normal file
@@ -0,0 +1,211 @@
|
||||
//
|
||||
// Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
//
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are licensed and made available under the terms and conditions of the BSD License
|
||||
// which accompanies this distribution. The full text of the license may be found at
|
||||
// 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.
|
||||
//
|
||||
|
||||
ENTRY &ram_start &ram_size
|
||||
|
||||
;If system is running then stop the execution so we can load symbols.
|
||||
break
|
||||
|
||||
;Reset all windows
|
||||
WINPAGE.RESET
|
||||
|
||||
;Create AREA to display the symbols we are loading.
|
||||
AREA.Reset
|
||||
AREA.Create SYMBOL 300. 100.
|
||||
AREA.View SYMBOL
|
||||
AREA.Select SYMBOL
|
||||
SYS.Option BE OFF
|
||||
|
||||
;Added based on suggestion from Lauterbach support.
|
||||
MMU.TABLEWALK ON
|
||||
MMU.ON
|
||||
|
||||
;Load symbols.
|
||||
GOSUB load_symbols &ram_start &ram_size
|
||||
|
||||
;Open some windows and enable semihosting.
|
||||
TOOLBAR ON
|
||||
STATUSBAR ON
|
||||
WINPAGE.RESET
|
||||
|
||||
WINCLEAR
|
||||
WINPOS 0.0 17.0 72. 13. 0. 0. W000
|
||||
SYStem
|
||||
|
||||
WINPOS 0.0 0.0 110. 55. 13. 1. W001
|
||||
WINTABS 10. 10. 25. 62.
|
||||
Data.List
|
||||
|
||||
WINPAGE.SELECT P000
|
||||
|
||||
//Enable semihosting
|
||||
System.Option.BigEndian OFF
|
||||
|
||||
tronchip.set swi on // ARM9/10/11 variant
|
||||
|
||||
// configure and open semihosting channel
|
||||
winpos 50% 50% 50% 50%
|
||||
term.heapinfo 0 0x20000 0x30000 0x20000
|
||||
term.method armswi
|
||||
term.mode string
|
||||
term.gate
|
||||
|
||||
WINPOS 115.0 0. 70. 35. 0. 1. W002
|
||||
Var.Local %HEX
|
||||
|
||||
WINPOS 115.10 45. 48. 9. 0. 0. W003
|
||||
Register
|
||||
|
||||
END
|
||||
|
||||
find_system_table:
|
||||
ENTRY &mem_start &mem_size
|
||||
&mem_ptr=&mem_start+&mem_size
|
||||
RPT
|
||||
(
|
||||
&mem_ptr=&mem_ptr-0x400000 // 4 MB
|
||||
&word1=Data.LONG(D:&mem_ptr)
|
||||
&word2=Data.LONG(D:&mem_ptr+0x04)
|
||||
IF &word1==0x20494249
|
||||
(
|
||||
IF &word2==0x54535953
|
||||
(
|
||||
&result=Data.LONG(D:&mem_ptr+0x08)
|
||||
RETURN &result
|
||||
)
|
||||
)
|
||||
)
|
||||
WHILE &mem_ptr>&mem_start
|
||||
&result=0
|
||||
RETURN &result
|
||||
|
||||
compare_guid:
|
||||
ENTRY &guid
|
||||
IF Data.LONG(D:&guid)==0x49152E77
|
||||
(
|
||||
IF Data.LONG(D:&guid+0x04)==0x47641ADA
|
||||
(
|
||||
IF Data.LONG(D:&guid+0x08)==0xFE7AA2B7
|
||||
(
|
||||
IF Data.LONG(D:&guid+0x0C)==0x8B5ED9FE
|
||||
(
|
||||
RETURN 0
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
RETURN 1
|
||||
|
||||
find_debug_info_table_header:
|
||||
ENTRY &system_table
|
||||
&config_table_entries=Data.LONG(D:&system_table+0x40)
|
||||
&config_table_pointer=Data.LONG(D:&system_table+0x44)
|
||||
RPT &config_table_entries
|
||||
(
|
||||
GOSUB compare_guid &config_table_pointer
|
||||
ENTRY &result
|
||||
IF &result==0
|
||||
(
|
||||
&result=Data.LONG(D:&config_table_pointer+0x10)
|
||||
RETURN &result
|
||||
)
|
||||
&config_table_pointer=&config_table_pointer+0x14
|
||||
)
|
||||
RETURN 0;
|
||||
|
||||
valid_pe_header:
|
||||
ENTRY &header
|
||||
IF Data.BYTE(D:&header+0x00)==0x4D
|
||||
(
|
||||
IF Data.BYTE(D:&header+0x01)==0x5A
|
||||
(
|
||||
IF Data.BYTE(D:&header+0x80)==0x50
|
||||
(
|
||||
IF Data.BYTE(D:&header+0x81)==0x45
|
||||
(
|
||||
RETURN 1
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
RETURN 0
|
||||
|
||||
get_file_string:
|
||||
ENTRY &stringOffset
|
||||
|
||||
local &string
|
||||
|
||||
&more_string=data.string(d:&stringOffset)
|
||||
|
||||
if (string.len("&more_string")>=128.)
|
||||
(
|
||||
&string="&string"+"&more_string"
|
||||
&stringOffset=&stringOffset+string.len("&more_string")
|
||||
|
||||
//Get remaining file string
|
||||
GOSUB get_file_string &stringOffset
|
||||
ENTRY &more_string
|
||||
&string="&string"+"&more_string"
|
||||
)
|
||||
else
|
||||
(
|
||||
&string="&string"+"&more_string"
|
||||
&more_string=""
|
||||
)
|
||||
RETURN &string
|
||||
|
||||
load_symbol_file:
|
||||
ENTRY &header &load_address
|
||||
GOSUB valid_pe_header &header
|
||||
ENTRY &result
|
||||
|
||||
IF &result==1
|
||||
(
|
||||
&debugOffset=Data.LONG(D:&header+0x0128)
|
||||
&stringOffset=&header+&debugOffset+0x002C
|
||||
|
||||
GOSUB get_file_string &stringOffset
|
||||
ENTRY &filestring
|
||||
|
||||
PRINT "&filestring 0x" &load_address
|
||||
TDIAG Data.load.elf &filestring &load_address /nocode /noclear
|
||||
)
|
||||
RETURN
|
||||
|
||||
pe_headersize:
|
||||
ENTRY &header;
|
||||
RETURN Data.LONG(D:&header+0x00AC)
|
||||
|
||||
load_symbols:
|
||||
ENTRY &mem_start &mem_size
|
||||
GOSUB find_system_table &mem_start &mem_size
|
||||
ENTRY &system_table
|
||||
GOSUB find_debug_info_table_header &system_table
|
||||
ENTRY &debug_info_table_header
|
||||
&debug_info_table=Data.LONG(D:&debug_info_table_header+0x08)
|
||||
&debug_info_table_size=Data.LONG(D:&debug_info_table_header+0x04)
|
||||
&index=0
|
||||
RPT &debug_info_table_size
|
||||
(
|
||||
&debug_image_info=Data.LONG(D:&debug_info_table+&index)
|
||||
IF &debug_image_info==0
|
||||
RETURN
|
||||
&loaded_image_protocol=Data.LONG(D:&debug_image_info+0x04);
|
||||
&image_base=Data.LONG(D:&loaded_image_protocol+0x20);
|
||||
GOSUB pe_headersize &image_base
|
||||
ENTRY &header_size
|
||||
&image_load_address=&image_base+&header_size
|
||||
GOSUB load_symbol_file &image_base &image_load_address
|
||||
&index=&index+0x4
|
||||
)
|
||||
|
||||
RETURN
|
188
BeagleBoardPkg/Debugger_scripts/trace32_load_symbols_cygwin.cmm
Normal file
188
BeagleBoardPkg/Debugger_scripts/trace32_load_symbols_cygwin.cmm
Normal file
@@ -0,0 +1,188 @@
|
||||
//
|
||||
// Copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
//
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are licensed and made available under the terms and conditions of the BSD License
|
||||
// which accompanies this distribution. The full text of the license may be found at
|
||||
// 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.
|
||||
//
|
||||
|
||||
ENTRY &ram_start &ram_size
|
||||
|
||||
;If system is running then stop the execution so we can load symbols.
|
||||
break
|
||||
|
||||
;Reset all windows
|
||||
WINPAGE.RESET
|
||||
|
||||
AREA.Reset
|
||||
AREA.Create SYMBOL 300. 100.
|
||||
AREA.View SYMBOL
|
||||
AREA.Select SYMBOL
|
||||
SYS.Option BE OFF
|
||||
|
||||
; Added based on suggestion from Lauterbach support.
|
||||
MMU.TABLEWALK ON
|
||||
MMU.ON
|
||||
|
||||
GOSUB load_symbols &ram_start &ram_size
|
||||
|
||||
;Open some windows.
|
||||
WINPOS 83.125 29.063 48. 9. 0. 0. W003
|
||||
Register
|
||||
|
||||
WINPOS 83.25 10. 48. 9. 0. 1. W002
|
||||
Var.Local
|
||||
|
||||
END
|
||||
|
||||
find_system_table:
|
||||
ENTRY &mem_start &mem_size
|
||||
&mem_ptr=&mem_start+&mem_size
|
||||
RPT
|
||||
(
|
||||
&mem_ptr=&mem_ptr-0x400000 // 4 MB
|
||||
&word1=Data.LONG(D:&mem_ptr)
|
||||
&word2=Data.LONG(D:&mem_ptr+0x04)
|
||||
IF &word1==0x20494249
|
||||
(
|
||||
IF &word2==0x54535953
|
||||
(
|
||||
&result=Data.LONG(D:&mem_ptr+0x08)
|
||||
RETURN &result
|
||||
)
|
||||
)
|
||||
)
|
||||
WHILE &mem_ptr>&mem_start
|
||||
&result=0
|
||||
RETURN &result
|
||||
|
||||
compare_guid:
|
||||
ENTRY &guid
|
||||
IF Data.LONG(D:&guid)==0x49152E77
|
||||
(
|
||||
IF Data.LONG(D:&guid+0x04)==0x47641ADA
|
||||
(
|
||||
IF Data.LONG(D:&guid+0x08)==0xFE7AA2B7
|
||||
(
|
||||
IF Data.LONG(D:&guid+0x0C)==0x8B5ED9FE
|
||||
(
|
||||
RETURN 0
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
RETURN 1
|
||||
|
||||
find_debug_info_table_header:
|
||||
ENTRY &system_table
|
||||
&config_table_entries=Data.LONG(D:&system_table+0x40)
|
||||
&config_table_pointer=Data.LONG(D:&system_table+0x44)
|
||||
RPT &config_table_entries
|
||||
(
|
||||
GOSUB compare_guid &config_table_pointer
|
||||
ENTRY &result
|
||||
IF &result==0
|
||||
(
|
||||
&result=Data.LONG(D:&config_table_pointer+0x10)
|
||||
RETURN &result
|
||||
)
|
||||
&config_table_pointer=&config_table_pointer+0x14
|
||||
)
|
||||
RETURN 0;
|
||||
|
||||
valid_pe_header:
|
||||
ENTRY &header
|
||||
IF Data.BYTE(D:&header+0x00)==0x4D
|
||||
(
|
||||
IF Data.BYTE(D:&header+0x01)==0x5A
|
||||
(
|
||||
IF Data.BYTE(D:&header+0x80)==0x50
|
||||
(
|
||||
IF Data.BYTE(D:&header+0x81)==0x45
|
||||
(
|
||||
RETURN 1
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
RETURN 0
|
||||
|
||||
get_file_string:
|
||||
ENTRY &stringOffset
|
||||
|
||||
local &string
|
||||
|
||||
&more_string=data.string(d:&stringOffset)
|
||||
|
||||
if (string.len("&more_string")>=128.)
|
||||
(
|
||||
&string="&string"+"&more_string"
|
||||
&stringOffset=&stringOffset+string.len("&more_string")
|
||||
|
||||
//Get remaining file string
|
||||
GOSUB get_file_string &stringOffset
|
||||
ENTRY &more_string
|
||||
&string="&string"+"&more_string"
|
||||
)
|
||||
else
|
||||
(
|
||||
&string="&string"+"&more_string"
|
||||
&more_string=""
|
||||
)
|
||||
RETURN &string
|
||||
|
||||
load_symbol_file:
|
||||
ENTRY &header &load_address
|
||||
GOSUB valid_pe_header &header
|
||||
ENTRY &result
|
||||
|
||||
IF &result==1
|
||||
(
|
||||
&debugOffset=Data.LONG(D:&header+0x0128)
|
||||
&stringOffset=&header+&debugOffset+0x002C
|
||||
|
||||
&stringOffset=&stringOffset+11.
|
||||
|
||||
GOSUB get_file_string &stringOffset
|
||||
ENTRY &filestring
|
||||
|
||||
&filestring="c:"+"&filestring"
|
||||
|
||||
PRINT "&filestring 0x" &load_address
|
||||
Data.load.elf &filestring &load_address /nocode /noclear
|
||||
)
|
||||
RETURN
|
||||
|
||||
pe_headersize:
|
||||
ENTRY &header;
|
||||
RETURN Data.LONG(D:&header+0x00AC)
|
||||
|
||||
load_symbols:
|
||||
ENTRY &mem_start &mem_size
|
||||
GOSUB find_system_table &mem_start &mem_size
|
||||
ENTRY &system_table
|
||||
GOSUB find_debug_info_table_header &system_table
|
||||
ENTRY &debug_info_table_header
|
||||
&debug_info_table=Data.LONG(D:&debug_info_table_header+0x08)
|
||||
&debug_info_table_size=Data.LONG(D:&debug_info_table_header+0x04)
|
||||
&index=0
|
||||
RPT &debug_info_table_size
|
||||
(
|
||||
&debug_image_info=Data.LONG(D:&debug_info_table+&index)
|
||||
IF &debug_image_info==0
|
||||
RETURN
|
||||
&loaded_image_protocol=Data.LONG(D:&debug_image_info+0x04);
|
||||
&image_base=Data.LONG(D:&loaded_image_protocol+0x20);
|
||||
GOSUB pe_headersize &image_base
|
||||
ENTRY &header_size
|
||||
&image_load_address=&image_base+&header_size
|
||||
GOSUB load_symbol_file &image_base &image_load_address
|
||||
&index=&index+0x4
|
||||
)
|
||||
|
||||
RETURN
|
||||
|
Reference in New Issue
Block a user