.. | .. |
---|
66 | 66 | return container_of(ptr, gdb.lookup_type(typename.string()).pointer(), |
---|
67 | 67 | elementname.string()) |
---|
68 | 68 | |
---|
| 69 | + |
---|
69 | 70 | ContainerOf() |
---|
70 | 71 | |
---|
71 | 72 | |
---|
.. | .. |
---|
88 | 89 | |
---|
89 | 90 | |
---|
90 | 91 | 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) |
---|
92 | 96 | |
---|
93 | 97 | |
---|
94 | | -def read_u16(buffer): |
---|
| 98 | +def read_u16(buffer, offset): |
---|
| 99 | + buffer_val = buffer[offset:offset + 2] |
---|
95 | 100 | value = [0, 0] |
---|
96 | 101 | |
---|
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]) |
---|
100 | 105 | else: |
---|
101 | | - value[0] = buffer[0] |
---|
102 | | - value[1] = buffer[1] |
---|
| 106 | + value[0] = buffer_val[0] |
---|
| 107 | + value[1] = buffer_val[1] |
---|
103 | 108 | |
---|
104 | 109 | if get_target_endianness() == LITTLE_ENDIAN: |
---|
105 | 110 | return value[0] + (value[1] << 8) |
---|
.. | .. |
---|
107 | 112 | return value[1] + (value[0] << 8) |
---|
108 | 113 | |
---|
109 | 114 | |
---|
110 | | -def read_u32(buffer): |
---|
| 115 | +def read_u32(buffer, offset): |
---|
111 | 116 | 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) |
---|
113 | 118 | 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) |
---|
115 | 120 | |
---|
116 | 121 | |
---|
117 | | -def read_u64(buffer): |
---|
| 122 | +def read_u64(buffer, offset): |
---|
118 | 123 | 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) |
---|
120 | 125 | 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) |
---|
122 | 134 | |
---|
123 | 135 | |
---|
124 | 136 | target_arch = None |
---|
.. | .. |
---|
148 | 160 | def probe_qemu(): |
---|
149 | 161 | try: |
---|
150 | 162 | return gdb.execute("monitor info version", to_string=True) != "" |
---|
151 | | - except: |
---|
| 163 | + except gdb.error: |
---|
152 | 164 | return False |
---|
153 | 165 | |
---|
154 | 166 | def probe_kgdb(): |
---|
155 | 167 | try: |
---|
156 | 168 | thread_info = gdb.execute("info thread 2", to_string=True) |
---|
157 | 169 | return "shadowCPU0" in thread_info |
---|
158 | | - except: |
---|
| 170 | + except gdb.error: |
---|
159 | 171 | return False |
---|
160 | 172 | |
---|
161 | 173 | global gdbserver_type |
---|
.. | .. |
---|
172 | 184 | def gdb_eval_or_none(expresssion): |
---|
173 | 185 | try: |
---|
174 | 186 | return gdb.parse_and_eval(expresssion) |
---|
175 | | - except: |
---|
| 187 | + except gdb.error: |
---|
176 | 188 | return None |
---|
177 | 189 | |
---|
178 | 190 | |
---|