diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-05-23 22:42:28 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-05-23 22:42:28 -0400 |
commit | 84787c572d402644dca4874aba73324d9f8e3948 (patch) | |
tree | 31783e50b09fee00ee7ff87c0c9708a3c7106482 /scripts/gdb/linux/utils.py | |
parent | d62a0234c87f1457a3d2ba519ef90cf164a5eb23 (diff) | |
parent | c5d2cac0f1caaf7dd21350146fb29c55b3e74249 (diff) |
Merge branch 'akpm' (patches from Andrew)
Merge yet more updates from Andrew Morton:
- Oleg's "wait/ptrace: assume __WALL if the child is traced". It's a
kernel-based workaround for existing userspace issues.
- A few hotfixes
- befs cleanups
- nilfs2 updates
- sys_wait() changes
- kexec updates
- kdump
- scripts/gdb updates
- the last of the MM queue
- a few other misc things
* emailed patches from Andrew Morton <akpm@linux-foundation.org>: (84 commits)
kgdb: depends on VT
drm/amdgpu: make amdgpu_mn_get wait for mmap_sem killable
drm/radeon: make radeon_mn_get wait for mmap_sem killable
drm/i915: make i915_gem_mmap_ioctl wait for mmap_sem killable
uprobes: wait for mmap_sem for write killable
prctl: make PR_SET_THP_DISABLE wait for mmap_sem killable
exec: make exec path waiting for mmap_sem killable
aio: make aio_setup_ring killable
coredump: make coredump_wait wait for mmap_sem for write killable
vdso: make arch_setup_additional_pages wait for mmap_sem for write killable
ipc, shm: make shmem attach/detach wait for mmap_sem killable
mm, fork: make dup_mmap wait for mmap_sem for write killable
mm, proc: make clear_refs killable
mm: make vm_brk killable
mm, elf: handle vm_brk error
mm, aout: handle vm_brk failures
mm: make vm_munmap killable
mm: make vm_mmap killable
mm: make mmap_sem for write waits killable for mm syscalls
MAINTAINERS: add co-maintainer for scripts/gdb
...
Diffstat (limited to 'scripts/gdb/linux/utils.py')
-rw-r--r-- | scripts/gdb/linux/utils.py | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/scripts/gdb/linux/utils.py b/scripts/gdb/linux/utils.py index 0893b326a28b..50805874cfc3 100644 --- a/scripts/gdb/linux/utils.py +++ b/scripts/gdb/linux/utils.py | |||
@@ -87,11 +87,24 @@ def get_target_endianness(): | |||
87 | return target_endianness | 87 | return target_endianness |
88 | 88 | ||
89 | 89 | ||
90 | def read_memoryview(inf, start, length): | ||
91 | return memoryview(inf.read_memory(start, length)) | ||
92 | |||
93 | |||
90 | def read_u16(buffer): | 94 | def read_u16(buffer): |
95 | value = [0, 0] | ||
96 | |||
97 | if type(buffer[0]) is str: | ||
98 | value[0] = ord(buffer[0]) | ||
99 | value[1] = ord(buffer[1]) | ||
100 | else: | ||
101 | value[0] = buffer[0] | ||
102 | value[1] = buffer[1] | ||
103 | |||
91 | if get_target_endianness() == LITTLE_ENDIAN: | 104 | if get_target_endianness() == LITTLE_ENDIAN: |
92 | return ord(buffer[0]) + (ord(buffer[1]) << 8) | 105 | return value[0] + (value[1] << 8) |
93 | else: | 106 | else: |
94 | return ord(buffer[1]) + (ord(buffer[0]) << 8) | 107 | return value[1] + (value[0] << 8) |
95 | 108 | ||
96 | 109 | ||
97 | def read_u32(buffer): | 110 | def read_u32(buffer): |
@@ -154,3 +167,18 @@ def get_gdbserver_type(): | |||
154 | if gdbserver_type is not None and hasattr(gdb, 'events'): | 167 | if gdbserver_type is not None and hasattr(gdb, 'events'): |
155 | gdb.events.exited.connect(exit_handler) | 168 | gdb.events.exited.connect(exit_handler) |
156 | return gdbserver_type | 169 | return gdbserver_type |
170 | |||
171 | |||
172 | def gdb_eval_or_none(expresssion): | ||
173 | try: | ||
174 | return gdb.parse_and_eval(expresssion) | ||
175 | except: | ||
176 | return None | ||
177 | |||
178 | |||
179 | def dentry_name(d): | ||
180 | parent = d['d_parent'] | ||
181 | if parent == d or parent == 0: | ||
182 | return "" | ||
183 | p = dentry_name(d['d_parent']) + "/" | ||
184 | return p + d['d_iname'].string() | ||