hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
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
....@@ -91,15 +92,16 @@
9192 return memoryview(inf.read_memory(start, length))
9293
9394
94
-def read_u16(buffer):
95
+def read_u16(buffer, offset):
96
+ buffer_val = buffer[offset:offset + 2]
9597 value = [0, 0]
9698
97
- if type(buffer[0]) is str:
98
- value[0] = ord(buffer[0])
99
- value[1] = ord(buffer[1])
99
+ if type(buffer_val[0]) is str:
100
+ value[0] = ord(buffer_val[0])
101
+ value[1] = ord(buffer_val[1])
100102 else:
101
- value[0] = buffer[0]
102
- value[1] = buffer[1]
103
+ value[0] = buffer_val[0]
104
+ value[1] = buffer_val[1]
103105
104106 if get_target_endianness() == LITTLE_ENDIAN:
105107 return value[0] + (value[1] << 8)
....@@ -107,18 +109,25 @@
107109 return value[1] + (value[0] << 8)
108110
109111
110
-def read_u32(buffer):
112
+def read_u32(buffer, offset):
111113 if get_target_endianness() == LITTLE_ENDIAN:
112
- return read_u16(buffer[0:2]) + (read_u16(buffer[2:4]) << 16)
114
+ return read_u16(buffer, offset) + (read_u16(buffer, offset + 2) << 16)
113115 else:
114
- return read_u16(buffer[2:4]) + (read_u16(buffer[0:2]) << 16)
116
+ return read_u16(buffer, offset + 2) + (read_u16(buffer, offset) << 16)
115117
116118
117
-def read_u64(buffer):
119
+def read_u64(buffer, offset):
118120 if get_target_endianness() == LITTLE_ENDIAN:
119
- return read_u32(buffer[0:4]) + (read_u32(buffer[4:8]) << 32)
121
+ return read_u32(buffer, offset) + (read_u32(buffer, offset + 4) << 32)
120122 else:
121
- return read_u32(buffer[4:8]) + (read_u32(buffer[0:4]) << 32)
123
+ return read_u32(buffer, offset + 4) + (read_u32(buffer, offset) << 32)
124
+
125
+
126
+def read_ulong(buffer, offset):
127
+ if get_long_type().sizeof == 8:
128
+ return read_u64(buffer, offset)
129
+ else:
130
+ return read_u32(buffer, offset)
122131
123132
124133 target_arch = None
....@@ -148,14 +157,14 @@
148157 def probe_qemu():
149158 try:
150159 return gdb.execute("monitor info version", to_string=True) != ""
151
- except:
160
+ except gdb.error:
152161 return False
153162
154163 def probe_kgdb():
155164 try:
156165 thread_info = gdb.execute("info thread 2", to_string=True)
157166 return "shadowCPU0" in thread_info
158
- except:
167
+ except gdb.error:
159168 return False
160169
161170 global gdbserver_type
....@@ -172,7 +181,7 @@
172181 def gdb_eval_or_none(expresssion):
173182 try:
174183 return gdb.parse_and_eval(expresssion)
175
- except:
184
+ except gdb.error:
176185 return None
177186
178187