diff options
| author | Chaoren Lin <chaorenl@google.com> | 2015-06-02 16:46:28 +0000 |
|---|---|---|
| committer | Chaoren Lin <chaorenl@google.com> | 2015-06-02 16:46:28 +0000 |
| commit | f59d050968b91ced03d786a7e8ab77c0bba91f24 (patch) | |
| tree | 82748c4b19815bb085e90979cd9d24e8ea7ca28d | |
| parent | 7d76a13bf3e8da7887fb1a6e5fcc7eaf4e2af957 (diff) | |
| download | bcm5719-llvm-f59d050968b91ced03d786a7e8ab77c0bba91f24.tar.gz bcm5719-llvm-f59d050968b91ced03d786a7e8ab77c0bba91f24.zip | |
Added utility function to get correct signal number from remote platform.
Summary:
This change adds a utility that uses the `kill -l` command to get the
correct signal number. Falls back to using `SBUnixSignals`, and finally
`signal.SIG<signal>` if all else fails.
Reviewers: tberghammer, clayborg, ovyalov
Reviewed By: clayborg, ovyalov
Subscribers: tberghammer, lldb-commits
Differential Revision: http://reviews.llvm.org/D10171
llvm-svn: 238850
| -rw-r--r-- | lldb/test/lldbutil.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/lldb/test/lldbutil.py b/lldb/test/lldbutil.py index 71699826a1c..6951a33888e 100644 --- a/lldb/test/lldbutil.py +++ b/lldb/test/lldbutil.py @@ -922,3 +922,44 @@ def join_remote_paths(*paths): def append_to_remote_wd(*paths): return join_remote_paths(lldb.remote_platform.GetWorkingDirectory(), *paths) + +# ================================================== +# Utility functions to get the correct signal number +# ================================================== + +import signal + +def get_signal_number(signal_name): + platform = lldb.remote_platform + if platform: + if platform.GetName() == 'remote-linux': + command = lldb.SBPlatformShellCommand('kill -l %d' % signal_name) + if platform.Run(command).Success() and command.GetStatus() == 0: + try: + return int(command.GetOutput()) + except ValueError: + pass + elif platform.GetName() == 'remote-android': + for signal_number in range(1, 65): + command = lldb.SBPlatformShellCommand('kill -l %d' % signal_number) + if platform.Run(command).Fail() or command.GetStatus() != 0: + continue + output = command.GetOutput().strip().upper() + if not output.startswith('SIG'): + output = 'SIG' + output + if output == signal_name: + return signal_number + for target_index in range(lldb.debugger.GetNumTargets()): + target = lldb.debugger.GetTargetAtIndex(target_index) + if not target.IsValid(): + continue + process = target.GetProcess() + if not process.IsValid(): + continue + signals = process.GetUnixSignals() + if not signals.IsValid(): + continue + signal_number = signals.GetSignalNumberFromName(signal_name) + if signal_number > 0: + return signal_number + return getattr(signal, signal_name) |

