make_textsym
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:6k
- #!/bin/sh
- #
- # Build a textsym file for use in the Arium ITP probe.
- #
- #
- # This file is subject to the terms and conditions of the GNU General Public
- # License. See the file "COPYING" in the main directory of this archive
- # for more details.
- #
- # Copyright (c) 2001-2002 Silicon Graphics, Inc. All rights reserved.
- #
- help() {
- cat <<END
- Build a WinDD "symtxt" file for use with the Arium ECM-30 probe.
- Usage: $0 [<vmlinux file> [<output file>]]
- If no input file is specified, it defaults to vmlinux.
- If no output file name is specified, it defaults to "textsym".
- END
- exit 1
- }
- err () {
- echo "ERROR - $*" >&2
- exit 1
- }
- OPTS="H"
- while getopts "$OPTS" c ; do
- case $c in
- H) help;;
- ?) help;;
- esac
- done
- shift `expr $OPTIND - 1`
- LINUX=${1:-vmlinux}
- TEXTSYM=${2:-${LINUX}.sym}
- TMPSYM=${2:-${LINUX}.sym.tmp}
- trap "/bin/rm -f $TMPSYM" 0
- [ -f $VMLINUX ] || help
- $OBJDUMP -t $LINUX | sort > $TMPSYM
- SN1=`egrep "dig_setup|Synergy_da_indr" $TMPSYM|wc -l`
- # Dataprefix and textprefix correspond to the VGLOBAL_BASE and VPERNODE_BASE.
- # Eventually, these values should be:
- # dataprefix ffffffff
- # textprefix fffffffe
- # but right now they're still changing, so make them dynamic.
- dataprefix=`awk ' / .data / { print substr($1, 0, 8) ; exit ; }' $TMPSYM`
- textprefix=`awk ' / .text / { print substr($1, 0, 8) ; exit ; }' $TMPSYM`
- # pipe everything thru sort
- echo "TEXTSYM V1.0"
- (cat <<END
- GLOBAL | ${textprefix}00400000 | CODE | VEC_VHPT_Translation_0000
- GLOBAL | ${textprefix}00400400 | CODE | VEC_ITLB_0400
- GLOBAL | ${textprefix}00400800 | CODE | VEC_DTLB_0800
- GLOBAL | ${textprefix}00400c00 | CODE | VEC_Alt_ITLB_0c00
- GLOBAL | ${textprefix}00401000 | CODE | VEC_Alt_DTLB_1000
- GLOBAL | ${textprefix}00401400 | CODE | VEC_Data_nested_TLB_1400
- GLOBAL | ${textprefix}00401800 | CODE | VEC_Instruction_Key_Miss_1800
- GLOBAL | ${textprefix}00401c00 | CODE | VEC_Data_Key_Miss_1c00
- GLOBAL | ${textprefix}00402000 | CODE | VEC_Dirty-bit_2000
- GLOBAL | ${textprefix}00402400 | CODE | VEC_Instruction_Access-bit_2400
- GLOBAL | ${textprefix}00402800 | CODE | VEC_Data_Access-bit_2800
- GLOBAL | ${textprefix}00402c00 | CODE | VEC_Break_instruction_2c00
- GLOBAL | ${textprefix}00403000 | CODE | VEC_External_Interrupt_3000
- GLOBAL | ${textprefix}00403400 | CODE | VEC_Reserved_3400
- GLOBAL | ${textprefix}00403800 | CODE | VEC_Reserved_3800
- GLOBAL | ${textprefix}00403c00 | CODE | VEC_Reserved_3c00
- GLOBAL | ${textprefix}00404000 | CODE | VEC_Reserved_4000
- GLOBAL | ${textprefix}00404400 | CODE | VEC_Reserved_4400
- GLOBAL | ${textprefix}00404800 | CODE | VEC_Reserved_4800
- GLOBAL | ${textprefix}00404c00 | CODE | VEC_Reserved_4c00
- GLOBAL | ${textprefix}00405000 | CODE | VEC_Page_Not_Present_5000
- GLOBAL | ${textprefix}00405100 | CODE | VEC_Key_Permission_5100
- GLOBAL | ${textprefix}00405200 | CODE | VEC_Instruction_Access_Rights_5200
- GLOBAL | ${textprefix}00405300 | CODE | VEC_Data_Access_Rights_5300
- GLOBAL | ${textprefix}00405400 | CODE | VEC_General_Exception_5400
- GLOBAL | ${textprefix}00405500 | CODE | VEC_Disabled_FP-Register_5500
- GLOBAL | ${textprefix}00405600 | CODE | VEC_Nat_Consumption_5600
- GLOBAL | ${textprefix}00405700 | CODE | VEC_Speculation_5700
- GLOBAL | ${textprefix}00405800 | CODE | VEC_Reserved_5800
- GLOBAL | ${textprefix}00405900 | CODE | VEC_Debug_5900
- GLOBAL | ${textprefix}00405a00 | CODE | VEC_Unaligned_Reference_5a00
- GLOBAL | ${textprefix}00405b00 | CODE | VEC_Unsupported_Data_Reference_5b00
- GLOBAL | ${textprefix}00405c00 | CODE | VEC_Floating-Point_Fault_5c00
- GLOBAL | ${textprefix}00405d00 | CODE | VEC_Floating_Point_Trap_5d00
- GLOBAL | ${textprefix}00405e00 | CODE | VEC_Lower_Privilege_Tranfer_Trap_5e00
- GLOBAL | ${textprefix}00405f00 | CODE | VEC_Taken_Branch_Trap_5f00
- GLOBAL | ${textprefix}00406000 | CODE | VEC_Single_Step_Trap_6000
- GLOBAL | ${textprefix}00406100 | CODE | VEC_Reserved_6100
- GLOBAL | ${textprefix}00406200 | CODE | VEC_Reserved_6200
- GLOBAL | ${textprefix}00406300 | CODE | VEC_Reserved_6300
- GLOBAL | ${textprefix}00406400 | CODE | VEC_Reserved_6400
- GLOBAL | ${textprefix}00406500 | CODE | VEC_Reserved_6500
- GLOBAL | ${textprefix}00406600 | CODE | VEC_Reserved_6600
- GLOBAL | ${textprefix}00406700 | CODE | VEC_Reserved_6700
- GLOBAL | ${textprefix}00406800 | CODE | VEC_Reserved_6800
- GLOBAL | ${textprefix}00406900 | CODE | VEC_IA-32_Exeception_6900
- GLOBAL | ${textprefix}00406a00 | CODE | VEC_IA-32_Intercept_6a00
- GLOBAL | ${textprefix}00406b00 | CODE | VEC_IA-32_Interrupt_6b00
- GLOBAL | ${textprefix}00406c00 | CODE | VEC_Reserved_6c00
- GLOBAL | ${textprefix}00406d00 | CODE | VEC_Reserved_6d00
- GLOBAL | ${textprefix}00406e00 | CODE | VEC_Reserved_6e00
- GLOBAL | ${textprefix}00406f00 | CODE | VEC_Reserved_6f00
- GLOBAL | ${textprefix}00407000 | CODE | VEC_Reserved_7000
- GLOBAL | ${textprefix}00407100 | CODE | VEC_Reserved_7100
- GLOBAL | ${textprefix}00407200 | CODE | VEC_Reserved_7200
- GLOBAL | ${textprefix}00407300 | CODE | VEC_Reserved_7300
- GLOBAL | ${textprefix}00407400 | CODE | VEC_Reserved_7400
- GLOBAL | ${textprefix}00407500 | CODE | VEC_Reserved_7500
- GLOBAL | ${textprefix}00407600 | CODE | VEC_Reserved_7600
- GLOBAL | ${textprefix}00407700 | CODE | VEC_Reserved_7700
- GLOBAL | ${textprefix}00407800 | CODE | VEC_Reserved_7800
- GLOBAL | ${textprefix}00407900 | CODE | VEC_Reserved_7900
- GLOBAL | ${textprefix}00407a00 | CODE | VEC_Reserved_7a00
- GLOBAL | ${textprefix}00407b00 | CODE | VEC_Reserved_7b00
- GLOBAL | ${textprefix}00407c00 | CODE | VEC_Reserved_7c00
- GLOBAL | ${textprefix}00407d00 | CODE | VEC_Reserved_7d00
- GLOBAL | ${textprefix}00407e00 | CODE | VEC_Reserved_7e00
- GLOBAL | ${textprefix}00407f00 | CODE | VEC_Reserved_7f00
- END
- awk '
- /__start_gate_section/ {start=1}
- /^'${dataprefix}|${textprefix}'/ {
- if ($4 == ".kdb")
- next
- if (start && substr($NF,1,1) != "0") {
- type = substr($0,26,5)
- if (type == ".text")
- printf "GLOBAL | %s | CODE | %sn", $1, $NF
- else {
- n = 0
- s = $(NF-1)
- while (length(s) > 0) {
- n = n*16 + substr(s,1,1)
- s = substr(s,2)
- }
- printf "GLOBAL | %s | DATA | %s | %dn", $1, $NF, n
- }
- }
- if($NF == "_end")
- exit
- }
- ' $TMPSYM ) | egrep -v " __device| __vendor" | awk -v sn1="$SN1" '
- /GLOBAL/ {
- print $0
- if (sn1 != 0) {
- /* 32 bits of sn1 physical addrs, */
- print substr($0,1,9) substr($0,18,18) "Phy_" substr($0,36)
- } else {
- /* 38 bits of sn2 physical addrs, need addr space bits */
- print substr($0,1,9) "30" substr($0,18,18) "Phy_" substr($0,36)
- }
- } ' | sort -k3
- N=`wc -l $TEXTSYM|awk '{print $1}'`
- echo "Generated TEXTSYM file" >&2
- echo " $LINUX --> $TEXTSYM" >&2
- echo " Found $N symbols" >&2