| .. | .. |
|---|
| 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 | |
|---|