On 10/07, Roland McGrath wrote: > > Make it something like: > > static inline void set_stop_code(struct ptrace_context *ctx, int event) > { > ctx->stop_code = (event << 8) | SIGTRAP | > (event >= PTRACE_EVENT_SYSCALL_ENTRY && > (ctx->options & PTRACE_O_TRACESYSGOOD) ? 0x80 : 0); > } > > and pick PTRACE_EVENT_* numbers so SYSCALL_{ENTRY,EXIT} are highest, > or something along those lines.
Oh, I don't like this. This is unreadable, and ">= PTRACE_EVENT_" complicates the reading even more. How about void set_stop_code(struct ptrace_context *ctx, int event) { ctx->stop_code = (event << 8) | SIGTRAP; } void set_syscall_code(struct ptrace_context *ctx, int event) { set_stop_code(ctx, event); if (PTRACE_O_TRACESYSGOOD) ctx->stop_code |= 0x80; } Or, void __set_stop_code(struct ptrace_context *ctx, int event, int sig) { ctx->stop_code = (event << 8) | sig; } void set_syscall_code(struct ptrace_context *ctx, int event) { int sig = PTRACE_O_TRACESYSGOOD ? (0x80 | SIGTRAP) : SIGTRAP; __set_stop_code(event, sig); } void set_stop_code(struct ptrace_context *ctx, int event) { __set_stop_code(event, SIGTRAP); } This way ptrace_report_signal() can use __set_stop_code() too. But this is minor, if your prefer your version I'll send the patch. Oleg.