hc
2024-09-20 a36159eec6ca17402b0e146b86efaf76568dc353
kernel/scripts/gdb/linux/utils.py
....@@ -66,6 +66,7 @@
6666 return container_of(ptr, gdb.lookup_type(typename.string()).pointer(),
6767 elementname.string())
6868
69
+
6970 ContainerOf()
7071
7172
....@@ -88,18 +89,22 @@
8889
8990
9091 def read_memoryview(inf, start, length):
91
- return memoryview(inf.read_memory(start, length))
92
+ m = inf.read_memory(start, length)
93
+ if type(m) is memoryview:
94
+ return m
95
+ return memoryview(m)
9296
9397
94
-def read_u16(buffer):
98
+def read_u16(buffer, offset):
99
+ buffer_val = buffer[offset:offset + 2]
95100 value = [0, 0]
96101
97
- if type(buffer[0]) is str:
98
- value[0] = ord(buffer[0])
99
- value[1] = ord(buffer[1])
102
+ if type(buffer_val[0]) is str:
103
+ value[0] = ord(buffer_val[0])
104
+ value[1] = ord(buffer_val[1])
100105 else:
101
- value[0] = buffer[0]
102
- value[1] = buffer[1]
106
+ value[0] = buffer_val[0]
107
+ value[1] = buffer_val[1]
103108
104109 if get_target_endianness() == LITTLE_ENDIAN:
105110 return value[0] + (value[1] << 8)
....@@ -107,18 +112,25 @@
107112 return value[1] + (value[0] << 8)
108113
109114
110
-def read_u32(buffer):
115
+def read_u32(buffer, offset):
111116 if get_target_endianness() == LITTLE_ENDIAN:
112
- return read_u16(buffer[0:2]) + (read_u16(buffer[2:4]) << 16)
117
+ return read_u16(buffer, offset) + (read_u16(buffer, offset + 2) << 16)
113118 else:
114
- return read_u16(buffer[2:4]) + (read_u16(buffer[0:2]) << 16)
119
+ return read_u16(buffer, offset + 2) + (read_u16(buffer, offset) << 16)
115120
116121
117
-def read_u64(buffer):
122
+def read_u64(buffer, offset):
118123 if get_target_endianness() == LITTLE_ENDIAN:
119
- return read_u32(buffer[0:4]) + (read_u32(buffer[4:8]) << 32)
124
+ return read_u32(buffer, offset) + (read_u32(buffer, offset + 4) << 32)
120125 else:
121
- return read_u32(buffer[4:8]) + (read_u32(buffer[0:4]) << 32)
126
+ return read_u32(buffer, offset + 4) + (read_u32(buffer, offset) << 32)
127
+
128
+
129
+def read_ulong(buffer, offset):
130
+ if get_long_type().sizeof == 8:
131
+ return read_u64(buffer, offset)
132
+ else:
133
+ return read_u32(buffer, offset)
122134
123135
124136 target_arch = None
....@@ -148,14 +160,14 @@
148160 def probe_qemu():
149161 try:
150162 return gdb.execute("monitor info version", to_string=True) != ""
151
- except:
163
+ except gdb.error:
152164 return False
153165
154166 def probe_kgdb():
155167 try:
156168 thread_info = gdb.execute("info thread 2", to_string=True)
157169 return "shadowCPU0" in thread_info
158
- except:
170
+ except gdb.error:
159171 return False
160172
161173 global gdbserver_type
....@@ -172,7 +184,7 @@
172184 def gdb_eval_or_none(expresssion):
173185 try:
174186 return gdb.parse_and_eval(expresssion)
175
- except:
187
+ except gdb.error:
176188 return None
177189
178190