Hello, TL;DR: I'd like to implement at least partial support for reading/writing siginfo via LLDB. I can't think of a better approach than copying the GDB's idea of "magical" $_siginfo variable that works through the expression evaluator. I'd like to know your opinion/ideas.
POSIX defines a siginfo_t structure that is used to pass additional signal information -- such as more detailed signal code, faulting memory address in case of SIGSEGV or PID of the child process in case of SIGCHLD. LLDB already uses ptrace(2) to obtain this information and use it internally but it doesn't expose it to the user. The GDB Remote Serial protocol provides the ability to read/write siginfo via qXfer:siginfo:... packets [1]. GDB exposes this information to the user via a special $_siginfo variable [2]. A few things to note: 1. Some targets (e.g. Linux, NetBSD) support overwriting siginfo, some (e.g. FreeBSD) only reading. 2. Siginfo is generally associated with a single thread, so the packets should be combined with respective thread selection (Hg or Hc?). 3. The exact type of siginfo_t differs per platform (POSIX specifies a minimal subset). My rough idea right now is to follow GDB here. While using "$_siginfo" may seem hacky, it has the nice advantage that it can easily support all different siginfo_t structures used by various platforms. The plan would be to: 1. Implement the qXfer:siginfo:... packets in lldb-server, and add tests to them. 2. Implement support for "$_siginfo" in the client (I suppose this means hacking on expression evaluator). 3. (Optionally) implement hardcoded siginfo_t definitions for common platforms to make things work without debug info. WDYT? [1] https://www.sourceware.org/gdb/onlinedocs/gdb/General-Query-Packets.html#qXfer-siginfo-read [2] https://sourceware.org/gdb/current/onlinedocs/gdb.html#Signals -- Best regards, Michał Górny _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev