import of upstream 2.4.34.4 from kernel.org
[linux-2.4.git] / arch / ia64 / sn / fakeprom / make_textsym
1 #!/bin/sh
2 #
3 # Build a textsym file for use in the Arium ITP probe.
4 #
5 #
6 # This file is subject to the terms and conditions of the GNU General Public
7 # License.  See the file "COPYING" in the main directory of this archive
8 # for more details.
9 #
10 # Copyright (c) 2001-2003 Silicon Graphics, Inc.  All rights reserved.
11 #
12
13 help() {
14 cat <<END
15 Build a WinDD "symtxt" file for use with the Arium ECM-30 probe.
16
17         Usage: $0 [<vmlinux file> [<output file>]]
18                 If no input file is specified, it defaults to vmlinux.
19                 If no output file name is specified, it defaults to "textsym".
20 END
21 exit 1
22 }
23
24 err () {
25         echo "ERROR - $*" >&2
26         exit 1
27 }
28
29
30 OPTS="H"
31 while getopts "$OPTS" c ; do
32         case $c in
33                 H)  help;;
34                 \?) help;;
35         esac
36
37 done
38 shift `expr $OPTIND - 1`
39
40 if [ -f /usr/bin/ia64-linux-objdump ] ; then
41         OBJDUMP=${OBJDUMP:-/usr/bin/ia64-linux-objdump}
42 else
43         OBJDUMP=${OBJDUMP:-objdump}
44 fi
45
46 LINUX=${1:-vmlinux}
47 TEXTSYM=${2:-${LINUX}.sym}
48 TMPSYM=${2:-${LINUX}.sym.tmp}
49 trap "/bin/rm -f $TMPSYM" 0
50
51 [ -f $VMLINUX ] || help
52
53 $OBJDUMP -t $LINUX | egrep -v '__ks' | sort > $TMPSYM
54
55 # pipe everything thru sort
56 echo "TEXTSYM V1.0" >$TEXTSYM
57 (cat <<END 
58 GLOBAL | e000000004400000 | CODE | VEC_VHPT_Translation_0000
59 GLOBAL | e000000004400400 | CODE | VEC_ITLB_0400
60 GLOBAL | e000000004400800 | CODE | VEC_DTLB_0800
61 GLOBAL | e000000004400c00 | CODE | VEC_Alt_ITLB_0c00
62 GLOBAL | e000000004401000 | CODE | VEC_Alt_DTLB_1000
63 GLOBAL | e000000004401400 | CODE | VEC_Data_nested_TLB_1400
64 GLOBAL | e000000004401800 | CODE | VEC_Instruction_Key_Miss_1800
65 GLOBAL | e000000004401c00 | CODE | VEC_Data_Key_Miss_1c00
66 GLOBAL | e000000004402000 | CODE | VEC_Dirty-bit_2000
67 GLOBAL | e000000004402400 | CODE | VEC_Instruction_Access-bit_2400
68 GLOBAL | e000000004402800 | CODE | VEC_Data_Access-bit_2800
69 GLOBAL | e000000004402c00 | CODE | VEC_Break_instruction_2c00
70 GLOBAL | e000000004403000 | CODE | VEC_External_Interrupt_3000
71 GLOBAL | e000000004403400 | CODE | VEC_Reserved_3400
72 GLOBAL | e000000004403800 | CODE | VEC_Reserved_3800
73 GLOBAL | e000000004403c00 | CODE | VEC_Reserved_3c00
74 GLOBAL | e000000004404000 | CODE | VEC_Reserved_4000
75 GLOBAL | e000000004404400 | CODE | VEC_Reserved_4400
76 GLOBAL | e000000004404800 | CODE | VEC_Reserved_4800
77 GLOBAL | e000000004404c00 | CODE | VEC_Reserved_4c00
78 GLOBAL | e000000004405000 | CODE | VEC_Page_Not_Present_5000
79 GLOBAL | e000000004405100 | CODE | VEC_Key_Permission_5100
80 GLOBAL | e000000004405200 | CODE | VEC_Instruction_Access_Rights_5200
81 GLOBAL | e000000004405300 | CODE | VEC_Data_Access_Rights_5300
82 GLOBAL | e000000004405400 | CODE | VEC_General_Exception_5400
83 GLOBAL | e000000004405500 | CODE | VEC_Disabled_FP-Register_5500
84 GLOBAL | e000000004405600 | CODE | VEC_Nat_Consumption_5600
85 GLOBAL | e000000004405700 | CODE | VEC_Speculation_5700
86 GLOBAL | e000000004405800 | CODE | VEC_Reserved_5800
87 GLOBAL | e000000004405900 | CODE | VEC_Debug_5900
88 GLOBAL | e000000004405a00 | CODE | VEC_Unaligned_Reference_5a00
89 GLOBAL | e000000004405b00 | CODE | VEC_Unsupported_Data_Reference_5b00
90 GLOBAL | e000000004405c00 | CODE | VEC_Floating-Point_Fault_5c00
91 GLOBAL | e000000004405d00 | CODE | VEC_Floating_Point_Trap_5d00
92 GLOBAL | e000000004405e00 | CODE | VEC_Lower_Privilege_Tranfer_Trap_5e00
93 GLOBAL | e000000004405f00 | CODE | VEC_Taken_Branch_Trap_5f00
94 GLOBAL | e000000004406000 | CODE | VEC_Single_Step_Trap_6000
95 GLOBAL | e000000004406100 | CODE | VEC_Reserved_6100
96 GLOBAL | e000000004406200 | CODE | VEC_Reserved_6200
97 GLOBAL | e000000004406300 | CODE | VEC_Reserved_6300
98 GLOBAL | e000000004406400 | CODE | VEC_Reserved_6400
99 GLOBAL | e000000004406500 | CODE | VEC_Reserved_6500
100 GLOBAL | e000000004406600 | CODE | VEC_Reserved_6600
101 GLOBAL | e000000004406700 | CODE | VEC_Reserved_6700
102 GLOBAL | e000000004406800 | CODE | VEC_Reserved_6800
103 GLOBAL | e000000004406900 | CODE | VEC_IA-32_Exeception_6900
104 GLOBAL | e000000004406a00 | CODE | VEC_IA-32_Intercept_6a00
105 GLOBAL | e000000004406b00 | CODE | VEC_IA-32_Interrupt_6b00
106 GLOBAL | e000000004406c00 | CODE | VEC_Reserved_6c00
107 GLOBAL | e000000004406d00 | CODE | VEC_Reserved_6d00
108 GLOBAL | e000000004406e00 | CODE | VEC_Reserved_6e00
109 GLOBAL | e000000004406f00 | CODE | VEC_Reserved_6f00
110 GLOBAL | e000000004407000 | CODE | VEC_Reserved_7000
111 GLOBAL | e000000004407100 | CODE | VEC_Reserved_7100
112 GLOBAL | e000000004407200 | CODE | VEC_Reserved_7200
113 GLOBAL | e000000004407300 | CODE | VEC_Reserved_7300
114 GLOBAL | e000000004407400 | CODE | VEC_Reserved_7400
115 GLOBAL | e000000004407500 | CODE | VEC_Reserved_7500
116 GLOBAL | e000000004407600 | CODE | VEC_Reserved_7600
117 GLOBAL | e000000004407700 | CODE | VEC_Reserved_7700
118 GLOBAL | e000000004407800 | CODE | VEC_Reserved_7800
119 GLOBAL | e000000004407900 | CODE | VEC_Reserved_7900
120 GLOBAL | e000000004407a00 | CODE | VEC_Reserved_7a00
121 GLOBAL | e000000004407b00 | CODE | VEC_Reserved_7b00
122 GLOBAL | e000000004407c00 | CODE | VEC_Reserved_7c00
123 GLOBAL | e000000004407d00 | CODE | VEC_Reserved_7d00
124 GLOBAL | e000000004407e00 | CODE | VEC_Reserved_7e00
125 GLOBAL | e000000004407f00 | CODE | VEC_Reserved_7f00
126 END
127
128
129 awk '
130 / _start$/ {start=1}
131 / start_ap$/ {start=1}
132 /__start_gate_section/ {start=1}
133 /^e0000000/ {
134         if ($4 == ".kdb")
135                 next
136         if (start && substr($NF,1,1) != "0") {
137                 type = substr($0,26,5)
138                 if (type == ".text")
139                         printf "GLOBAL | %s | CODE | %s\n", $1, $NF
140                 else {
141                         n = 0
142                         s = $(NF-1)
143                         while (length(s) > 0) {
144                                 n = n*16 + (index("0123456789abcdef", substr(s,1,1)) - 1)
145                                 s = substr(s,2)
146                         }
147                         printf "GLOBAL | %s | DATA | %s | %d\n", $1, $NF, n
148                 }
149         }
150         if($NF == "_end") 
151                 exit
152
153 }
154 ' $TMPSYM ) | egrep -v " __device| __vendor" | awk '
155 /GLOBAL/ {
156         print $0
157         /* 38 bits of sn2 physical addrs, need addr space bits */
158         if (substr($0,19,1) == "4")
159                 print substr($0,1,9) "3004" substr($0,20,16) "Phy_" substr($0,36)
160         else
161                 print substr($0,1,9) "3005" substr($0,20,16) "Phy_" substr($0,36)
162
163 } ' | sort -k3 >>$TEXTSYM
164
165 N=`wc -l $TEXTSYM|awk '{print $1}'`
166 echo "Generated TEXTSYM file" >&2
167 echo "  $LINUX --> $TEXTSYM" >&2
168 echo "  Found $N symbols" >&2