1 2 /*--------------------------------------------------------------------*/ 3 /*--- Implementation of POSIX signals. m_signals.c ---*/ 4 /*--------------------------------------------------------------------*/ 5 6 /* 7 This file is part of Valgrind, a dynamic binary instrumentation 8 framework. 9 10 Copyright (C) 2000-2012 Julian Seward 11 jseward (at) acm.org 12 13 This program is free software; you can redistribute it and/or 14 modify it under the terms of the GNU General Public License as 15 published by the Free Software Foundation; either version 2 of the 16 License, or (at your option) any later version. 17 18 This program is distributed in the hope that it will be useful, but 19 WITHOUT ANY WARRANTY; without even the implied warranty of 20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 21 General Public License for more details. 22 23 You should have received a copy of the GNU General Public License 24 along with this program; if not, write to the Free Software 25 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 26 02111-1307, USA. 27 28 The GNU General Public License is contained in the file COPYING. 29 */ 30 31 /* 32 Signal handling. 33 34 There are 4 distinct classes of signal: 35 36 1. Synchronous, instruction-generated (SIGILL, FPE, BUS, SEGV and 37 TRAP): these are signals as a result of an instruction fault. If 38 we get one while running client code, then we just do the 39 appropriate thing. If it happens while running Valgrind code, then 40 it indicates a Valgrind bug. Note that we "manually" implement 41 automatic stack growth, such that if a fault happens near the 42 client process stack, it is extended in the same way the kernel 43 would, and the fault is never reported to the client program. 44 45 2. Asynchronous variants of the above signals: If the kernel tries 46 to deliver a sync signal while it is blocked, it just kills the 47 process. Therefore, we can't block those signals if we want to be 48 able to report on bugs in Valgrind. This means that we're also 49 open to receiving those signals from other processes, sent with 50 kill. We could get away with just dropping them, since they aren't 51 really signals that processes send to each other. 52 53 3. Synchronous, general signals. If a thread/process sends itself 54 a signal with kill, its expected to be synchronous: ie, the signal 55 will have been delivered by the time the syscall finishes. 56 57 4. Asynchronous, general signals. All other signals, sent by 58 another process with kill. These are generally blocked, except for 59 two special cases: we poll for them each time we're about to run a 60 thread for a time quanta, and while running blocking syscalls. 61 62 63 In addition, we reserve one signal for internal use: SIGVGKILL. 64 SIGVGKILL is used to terminate threads. When one thread wants 65 another to exit, it will set its exitreason and send it SIGVGKILL 66 if it appears to be blocked in a syscall. 67 68 69 We use a kernel thread for each application thread. When the 70 thread allows itself to be open to signals, it sets the thread 71 signal mask to what the client application set it to. This means 72 that we get the kernel to do all signal routing: under Valgrind, 73 signals get delivered in the same way as in the non-Valgrind case 74 (the exception being for the sync signal set, since they're almost 75 always unblocked). 76 */ 77 78 /* 79 Some more details... 80 81 First off, we take note of the client's requests (via sys_sigaction 82 and sys_sigprocmask) to set the signal state (handlers for each 83 signal, which are process-wide, + a mask for each signal, which is 84 per-thread). This info is duly recorded in the SCSS (static Client 85 signal state) in m_signals.c, and if the client later queries what 86 the state is, we merely fish the relevant info out of SCSS and give 87 it back. 88 89 However, we set the real signal state in the kernel to something 90 entirely different. This is recorded in SKSS, the static Kernel 91 signal state. What's nice (to the extent that anything is nice w.r.t 92 signals) is that there's a pure function to calculate SKSS from SCSS, 93 calculate_SKSS_from_SCSS. So when the client changes SCSS then we 94 recompute the associated SKSS and apply any changes from the previous 95 SKSS through to the kernel. 96 97 Now, that said, the general scheme we have now is, that regardless of 98 what the client puts into the SCSS (viz, asks for), what we would 99 like to do is as follows: 100 101 (1) run code on the virtual CPU with all signals blocked 102 103 (2) at convenient moments for us (that is, when the VCPU stops, and 104 control is back with the scheduler), ask the kernel "do you have 105 any signals for me?" and if it does, collect up the info, and 106 deliver them to the client (by building sigframes). 107 108 And that's almost what we do. The signal polling is done by 109 VG_(poll_signals), which calls through to VG_(sigtimedwait_zero) to 110 do the dirty work. (of which more later). 111 112 By polling signals, rather than catching them, we get to deal with 113 them only at convenient moments, rather than having to recover from 114 taking a signal while generated code is running. 115 116 Now unfortunately .. the above scheme only works for so-called async 117 signals. An async signal is one which isn't associated with any 118 particular instruction, eg Control-C (SIGINT). For those, it doesn't 119 matter if we don't deliver the signal to the client immediately; it 120 only matters that we deliver it eventually. Hence polling is OK. 121 122 But the other group -- sync signals -- are all related by the fact 123 that they are various ways for the host CPU to fail to execute an 124 instruction: SIGILL, SIGSEGV, SIGFPU. And they can't be deferred, 125 because obviously if a host instruction can't execute, well then we 126 have to immediately do Plan B, whatever that is. 127 128 So the next approximation of what happens is: 129 130 (1) run code on vcpu with all async signals blocked 131 132 (2) at convenient moments (when NOT running the vcpu), poll for async 133 signals. 134 135 (1) and (2) together imply that if the host does deliver a signal to 136 async_signalhandler while the VCPU is running, something's 137 seriously wrong. 138 139 (3) when running code on vcpu, don't block sync signals. Instead 140 register sync_signalhandler and catch any such via that. Of 141 course, that means an ugly recovery path if we do -- the 142 sync_signalhandler has to longjump, exiting out of the generated 143 code, and the assembly-dispatcher thingy that runs it, and gets 144 caught in m_scheduler, which then tells m_signals to deliver the 145 signal. 146 147 Now naturally (ha ha) even that might be tolerable, but there's 148 something worse: dealing with signals delivered to threads in 149 syscalls. 150 151 Obviously from the above, SKSS's signal mask (viz, what we really run 152 with) is way different from SCSS's signal mask (viz, what the client 153 thread thought it asked for). (eg) It may well be that the client 154 did not block control-C, so that it just expects to drop dead if it 155 receives ^C whilst blocked in a syscall, but by default we are 156 running with all async signals blocked, and so that signal could be 157 arbitrarily delayed, or perhaps even lost (not sure). 158 159 So what we have to do, when doing any syscall which SfMayBlock, is to 160 quickly switch in the SCSS-specified signal mask just before the 161 syscall, and switch it back just afterwards, and hope that we don't 162 get caught up in some wierd race condition. This is the primary 163 purpose of the ultra-magical pieces of assembly code in 164 coregrind/m_syswrap/syscall-<plat>.S 165 166 ----------- 167 168 The ways in which V can come to hear of signals that need to be 169 forwarded to the client as are follows: 170 171 sync signals: can arrive at any time whatsoever. These are caught 172 by sync_signalhandler 173 174 async signals: 175 176 if running generated code 177 then these are blocked, so we don't expect to catch them in 178 async_signalhandler 179 180 else 181 if thread is blocked in a syscall marked SfMayBlock 182 then signals may be delivered to async_sighandler, since we 183 temporarily unblocked them for the duration of the syscall, 184 by using the real (SCSS) mask for this thread 185 186 else we're doing misc housekeeping activities (eg, making a translation, 187 washing our hair, etc). As in the normal case, these signals are 188 blocked, but we can and do poll for them using VG_(poll_signals). 189 190 Now, re VG_(poll_signals), it polls the kernel by doing 191 VG_(sigtimedwait_zero). This is trivial on Linux, since it's just a 192 syscall. But on Darwin and AIX, we have to cobble together the 193 functionality in a tedious, longwinded and probably error-prone way. 194 195 Finally, if a gdb is debugging the process under valgrind, 196 the signal can be ignored if gdb tells this. So, before resuming the 197 scheduler/delivering the signal, a call to VG_(gdbserver_report_signal) 198 is done. If this returns True, the signal is delivered. 199 */ 200 201 #include "pub_core_basics.h" 202 #include "pub_core_vki.h" 203 #include "pub_core_vkiscnums.h" 204 #include "pub_core_debuglog.h" 205 #include "pub_core_libcsetjmp.h" // to keep _threadstate.h happy 206 #include "pub_core_threadstate.h" 207 #include "pub_core_xarray.h" 208 #include "pub_core_clientstate.h" 209 #include "pub_core_aspacemgr.h" 210 #include "pub_core_debugger.h" // For VG_(start_debugger) 211 #include "pub_core_errormgr.h" 212 #include "pub_core_gdbserver.h" 213 #include "pub_core_libcbase.h" 214 #include "pub_core_libcassert.h" 215 #include "pub_core_libcprint.h" 216 #include "pub_core_libcproc.h" 217 #include "pub_core_libcsignal.h" 218 #include "pub_core_machine.h" 219 #include "pub_core_mallocfree.h" 220 #include "pub_core_options.h" 221 #include "pub_core_scheduler.h" 222 #include "pub_core_signals.h" 223 #include "pub_core_sigframe.h" // For VG_(sigframe_create)() 224 #include "pub_core_stacks.h" // For VG_(change_stack)() 225 #include "pub_core_stacktrace.h" // For VG_(get_and_pp_StackTrace)() 226 #include "pub_core_syscall.h" 227 #include "pub_core_syswrap.h" 228 #include "pub_core_tooliface.h" 229 #include "pub_core_coredump.h" 230 231 232 /* --------------------------------------------------------------------- 233 Forwards decls. 234 ------------------------------------------------------------------ */ 235 236 static void sync_signalhandler ( Int sigNo, vki_siginfo_t *info, 237 struct vki_ucontext * ); 238 static void async_signalhandler ( Int sigNo, vki_siginfo_t *info, 239 struct vki_ucontext * ); 240 static void sigvgkill_handler ( Int sigNo, vki_siginfo_t *info, 241 struct vki_ucontext * ); 242 243 /* Maximum usable signal. */ 244 Int VG_(max_signal) = _VKI_NSIG; 245 246 #define N_QUEUED_SIGNALS 8 247 248 typedef struct SigQueue { 249 Int next; 250 vki_siginfo_t sigs[N_QUEUED_SIGNALS]; 251 } SigQueue; 252 253 /* ------ Macros for pulling stuff out of ucontexts ------ */ 254 255 /* Q: what does VG_UCONTEXT_SYSCALL_SYSRES do? A: let's suppose the 256 machine context (uc) reflects the situation that a syscall had just 257 completed, quite literally -- that is, that the program counter was 258 now at the instruction following the syscall. (or we're slightly 259 downstream, but we're sure no relevant register has yet changed 260 value.) Then VG_UCONTEXT_SYSCALL_SYSRES returns a SysRes reflecting 261 the result of the syscall; it does this by fishing relevant bits of 262 the machine state out of the uc. Of course if the program counter 263 was somewhere else entirely then the result is likely to be 264 meaningless, so the caller of VG_UCONTEXT_SYSCALL_SYSRES has to be 265 very careful to pay attention to the results only when it is sure 266 that the said constraint on the program counter is indeed valid. */ 267 268 #if defined(VGP_x86_linux) 269 # define VG_UCONTEXT_INSTR_PTR(uc) ((uc)->uc_mcontext.eip) 270 # define VG_UCONTEXT_STACK_PTR(uc) ((uc)->uc_mcontext.esp) 271 # define VG_UCONTEXT_SYSCALL_SYSRES(uc) \ 272 /* Convert the value in uc_mcontext.eax into a SysRes. */ \ 273 VG_(mk_SysRes_x86_linux)( (uc)->uc_mcontext.eax ) 274 # define VG_UCONTEXT_TO_UnwindStartRegs(srP, uc) \ 275 { (srP)->r_pc = (ULong)((uc)->uc_mcontext.eip); \ 276 (srP)->r_sp = (ULong)((uc)->uc_mcontext.esp); \ 277 (srP)->misc.X86.r_ebp = (uc)->uc_mcontext.ebp; \ 278 } 279 280 #elif defined(VGP_amd64_linux) 281 # define VG_UCONTEXT_INSTR_PTR(uc) ((uc)->uc_mcontext.rip) 282 # define VG_UCONTEXT_STACK_PTR(uc) ((uc)->uc_mcontext.rsp) 283 # define VG_UCONTEXT_SYSCALL_SYSRES(uc) \ 284 /* Convert the value in uc_mcontext.rax into a SysRes. */ \ 285 VG_(mk_SysRes_amd64_linux)( (uc)->uc_mcontext.rax ) 286 # define VG_UCONTEXT_TO_UnwindStartRegs(srP, uc) \ 287 { (srP)->r_pc = (uc)->uc_mcontext.rip; \ 288 (srP)->r_sp = (uc)->uc_mcontext.rsp; \ 289 (srP)->misc.AMD64.r_rbp = (uc)->uc_mcontext.rbp; \ 290 } 291 292 #elif defined(VGP_ppc32_linux) 293 /* Comments from Paul Mackerras 25 Nov 05: 294 295 > I'm tracking down a problem where V's signal handling doesn't 296 > work properly on a ppc440gx running 2.4.20. The problem is that 297 > the ucontext being presented to V's sighandler seems completely 298 > bogus. 299 300 > V's kernel headers and hence ucontext layout are derived from 301 > 2.6.9. I compared include/asm-ppc/ucontext.h from 2.4.20 and 302 > 2.6.13. 303 304 > Can I just check my interpretation: the 2.4.20 one contains the 305 > uc_mcontext field in line, whereas the 2.6.13 one has a pointer 306 > to said struct? And so if V is using the 2.6.13 struct then a 307 > 2.4.20 one will make no sense to it. 308 309 Not quite... what is inline in the 2.4.20 version is a 310 sigcontext_struct, not an mcontext. The sigcontext looks like 311 this: 312 313 struct sigcontext_struct { 314 unsigned long _unused[4]; 315 int signal; 316 unsigned long handler; 317 unsigned long oldmask; 318 struct pt_regs *regs; 319 }; 320 321 The regs pointer of that struct ends up at the same offset as the 322 uc_regs of the 2.6 struct ucontext, and a struct pt_regs is the 323 same as the mc_gregs field of the mcontext. In fact the integer 324 regs are followed in memory by the floating point regs on 2.4.20. 325 326 Thus if you are using the 2.6 definitions, it should work on 2.4.20 327 provided that you go via uc->uc_regs rather than looking in 328 uc->uc_mcontext directly. 329 330 There is another subtlety: 2.4.20 doesn't save the vector regs when 331 delivering a signal, and 2.6.x only saves the vector regs if the 332 process has ever used an altivec instructions. If 2.6.x does save 333 the vector regs, it sets the MSR_VEC bit in 334 uc->uc_regs->mc_gregs[PT_MSR], otherwise it clears it. That bit 335 will always be clear under 2.4.20. So you can use that bit to tell 336 whether uc->uc_regs->mc_vregs is valid. */ 337 # define VG_UCONTEXT_INSTR_PTR(uc) ((uc)->uc_regs->mc_gregs[VKI_PT_NIP]) 338 # define VG_UCONTEXT_STACK_PTR(uc) ((uc)->uc_regs->mc_gregs[VKI_PT_R1]) 339 # define VG_UCONTEXT_SYSCALL_SYSRES(uc) \ 340 /* Convert the values in uc_mcontext r3,cr into a SysRes. */ \ 341 VG_(mk_SysRes_ppc32_linux)( \ 342 (uc)->uc_regs->mc_gregs[VKI_PT_R3], \ 343 (((uc)->uc_regs->mc_gregs[VKI_PT_CCR] >> 28) & 1) \ 344 ) 345 # define VG_UCONTEXT_TO_UnwindStartRegs(srP, uc) \ 346 { (srP)->r_pc = (ULong)((uc)->uc_regs->mc_gregs[VKI_PT_NIP]); \ 347 (srP)->r_sp = (ULong)((uc)->uc_regs->mc_gregs[VKI_PT_R1]); \ 348 (srP)->misc.PPC32.r_lr = (uc)->uc_regs->mc_gregs[VKI_PT_LNK]; \ 349 } 350 351 #elif defined(VGP_ppc64_linux) 352 # define VG_UCONTEXT_INSTR_PTR(uc) ((uc)->uc_mcontext.gp_regs[VKI_PT_NIP]) 353 # define VG_UCONTEXT_STACK_PTR(uc) ((uc)->uc_mcontext.gp_regs[VKI_PT_R1]) 354 /* Dubious hack: if there is an error, only consider the lowest 8 355 bits of r3. memcheck/tests/post-syscall shows a case where an 356 interrupted syscall should have produced a ucontext with 0x4 357 (VKI_EINTR) in r3 but is in fact producing 0x204. */ 358 /* Awaiting clarification from PaulM. Evidently 0x204 is 359 ERESTART_RESTARTBLOCK, which shouldn't have made it into user 360 space. */ 361 static inline SysRes VG_UCONTEXT_SYSCALL_SYSRES( struct vki_ucontext* uc ) 362 { 363 ULong err = (uc->uc_mcontext.gp_regs[VKI_PT_CCR] >> 28) & 1; 364 ULong r3 = uc->uc_mcontext.gp_regs[VKI_PT_R3]; 365 if (err) r3 &= 0xFF; 366 return VG_(mk_SysRes_ppc64_linux)( r3, err ); 367 } 368 # define VG_UCONTEXT_TO_UnwindStartRegs(srP, uc) \ 369 { (srP)->r_pc = (uc)->uc_mcontext.gp_regs[VKI_PT_NIP]; \ 370 (srP)->r_sp = (uc)->uc_mcontext.gp_regs[VKI_PT_R1]; \ 371 (srP)->misc.PPC64.r_lr = (uc)->uc_mcontext.gp_regs[VKI_PT_LNK]; \ 372 } 373 374 #elif defined(VGP_arm_linux) 375 # define VG_UCONTEXT_INSTR_PTR(uc) ((uc)->uc_mcontext.arm_pc) 376 # define VG_UCONTEXT_STACK_PTR(uc) ((uc)->uc_mcontext.arm_sp) 377 # define VG_UCONTEXT_SYSCALL_SYSRES(uc) \ 378 /* Convert the value in uc_mcontext.rax into a SysRes. */ \ 379 VG_(mk_SysRes_arm_linux)( (uc)->uc_mcontext.arm_r0 ) 380 # define VG_UCONTEXT_TO_UnwindStartRegs(srP, uc) \ 381 { (srP)->r_pc = (uc)->uc_mcontext.arm_pc; \ 382 (srP)->r_sp = (uc)->uc_mcontext.arm_sp; \ 383 (srP)->misc.ARM.r14 = (uc)->uc_mcontext.arm_lr; \ 384 (srP)->misc.ARM.r12 = (uc)->uc_mcontext.arm_ip; \ 385 (srP)->misc.ARM.r11 = (uc)->uc_mcontext.arm_fp; \ 386 (srP)->misc.ARM.r7 = (uc)->uc_mcontext.arm_r7; \ 387 } 388 389 #elif defined(VGP_x86_darwin) 390 391 static inline Addr VG_UCONTEXT_INSTR_PTR( void* ucV ) { 392 ucontext_t* uc = (ucontext_t*)ucV; 393 struct __darwin_mcontext32* mc = uc->uc_mcontext; 394 struct __darwin_i386_thread_state* ss = &mc->__ss; 395 return ss->__eip; 396 } 397 static inline Addr VG_UCONTEXT_STACK_PTR( void* ucV ) { 398 ucontext_t* uc = (ucontext_t*)ucV; 399 struct __darwin_mcontext32* mc = uc->uc_mcontext; 400 struct __darwin_i386_thread_state* ss = &mc->__ss; 401 return ss->__esp; 402 } 403 static inline SysRes VG_UCONTEXT_SYSCALL_SYSRES( void* ucV, 404 UWord scclass ) { 405 /* this is complicated by the problem that there are 3 different 406 kinds of syscalls, each with its own return convention. 407 NB: scclass is a host word, hence UWord is good for both 408 amd64-darwin and x86-darwin */ 409 ucontext_t* uc = (ucontext_t*)ucV; 410 struct __darwin_mcontext32* mc = uc->uc_mcontext; 411 struct __darwin_i386_thread_state* ss = &mc->__ss; 412 /* duplicates logic in m_syswrap.getSyscallStatusFromGuestState */ 413 UInt carry = 1 & ss->__eflags; 414 UInt err = 0; 415 UInt wLO = 0; 416 UInt wHI = 0; 417 switch (scclass) { 418 case VG_DARWIN_SYSCALL_CLASS_UNIX: 419 err = carry; 420 wLO = ss->__eax; 421 wHI = ss->__edx; 422 break; 423 case VG_DARWIN_SYSCALL_CLASS_MACH: 424 wLO = ss->__eax; 425 break; 426 case VG_DARWIN_SYSCALL_CLASS_MDEP: 427 wLO = ss->__eax; 428 break; 429 default: 430 vg_assert(0); 431 break; 432 } 433 return VG_(mk_SysRes_x86_darwin)( scclass, err ? True : False, 434 wHI, wLO ); 435 } 436 static inline 437 void VG_UCONTEXT_TO_UnwindStartRegs( UnwindStartRegs* srP, 438 void* ucV ) { 439 ucontext_t* uc = (ucontext_t*)(ucV); 440 struct __darwin_mcontext32* mc = uc->uc_mcontext; 441 struct __darwin_i386_thread_state* ss = &mc->__ss; 442 srP->r_pc = (ULong)(ss->__eip); 443 srP->r_sp = (ULong)(ss->__esp); 444 srP->misc.X86.r_ebp = (UInt)(ss->__ebp); 445 } 446 447 #elif defined(VGP_amd64_darwin) 448 449 static inline Addr VG_UCONTEXT_INSTR_PTR( void* ucV ) { 450 ucontext_t* uc = (ucontext_t*)ucV; 451 struct __darwin_mcontext64* mc = uc->uc_mcontext; 452 struct __darwin_x86_thread_state64* ss = &mc->__ss; 453 return ss->__rip; 454 } 455 static inline Addr VG_UCONTEXT_STACK_PTR( void* ucV ) { 456 ucontext_t* uc = (ucontext_t*)ucV; 457 struct __darwin_mcontext64* mc = uc->uc_mcontext; 458 struct __darwin_x86_thread_state64* ss = &mc->__ss; 459 return ss->__rsp; 460 } 461 static inline SysRes VG_UCONTEXT_SYSCALL_SYSRES( void* ucV, 462 UWord scclass ) { 463 /* This is copied from the x86-darwin case. I'm not sure if it 464 is correct. */ 465 ucontext_t* uc = (ucontext_t*)ucV; 466 struct __darwin_mcontext64* mc = uc->uc_mcontext; 467 struct __darwin_x86_thread_state64* ss = &mc->__ss; 468 /* duplicates logic in m_syswrap.getSyscallStatusFromGuestState */ 469 ULong carry = 1 & ss->__rflags; 470 ULong err = 0; 471 ULong wLO = 0; 472 ULong wHI = 0; 473 switch (scclass) { 474 case VG_DARWIN_SYSCALL_CLASS_UNIX: 475 err = carry; 476 wLO = ss->__rax; 477 wHI = ss->__rdx; 478 break; 479 case VG_DARWIN_SYSCALL_CLASS_MACH: 480 wLO = ss->__rax; 481 break; 482 case VG_DARWIN_SYSCALL_CLASS_MDEP: 483 wLO = ss->__rax; 484 break; 485 default: 486 vg_assert(0); 487 break; 488 } 489 return VG_(mk_SysRes_amd64_darwin)( scclass, err ? True : False, 490 wHI, wLO ); 491 } 492 static inline 493 void VG_UCONTEXT_TO_UnwindStartRegs( UnwindStartRegs* srP, 494 void* ucV ) { 495 ucontext_t* uc = (ucontext_t*)ucV; 496 struct __darwin_mcontext64* mc = uc->uc_mcontext; 497 struct __darwin_x86_thread_state64* ss = &mc->__ss; 498 srP->r_pc = (ULong)(ss->__rip); 499 srP->r_sp = (ULong)(ss->__rsp); 500 srP->misc.AMD64.r_rbp = (ULong)(ss->__rbp); 501 } 502 503 #elif defined(VGP_s390x_linux) 504 505 # define VG_UCONTEXT_INSTR_PTR(uc) ((uc)->uc_mcontext.regs.psw.addr) 506 # define VG_UCONTEXT_STACK_PTR(uc) ((uc)->uc_mcontext.regs.gprs[15]) 507 # define VG_UCONTEXT_FRAME_PTR(uc) ((uc)->uc_mcontext.regs.gprs[11]) 508 # define VG_UCONTEXT_SYSCALL_SYSRES(uc) \ 509 VG_(mk_SysRes_s390x_linux)((uc)->uc_mcontext.regs.gprs[2]) 510 # define VG_UCONTEXT_LINK_REG(uc) ((uc)->uc_mcontext.regs.gprs[14]) 511 512 # define VG_UCONTEXT_TO_UnwindStartRegs(srP, uc) \ 513 { (srP)->r_pc = (ULong)((uc)->uc_mcontext.regs.psw.addr); \ 514 (srP)->r_sp = (ULong)((uc)->uc_mcontext.regs.gprs[15]); \ 515 (srP)->misc.S390X.r_fp = (uc)->uc_mcontext.regs.gprs[11]; \ 516 (srP)->misc.S390X.r_lr = (uc)->uc_mcontext.regs.gprs[14]; \ 517 } 518 519 #elif defined(VGP_mips32_linux) 520 # define VG_UCONTEXT_INSTR_PTR(uc) ((UWord)(((uc)->uc_mcontext.sc_pc))) 521 # define VG_UCONTEXT_STACK_PTR(uc) ((UWord)((uc)->uc_mcontext.sc_regs[29])) 522 # define VG_UCONTEXT_FRAME_PTR(uc) ((uc)->uc_mcontext.sc_regs[30]) 523 # define VG_UCONTEXT_SYSCALL_NUM(uc) ((uc)->uc_mcontext.sc_regs[2]) 524 # define VG_UCONTEXT_SYSCALL_SYSRES(uc) \ 525 /* Convert the value in uc_mcontext.rax into a SysRes. */ \ 526 VG_(mk_SysRes_mips32_linux)( (uc)->uc_mcontext.sc_regs[2], \ 527 (uc)->uc_mcontext.sc_regs[3], \ 528 (uc)->uc_mcontext.sc_regs[7]) 529 530 # define VG_UCONTEXT_TO_UnwindStartRegs(srP, uc) \ 531 { (srP)->r_pc = (uc)->uc_mcontext.sc_pc; \ 532 (srP)->r_sp = (uc)->uc_mcontext.sc_regs[29]; \ 533 (srP)->misc.MIPS32.r30 = (uc)->uc_mcontext.sc_regs[30]; \ 534 (srP)->misc.MIPS32.r31 = (uc)->uc_mcontext.sc_regs[31]; \ 535 (srP)->misc.MIPS32.r28 = (uc)->uc_mcontext.sc_regs[28]; \ 536 } 537 538 539 #else 540 # error Unknown platform 541 #endif 542 543 544 /* ------ Macros for pulling stuff out of siginfos ------ */ 545 546 /* These macros allow use of uniform names when working with 547 both the Linux and AIX vki definitions. */ 548 #if defined(VGO_linux) 549 # define VKI_SIGINFO_si_addr _sifields._sigfault._addr 550 # define VKI_SIGINFO_si_pid _sifields._kill._pid 551 #elif defined(VGO_darwin) 552 # define VKI_SIGINFO_si_addr si_addr 553 # define VKI_SIGINFO_si_pid si_pid 554 #else 555 # error Unknown OS 556 #endif 557 558 559 /* --------------------------------------------------------------------- 560 HIGH LEVEL STUFF TO DO WITH SIGNALS: POLICY (MOSTLY) 561 ------------------------------------------------------------------ */ 562 563 /* --------------------------------------------------------------------- 564 Signal state for this process. 565 ------------------------------------------------------------------ */ 566 567 568 /* Base-ment of these arrays[_VKI_NSIG]. 569 570 Valid signal numbers are 1 .. _VKI_NSIG inclusive. 571 Rather than subtracting 1 for indexing these arrays, which 572 is tedious and error-prone, they are simply dimensioned 1 larger, 573 and entry [0] is not used. 574 */ 575 576 577 /* ----------------------------------------------------- 578 Static client signal state (SCSS). This is the state 579 that the client thinks it has the kernel in. 580 SCSS records verbatim the client's settings. These 581 are mashed around only when SKSS is calculated from it. 582 -------------------------------------------------- */ 583 584 typedef 585 struct { 586 void* scss_handler; /* VKI_SIG_DFL or VKI_SIG_IGN or ptr to 587 client's handler */ 588 UInt scss_flags; 589 vki_sigset_t scss_mask; 590 void* scss_restorer; /* where sigreturn goes */ 591 void* scss_sa_tramp; /* sa_tramp setting, Darwin only */ 592 /* re _restorer and _sa_tramp, we merely record the values 593 supplied when the client does 'sigaction' and give them back 594 when requested. Otherwise they are simply ignored. */ 595 } 596 SCSS_Per_Signal; 597 598 typedef 599 struct { 600 /* per-signal info */ 601 SCSS_Per_Signal scss_per_sig[1+_VKI_NSIG]; 602 603 /* Additional elements to SCSS not stored here: 604 - for each thread, the thread's blocking mask 605 - for each thread in WaitSIG, the set of waited-on sigs 606 */ 607 } 608 SCSS; 609 610 static SCSS scss; 611 612 613 /* ----------------------------------------------------- 614 Static kernel signal state (SKSS). This is the state 615 that we have the kernel in. It is computed from SCSS. 616 -------------------------------------------------- */ 617 618 /* Let's do: 619 sigprocmask assigns to all thread masks 620 so that at least everything is always consistent 621 Flags: 622 SA_SIGINFO -- we always set it, and honour it for the client 623 SA_NOCLDSTOP -- passed to kernel 624 SA_ONESHOT or SA_RESETHAND -- pass through 625 SA_RESTART -- we observe this but set our handlers to always restart 626 SA_NOMASK or SA_NODEFER -- we observe this, but our handlers block everything 627 SA_ONSTACK -- pass through 628 SA_NOCLDWAIT -- pass through 629 */ 630 631 632 typedef 633 struct { 634 void* skss_handler; /* VKI_SIG_DFL or VKI_SIG_IGN 635 or ptr to our handler */ 636 UInt skss_flags; 637 /* There is no skss_mask, since we know that we will always ask 638 for all signals to be blocked in our sighandlers. */ 639 /* Also there is no skss_restorer. */ 640 } 641 SKSS_Per_Signal; 642 643 typedef 644 struct { 645 SKSS_Per_Signal skss_per_sig[1+_VKI_NSIG]; 646 } 647 SKSS; 648 649 static SKSS skss; 650 651 /* returns True if signal is to be ignored. 652 To check this, possibly call gdbserver with tid. */ 653 static Bool is_sig_ign(Int sigNo, ThreadId tid) 654 { 655 vg_assert(sigNo >= 1 && sigNo <= _VKI_NSIG); 656 657 return scss.scss_per_sig[sigNo].scss_handler == VKI_SIG_IGN 658 || !VG_(gdbserver_report_signal) (sigNo, tid); 659 } 660 661 /* --------------------------------------------------------------------- 662 Compute the SKSS required by the current SCSS. 663 ------------------------------------------------------------------ */ 664 665 static 666 void pp_SKSS ( void ) 667 { 668 Int sig; 669 VG_(printf)("\n\nSKSS:\n"); 670 for (sig = 1; sig <= _VKI_NSIG; sig++) { 671 VG_(printf)("sig %d: handler %p, flags 0x%x\n", sig, 672 skss.skss_per_sig[sig].skss_handler, 673 skss.skss_per_sig[sig].skss_flags ); 674 675 } 676 } 677 678 /* This is the core, clever bit. Computation is as follows: 679 680 For each signal 681 handler = if client has a handler, then our handler 682 else if client is DFL, then our handler as well 683 else (client must be IGN) 684 then hander is IGN 685 */ 686 static 687 void calculate_SKSS_from_SCSS ( SKSS* dst ) 688 { 689 Int sig; 690 UInt scss_flags; 691 UInt skss_flags; 692 693 for (sig = 1; sig <= _VKI_NSIG; sig++) { 694 void *skss_handler; 695 void *scss_handler; 696 697 scss_handler = scss.scss_per_sig[sig].scss_handler; 698 scss_flags = scss.scss_per_sig[sig].scss_flags; 699 700 switch(sig) { 701 case VKI_SIGSEGV: 702 case VKI_SIGBUS: 703 case VKI_SIGFPE: 704 case VKI_SIGILL: 705 case VKI_SIGTRAP: 706 /* For these, we always want to catch them and report, even 707 if the client code doesn't. */ 708 skss_handler = sync_signalhandler; 709 break; 710 711 case VKI_SIGCONT: 712 /* Let the kernel handle SIGCONT unless the client is actually 713 catching it. */ 714 case VKI_SIGCHLD: 715 case VKI_SIGWINCH: 716 case VKI_SIGURG: 717 /* For signals which are have a default action of Ignore, 718 only set a handler if the client has set a signal handler. 719 Otherwise the kernel will interrupt a syscall which 720 wouldn't have otherwise been interrupted. */ 721 if (scss.scss_per_sig[sig].scss_handler == VKI_SIG_DFL) 722 skss_handler = VKI_SIG_DFL; 723 else if (scss.scss_per_sig[sig].scss_handler == VKI_SIG_IGN) 724 skss_handler = VKI_SIG_IGN; 725 else 726 skss_handler = async_signalhandler; 727 break; 728 729 default: 730 // VKI_SIGVG* are runtime variables, so we can't make them 731 // cases in the switch, so we handle them in the 'default' case. 732 if (sig == VG_SIGVGKILL) 733 skss_handler = sigvgkill_handler; 734 else { 735 if (scss_handler == VKI_SIG_IGN) 736 skss_handler = VKI_SIG_IGN; 737 else 738 skss_handler = async_signalhandler; 739 } 740 break; 741 } 742 743 /* Flags */ 744 745 skss_flags = 0; 746 747 /* SA_NOCLDSTOP, SA_NOCLDWAIT: pass to kernel */ 748 skss_flags |= scss_flags & (VKI_SA_NOCLDSTOP | VKI_SA_NOCLDWAIT); 749 750 /* SA_ONESHOT: ignore client setting */ 751 752 /* SA_RESTART: ignore client setting and always set it for us. 753 Though we never rely on the kernel to restart a 754 syscall, we observe whether it wanted to restart the syscall 755 or not, which is needed by 756 VG_(fixup_guest_state_after_syscall_interrupted) */ 757 skss_flags |= VKI_SA_RESTART; 758 759 /* SA_NOMASK: ignore it */ 760 761 /* SA_ONSTACK: client setting is irrelevant here */ 762 /* We don't set a signal stack, so ignore */ 763 764 /* always ask for SA_SIGINFO */ 765 skss_flags |= VKI_SA_SIGINFO; 766 767 /* use our own restorer */ 768 skss_flags |= VKI_SA_RESTORER; 769 770 /* Create SKSS entry for this signal. */ 771 if (sig != VKI_SIGKILL && sig != VKI_SIGSTOP) 772 dst->skss_per_sig[sig].skss_handler = skss_handler; 773 else 774 dst->skss_per_sig[sig].skss_handler = VKI_SIG_DFL; 775 776 dst->skss_per_sig[sig].skss_flags = skss_flags; 777 } 778 779 /* Sanity checks. */ 780 vg_assert(dst->skss_per_sig[VKI_SIGKILL].skss_handler == VKI_SIG_DFL); 781 vg_assert(dst->skss_per_sig[VKI_SIGSTOP].skss_handler == VKI_SIG_DFL); 782 783 if (0) 784 pp_SKSS(); 785 } 786 787 788 /* --------------------------------------------------------------------- 789 After a possible SCSS change, update SKSS and the kernel itself. 790 ------------------------------------------------------------------ */ 791 792 // We need two levels of macro-expansion here to convert __NR_rt_sigreturn 793 // to a number before converting it to a string... sigh. 794 extern void my_sigreturn(void); 795 796 #if defined(VGP_x86_linux) 797 # define _MY_SIGRETURN(name) \ 798 ".text\n" \ 799 ".globl my_sigreturn\n" \ 800 "my_sigreturn:\n" \ 801 " movl $" #name ", %eax\n" \ 802 " int $0x80\n" \ 803 ".previous\n" 804 805 #elif defined(VGP_amd64_linux) 806 # define _MY_SIGRETURN(name) \ 807 ".text\n" \ 808 ".globl my_sigreturn\n" \ 809 "my_sigreturn:\n" \ 810 " movq $" #name ", %rax\n" \ 811 " syscall\n" \ 812 ".previous\n" 813 814 #elif defined(VGP_ppc32_linux) 815 # define _MY_SIGRETURN(name) \ 816 ".text\n" \ 817 ".globl my_sigreturn\n" \ 818 "my_sigreturn:\n" \ 819 " li 0, " #name "\n" \ 820 " sc\n" \ 821 ".previous\n" 822 823 #elif defined(VGP_ppc64_linux) 824 # define _MY_SIGRETURN(name) \ 825 ".align 2\n" \ 826 ".globl my_sigreturn\n" \ 827 ".section \".opd\",\"aw\"\n" \ 828 ".align 3\n" \ 829 "my_sigreturn:\n" \ 830 ".quad .my_sigreturn,.TOC.@tocbase,0\n" \ 831 ".previous\n" \ 832 ".type .my_sigreturn,@function\n" \ 833 ".globl .my_sigreturn\n" \ 834 ".my_sigreturn:\n" \ 835 " li 0, " #name "\n" \ 836 " sc\n" 837 838 #elif defined(VGP_arm_linux) 839 # define _MY_SIGRETURN(name) \ 840 ".text\n" \ 841 ".globl my_sigreturn\n" \ 842 "my_sigreturn:\n\t" \ 843 " mov r7, #" #name "\n\t" \ 844 " svc 0x00000000\n" \ 845 ".previous\n" 846 847 #elif defined(VGP_x86_darwin) 848 # define _MY_SIGRETURN(name) \ 849 ".text\n" \ 850 ".globl my_sigreturn\n" \ 851 "my_sigreturn:\n" \ 852 "movl $" VG_STRINGIFY(__NR_DARWIN_FAKE_SIGRETURN) ",%eax\n" \ 853 "int $0x80" 854 855 #elif defined(VGP_amd64_darwin) 856 // DDD: todo 857 # define _MY_SIGRETURN(name) \ 858 ".text\n" \ 859 ".globl my_sigreturn\n" \ 860 "my_sigreturn:\n" \ 861 "ud2\n" 862 863 #elif defined(VGP_s390x_linux) 864 # define _MY_SIGRETURN(name) \ 865 ".text\n" \ 866 ".globl my_sigreturn\n" \ 867 "my_sigreturn:\n" \ 868 " svc " #name "\n" \ 869 ".previous\n" 870 871 #elif defined(VGP_mips32_linux) 872 # define _MY_SIGRETURN(name) \ 873 ".text\n" \ 874 "my_sigreturn:\n" \ 875 " li $2, " #name "\n" /* apparently $2 is v0 */ \ 876 " syscall\n" \ 877 ".previous\n" 878 879 #else 880 # error Unknown platform 881 #endif 882 883 #define MY_SIGRETURN(name) _MY_SIGRETURN(name) 884 asm( 885 MY_SIGRETURN(__NR_rt_sigreturn) 886 ); 887 888 889 static void handle_SCSS_change ( Bool force_update ) 890 { 891 Int res, sig; 892 SKSS skss_old; 893 vki_sigaction_toK_t ksa; 894 vki_sigaction_fromK_t ksa_old; 895 896 /* Remember old SKSS and calculate new one. */ 897 skss_old = skss; 898 calculate_SKSS_from_SCSS ( &skss ); 899 900 /* Compare the new SKSS entries vs the old ones, and update kernel 901 where they differ. */ 902 for (sig = 1; sig <= VG_(max_signal); sig++) { 903 904 /* Trying to do anything with SIGKILL is pointless; just ignore 905 it. */ 906 if (sig == VKI_SIGKILL || sig == VKI_SIGSTOP) 907 continue; 908 909 if (!force_update) { 910 if ((skss_old.skss_per_sig[sig].skss_handler 911 == skss.skss_per_sig[sig].skss_handler) 912 && (skss_old.skss_per_sig[sig].skss_flags 913 == skss.skss_per_sig[sig].skss_flags)) 914 /* no difference */ 915 continue; 916 } 917 918 ksa.ksa_handler = skss.skss_per_sig[sig].skss_handler; 919 ksa.sa_flags = skss.skss_per_sig[sig].skss_flags; 920 # if !defined(VGP_ppc32_linux) && \ 921 !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) && \ 922 !defined(VGP_mips32_linux) 923 ksa.sa_restorer = my_sigreturn; 924 # endif 925 /* Re above ifdef (also the assertion below), PaulM says: 926 The sa_restorer field is not used at all on ppc. Glibc 927 converts the sigaction you give it into a kernel sigaction, 928 but it doesn't put anything in the sa_restorer field. 929 */ 930 931 /* block all signals in handler */ 932 VG_(sigfillset)( &ksa.sa_mask ); 933 VG_(sigdelset)( &ksa.sa_mask, VKI_SIGKILL ); 934 VG_(sigdelset)( &ksa.sa_mask, VKI_SIGSTOP ); 935 936 if (VG_(clo_trace_signals) && VG_(clo_verbosity) > 2) 937 VG_(dmsg)("setting ksig %d to: hdlr %p, flags 0x%lx, " 938 "mask(msb..lsb) 0x%llx 0x%llx\n", 939 sig, ksa.ksa_handler, 940 (UWord)ksa.sa_flags, 941 _VKI_NSIG_WORDS > 1 ? (ULong)ksa.sa_mask.sig[1] : 0, 942 (ULong)ksa.sa_mask.sig[0]); 943 944 res = VG_(sigaction)( sig, &ksa, &ksa_old ); 945 vg_assert(res == 0); 946 947 /* Since we got the old sigaction more or less for free, might 948 as well extract the maximum sanity-check value from it. */ 949 if (!force_update) { 950 vg_assert(ksa_old.ksa_handler 951 == skss_old.skss_per_sig[sig].skss_handler); 952 vg_assert(ksa_old.sa_flags 953 == skss_old.skss_per_sig[sig].skss_flags); 954 # if !defined(VGP_ppc32_linux) && \ 955 !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) && \ 956 !defined(VGP_mips32_linux) 957 vg_assert(ksa_old.sa_restorer 958 == my_sigreturn); 959 # endif 960 VG_(sigaddset)( &ksa_old.sa_mask, VKI_SIGKILL ); 961 VG_(sigaddset)( &ksa_old.sa_mask, VKI_SIGSTOP ); 962 vg_assert(VG_(isfullsigset)( &ksa_old.sa_mask )); 963 } 964 } 965 } 966 967 968 /* --------------------------------------------------------------------- 969 Update/query SCSS in accordance with client requests. 970 ------------------------------------------------------------------ */ 971 972 /* Logic for this alt-stack stuff copied directly from do_sigaltstack 973 in kernel/signal.[ch] */ 974 975 /* True if we are on the alternate signal stack. */ 976 static Bool on_sig_stack ( ThreadId tid, Addr m_SP ) 977 { 978 ThreadState *tst = VG_(get_ThreadState)(tid); 979 980 return (m_SP - (Addr)tst->altstack.ss_sp < (Addr)tst->altstack.ss_size); 981 } 982 983 static Int sas_ss_flags ( ThreadId tid, Addr m_SP ) 984 { 985 ThreadState *tst = VG_(get_ThreadState)(tid); 986 987 return (tst->altstack.ss_size == 0 988 ? VKI_SS_DISABLE 989 : on_sig_stack(tid, m_SP) ? VKI_SS_ONSTACK : 0); 990 } 991 992 993 SysRes VG_(do_sys_sigaltstack) ( ThreadId tid, vki_stack_t* ss, vki_stack_t* oss ) 994 { 995 Addr m_SP; 996 997 vg_assert(VG_(is_valid_tid)(tid)); 998 m_SP = VG_(get_SP)(tid); 999 1000 if (VG_(clo_trace_signals)) 1001 VG_(dmsg)("sys_sigaltstack: tid %d, " 1002 "ss %p{%p,sz=%llu,flags=0x%llx}, oss %p (current SP %p)\n", 1003 tid, (void*)ss, 1004 ss ? ss->ss_sp : 0, 1005 (ULong)(ss ? ss->ss_size : 0), 1006 (ULong)(ss ? ss->ss_flags : 0), 1007 (void*)oss, (void*)m_SP); 1008 1009 if (oss != NULL) { 1010 oss->ss_sp = VG_(threads)[tid].altstack.ss_sp; 1011 oss->ss_size = VG_(threads)[tid].altstack.ss_size; 1012 oss->ss_flags = VG_(threads)[tid].altstack.ss_flags 1013 | sas_ss_flags(tid, m_SP); 1014 } 1015 1016 if (ss != NULL) { 1017 if (on_sig_stack(tid, VG_(get_SP)(tid))) { 1018 return VG_(mk_SysRes_Error)( VKI_EPERM ); 1019 } 1020 if (ss->ss_flags != VKI_SS_DISABLE 1021 && ss->ss_flags != VKI_SS_ONSTACK 1022 && ss->ss_flags != 0) { 1023 return VG_(mk_SysRes_Error)( VKI_EINVAL ); 1024 } 1025 if (ss->ss_flags == VKI_SS_DISABLE) { 1026 VG_(threads)[tid].altstack.ss_flags = VKI_SS_DISABLE; 1027 } else { 1028 if (ss->ss_size < VKI_MINSIGSTKSZ) { 1029 return VG_(mk_SysRes_Error)( VKI_ENOMEM ); 1030 } 1031 1032 VG_(threads)[tid].altstack.ss_sp = ss->ss_sp; 1033 VG_(threads)[tid].altstack.ss_size = ss->ss_size; 1034 VG_(threads)[tid].altstack.ss_flags = 0; 1035 } 1036 } 1037 return VG_(mk_SysRes_Success)( 0 ); 1038 } 1039 1040 1041 SysRes VG_(do_sys_sigaction) ( Int signo, 1042 const vki_sigaction_toK_t* new_act, 1043 vki_sigaction_fromK_t* old_act ) 1044 { 1045 if (VG_(clo_trace_signals)) 1046 VG_(dmsg)("sys_sigaction: sigNo %d, " 1047 "new %#lx, old %#lx, new flags 0x%llx\n", 1048 signo, (UWord)new_act, (UWord)old_act, 1049 (ULong)(new_act ? new_act->sa_flags : 0)); 1050 1051 /* Rule out various error conditions. The aim is to ensure that if 1052 when the call is passed to the kernel it will definitely 1053 succeed. */ 1054 1055 /* Reject out-of-range signal numbers. */ 1056 if (signo < 1 || signo > VG_(max_signal)) goto bad_signo; 1057 1058 /* don't let them use our signals */ 1059 if ( (signo > VG_SIGVGRTUSERMAX) 1060 && new_act 1061 && !(new_act->ksa_handler == VKI_SIG_DFL 1062 || new_act->ksa_handler == VKI_SIG_IGN) ) 1063 goto bad_signo_reserved; 1064 1065 /* Reject attempts to set a handler (or set ignore) for SIGKILL. */ 1066 if ( (signo == VKI_SIGKILL || signo == VKI_SIGSTOP) 1067 && new_act 1068 && new_act->ksa_handler != VKI_SIG_DFL) 1069 goto bad_sigkill_or_sigstop; 1070 1071 /* If the client supplied non-NULL old_act, copy the relevant SCSS 1072 entry into it. */ 1073 if (old_act) { 1074 old_act->ksa_handler = scss.scss_per_sig[signo].scss_handler; 1075 old_act->sa_flags = scss.scss_per_sig[signo].scss_flags; 1076 old_act->sa_mask = scss.scss_per_sig[signo].scss_mask; 1077 # if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) 1078 old_act->sa_restorer = scss.scss_per_sig[signo].scss_restorer; 1079 # endif 1080 } 1081 1082 /* And now copy new SCSS entry from new_act. */ 1083 if (new_act) { 1084 scss.scss_per_sig[signo].scss_handler = new_act->ksa_handler; 1085 scss.scss_per_sig[signo].scss_flags = new_act->sa_flags; 1086 scss.scss_per_sig[signo].scss_mask = new_act->sa_mask; 1087 1088 scss.scss_per_sig[signo].scss_restorer = NULL; 1089 # if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) 1090 scss.scss_per_sig[signo].scss_restorer = new_act->sa_restorer; 1091 # endif 1092 1093 scss.scss_per_sig[signo].scss_sa_tramp = NULL; 1094 # if defined(VGP_x86_darwin) || defined(VGP_amd64_darwin) 1095 scss.scss_per_sig[signo].scss_sa_tramp = new_act->sa_tramp; 1096 # endif 1097 1098 VG_(sigdelset)(&scss.scss_per_sig[signo].scss_mask, VKI_SIGKILL); 1099 VG_(sigdelset)(&scss.scss_per_sig[signo].scss_mask, VKI_SIGSTOP); 1100 } 1101 1102 /* All happy bunnies ... */ 1103 if (new_act) { 1104 handle_SCSS_change( False /* lazy update */ ); 1105 } 1106 return VG_(mk_SysRes_Success)( 0 ); 1107 1108 bad_signo: 1109 if (VG_(showing_core_errors)() && !VG_(clo_xml)) { 1110 VG_(umsg)("Warning: bad signal number %d in sigaction()\n", signo); 1111 } 1112 return VG_(mk_SysRes_Error)( VKI_EINVAL ); 1113 1114 bad_signo_reserved: 1115 if (VG_(showing_core_errors)() && !VG_(clo_xml)) { 1116 VG_(umsg)("Warning: ignored attempt to set %s handler in sigaction();\n", 1117 VG_(signame)(signo)); 1118 VG_(umsg)(" the %s signal is used internally by Valgrind\n", 1119 VG_(signame)(signo)); 1120 } 1121 return VG_(mk_SysRes_Error)( VKI_EINVAL ); 1122 1123 bad_sigkill_or_sigstop: 1124 if (VG_(showing_core_errors)() && !VG_(clo_xml)) { 1125 VG_(umsg)("Warning: ignored attempt to set %s handler in sigaction();\n", 1126 VG_(signame)(signo)); 1127 VG_(umsg)(" the %s signal is uncatchable\n", 1128 VG_(signame)(signo)); 1129 } 1130 return VG_(mk_SysRes_Error)( VKI_EINVAL ); 1131 } 1132 1133 1134 static 1135 void do_sigprocmask_bitops ( Int vki_how, 1136 vki_sigset_t* orig_set, 1137 vki_sigset_t* modifier ) 1138 { 1139 switch (vki_how) { 1140 case VKI_SIG_BLOCK: 1141 VG_(sigaddset_from_set)( orig_set, modifier ); 1142 break; 1143 case VKI_SIG_UNBLOCK: 1144 VG_(sigdelset_from_set)( orig_set, modifier ); 1145 break; 1146 case VKI_SIG_SETMASK: 1147 *orig_set = *modifier; 1148 break; 1149 default: 1150 VG_(core_panic)("do_sigprocmask_bitops"); 1151 break; 1152 } 1153 } 1154 1155 static 1156 HChar* format_sigset ( const vki_sigset_t* set ) 1157 { 1158 static HChar buf[128]; 1159 int w; 1160 1161 VG_(strcpy)(buf, ""); 1162 1163 for (w = _VKI_NSIG_WORDS - 1; w >= 0; w--) 1164 { 1165 # if _VKI_NSIG_BPW == 32 1166 VG_(sprintf)(buf + VG_(strlen)(buf), "%08llx", 1167 set ? (ULong)set->sig[w] : 0); 1168 # elif _VKI_NSIG_BPW == 64 1169 VG_(sprintf)(buf + VG_(strlen)(buf), "%16llx", 1170 set ? (ULong)set->sig[w] : 0); 1171 # else 1172 # error "Unsupported value for _VKI_NSIG_BPW" 1173 # endif 1174 } 1175 1176 return buf; 1177 } 1178 1179 /* 1180 This updates the thread's signal mask. There's no such thing as a 1181 process-wide signal mask. 1182 1183 Note that the thread signal masks are an implicit part of SCSS, 1184 which is why this routine is allowed to mess with them. 1185 */ 1186 static 1187 void do_setmask ( ThreadId tid, 1188 Int how, 1189 vki_sigset_t* newset, 1190 vki_sigset_t* oldset ) 1191 { 1192 if (VG_(clo_trace_signals)) 1193 VG_(dmsg)("do_setmask: tid = %d how = %d (%s), newset = %p (%s)\n", 1194 tid, how, 1195 how==VKI_SIG_BLOCK ? "SIG_BLOCK" : ( 1196 how==VKI_SIG_UNBLOCK ? "SIG_UNBLOCK" : ( 1197 how==VKI_SIG_SETMASK ? "SIG_SETMASK" : "???")), 1198 newset, newset ? format_sigset(newset) : "NULL" ); 1199 1200 /* Just do this thread. */ 1201 vg_assert(VG_(is_valid_tid)(tid)); 1202 if (oldset) { 1203 *oldset = VG_(threads)[tid].sig_mask; 1204 if (VG_(clo_trace_signals)) 1205 VG_(dmsg)("\toldset=%p %s\n", oldset, format_sigset(oldset)); 1206 } 1207 if (newset) { 1208 do_sigprocmask_bitops (how, &VG_(threads)[tid].sig_mask, newset ); 1209 VG_(sigdelset)(&VG_(threads)[tid].sig_mask, VKI_SIGKILL); 1210 VG_(sigdelset)(&VG_(threads)[tid].sig_mask, VKI_SIGSTOP); 1211 VG_(threads)[tid].tmp_sig_mask = VG_(threads)[tid].sig_mask; 1212 } 1213 } 1214 1215 1216 SysRes VG_(do_sys_sigprocmask) ( ThreadId tid, 1217 Int how, 1218 vki_sigset_t* set, 1219 vki_sigset_t* oldset ) 1220 { 1221 switch(how) { 1222 case VKI_SIG_BLOCK: 1223 case VKI_SIG_UNBLOCK: 1224 case VKI_SIG_SETMASK: 1225 vg_assert(VG_(is_valid_tid)(tid)); 1226 do_setmask ( tid, how, set, oldset ); 1227 return VG_(mk_SysRes_Success)( 0 ); 1228 1229 default: 1230 VG_(dmsg)("sigprocmask: unknown 'how' field %d\n", how); 1231 return VG_(mk_SysRes_Error)( VKI_EINVAL ); 1232 } 1233 } 1234 1235 1236 /* --------------------------------------------------------------------- 1237 LOW LEVEL STUFF TO DO WITH SIGNALS: IMPLEMENTATION 1238 ------------------------------------------------------------------ */ 1239 1240 /* --------------------------------------------------------------------- 1241 Handy utilities to block/restore all host signals. 1242 ------------------------------------------------------------------ */ 1243 1244 /* Block all host signals, dumping the old mask in *saved_mask. */ 1245 static void block_all_host_signals ( /* OUT */ vki_sigset_t* saved_mask ) 1246 { 1247 Int ret; 1248 vki_sigset_t block_procmask; 1249 VG_(sigfillset)(&block_procmask); 1250 ret = VG_(sigprocmask) 1251 (VKI_SIG_SETMASK, &block_procmask, saved_mask); 1252 vg_assert(ret == 0); 1253 } 1254 1255 /* Restore the blocking mask using the supplied saved one. */ 1256 static void restore_all_host_signals ( /* IN */ vki_sigset_t* saved_mask ) 1257 { 1258 Int ret; 1259 ret = VG_(sigprocmask)(VKI_SIG_SETMASK, saved_mask, NULL); 1260 vg_assert(ret == 0); 1261 } 1262 1263 void VG_(clear_out_queued_signals)( ThreadId tid, vki_sigset_t* saved_mask ) 1264 { 1265 block_all_host_signals(saved_mask); 1266 if (VG_(threads)[tid].sig_queue != NULL) { 1267 VG_(arena_free)(VG_AR_CORE, VG_(threads)[tid].sig_queue); 1268 VG_(threads)[tid].sig_queue = NULL; 1269 } 1270 restore_all_host_signals(saved_mask); 1271 } 1272 1273 /* --------------------------------------------------------------------- 1274 The signal simulation proper. A simplified version of what the 1275 Linux kernel does. 1276 ------------------------------------------------------------------ */ 1277 1278 /* Set up a stack frame (VgSigContext) for the client's signal 1279 handler. */ 1280 static 1281 void push_signal_frame ( ThreadId tid, const vki_siginfo_t *siginfo, 1282 const struct vki_ucontext *uc ) 1283 { 1284 Addr esp_top_of_frame; 1285 ThreadState* tst; 1286 Int sigNo = siginfo->si_signo; 1287 1288 vg_assert(sigNo >= 1 && sigNo <= VG_(max_signal)); 1289 vg_assert(VG_(is_valid_tid)(tid)); 1290 tst = & VG_(threads)[tid]; 1291 1292 if (VG_(clo_trace_signals)) { 1293 VG_(dmsg)("push_signal_frame (thread %d): signal %d\n", tid, sigNo); 1294 VG_(get_and_pp_StackTrace)(tid, 10); 1295 } 1296 1297 if (/* this signal asked to run on an alt stack */ 1298 (scss.scss_per_sig[sigNo].scss_flags & VKI_SA_ONSTACK ) 1299 && /* there is a defined and enabled alt stack, which we're not 1300 already using. Logic from get_sigframe in 1301 arch/i386/kernel/signal.c. */ 1302 sas_ss_flags(tid, VG_(get_SP)(tid)) == 0 1303 ) { 1304 esp_top_of_frame 1305 = (Addr)(tst->altstack.ss_sp) + tst->altstack.ss_size; 1306 if (VG_(clo_trace_signals)) 1307 VG_(dmsg)("delivering signal %d (%s) to thread %d: " 1308 "on ALT STACK (%p-%p; %ld bytes)\n", 1309 sigNo, VG_(signame)(sigNo), tid, tst->altstack.ss_sp, 1310 (UChar *)tst->altstack.ss_sp + tst->altstack.ss_size, 1311 (Word)tst->altstack.ss_size ); 1312 1313 /* Signal delivery to tools */ 1314 VG_TRACK( pre_deliver_signal, tid, sigNo, /*alt_stack*/True ); 1315 1316 } else { 1317 esp_top_of_frame = VG_(get_SP)(tid) - VG_STACK_REDZONE_SZB; 1318 1319 /* Signal delivery to tools */ 1320 VG_TRACK( pre_deliver_signal, tid, sigNo, /*alt_stack*/False ); 1321 } 1322 1323 vg_assert(scss.scss_per_sig[sigNo].scss_handler != VKI_SIG_IGN); 1324 vg_assert(scss.scss_per_sig[sigNo].scss_handler != VKI_SIG_DFL); 1325 1326 /* This may fail if the client stack is busted; if that happens, 1327 the whole process will exit rather than simply calling the 1328 signal handler. */ 1329 VG_(sigframe_create) (tid, esp_top_of_frame, siginfo, uc, 1330 scss.scss_per_sig[sigNo].scss_handler, 1331 scss.scss_per_sig[sigNo].scss_flags, 1332 &tst->sig_mask, 1333 scss.scss_per_sig[sigNo].scss_restorer); 1334 } 1335 1336 1337 const Char *VG_(signame)(Int sigNo) 1338 { 1339 static Char buf[20]; 1340 1341 switch(sigNo) { 1342 case VKI_SIGHUP: return "SIGHUP"; 1343 case VKI_SIGINT: return "SIGINT"; 1344 case VKI_SIGQUIT: return "SIGQUIT"; 1345 case VKI_SIGILL: return "SIGILL"; 1346 case VKI_SIGTRAP: return "SIGTRAP"; 1347 case VKI_SIGABRT: return "SIGABRT"; 1348 case VKI_SIGBUS: return "SIGBUS"; 1349 case VKI_SIGFPE: return "SIGFPE"; 1350 case VKI_SIGKILL: return "SIGKILL"; 1351 case VKI_SIGUSR1: return "SIGUSR1"; 1352 case VKI_SIGUSR2: return "SIGUSR2"; 1353 case VKI_SIGSEGV: return "SIGSEGV"; 1354 case VKI_SIGPIPE: return "SIGPIPE"; 1355 case VKI_SIGALRM: return "SIGALRM"; 1356 case VKI_SIGTERM: return "SIGTERM"; 1357 # if defined(VKI_SIGSTKFLT) 1358 case VKI_SIGSTKFLT: return "SIGSTKFLT"; 1359 # endif 1360 case VKI_SIGCHLD: return "SIGCHLD"; 1361 case VKI_SIGCONT: return "SIGCONT"; 1362 case VKI_SIGSTOP: return "SIGSTOP"; 1363 case VKI_SIGTSTP: return "SIGTSTP"; 1364 case VKI_SIGTTIN: return "SIGTTIN"; 1365 case VKI_SIGTTOU: return "SIGTTOU"; 1366 case VKI_SIGURG: return "SIGURG"; 1367 case VKI_SIGXCPU: return "SIGXCPU"; 1368 case VKI_SIGXFSZ: return "SIGXFSZ"; 1369 case VKI_SIGVTALRM: return "SIGVTALRM"; 1370 case VKI_SIGPROF: return "SIGPROF"; 1371 case VKI_SIGWINCH: return "SIGWINCH"; 1372 case VKI_SIGIO: return "SIGIO"; 1373 # if defined(VKI_SIGPWR) 1374 case VKI_SIGPWR: return "SIGPWR"; 1375 # endif 1376 # if defined(VKI_SIGUNUSED) 1377 case VKI_SIGUNUSED: return "SIGUNUSED"; 1378 # endif 1379 1380 # if defined(VKI_SIGRTMIN) && defined(VKI_SIGRTMAX) 1381 case VKI_SIGRTMIN ... VKI_SIGRTMAX: 1382 VG_(sprintf)(buf, "SIGRT%d", sigNo-VKI_SIGRTMIN); 1383 return buf; 1384 # endif 1385 1386 default: 1387 VG_(sprintf)(buf, "SIG%d", sigNo); 1388 return buf; 1389 } 1390 } 1391 1392 /* Hit ourselves with a signal using the default handler */ 1393 void VG_(kill_self)(Int sigNo) 1394 { 1395 Int r; 1396 vki_sigset_t mask, origmask; 1397 vki_sigaction_toK_t sa, origsa2; 1398 vki_sigaction_fromK_t origsa; 1399 1400 sa.ksa_handler = VKI_SIG_DFL; 1401 sa.sa_flags = 0; 1402 # if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) 1403 sa.sa_restorer = 0; 1404 # endif 1405 VG_(sigemptyset)(&sa.sa_mask); 1406 1407 VG_(sigaction)(sigNo, &sa, &origsa); 1408 1409 VG_(sigemptyset)(&mask); 1410 VG_(sigaddset)(&mask, sigNo); 1411 VG_(sigprocmask)(VKI_SIG_UNBLOCK, &mask, &origmask); 1412 1413 r = VG_(kill)(VG_(getpid)(), sigNo); 1414 # if defined(VGO_linux) 1415 /* This sometimes fails with EPERM on Darwin. I don't know why. */ 1416 vg_assert(r == 0); 1417 # endif 1418 1419 VG_(convert_sigaction_fromK_to_toK)( &origsa, &origsa2 ); 1420 VG_(sigaction)(sigNo, &origsa2, NULL); 1421 VG_(sigprocmask)(VKI_SIG_SETMASK, &origmask, NULL); 1422 } 1423 1424 // The si_code describes where the signal came from. Some come from the 1425 // kernel, eg.: seg faults, illegal opcodes. Some come from the user, eg.: 1426 // from kill() (SI_USER), or timer_settime() (SI_TIMER), or an async I/O 1427 // request (SI_ASYNCIO). There's lots of implementation-defined leeway in 1428 // POSIX, but the user vs. kernal distinction is what we want here. We also 1429 // pass in some other details that can help when si_code is unreliable. 1430 static Bool is_signal_from_kernel(ThreadId tid, int signum, int si_code) 1431 { 1432 # if defined(VGO_linux) 1433 // On Linux, SI_USER is zero, negative values are from the user, positive 1434 // values are from the kernel. There are SI_FROMUSER and SI_FROMKERNEL 1435 // macros but we don't use them here because other platforms don't have 1436 // them. 1437 return ( si_code > VKI_SI_USER ? True : False ); 1438 1439 # elif defined(VGO_darwin) 1440 // On Darwin 9.6.0, the si_code is completely unreliable. It should be the 1441 // case that 0 means "user", and >0 means "kernel". But: 1442 // - For SIGSEGV, it seems quite reliable. 1443 // - For SIGBUS, it's always 2. 1444 // - For SIGFPE, it's often 0, even for kernel ones (eg. 1445 // div-by-integer-zero always gives zero). 1446 // - For SIGILL, it's unclear. 1447 // - For SIGTRAP, it's always 1. 1448 // You can see the "NOTIMP" (not implemented) status of a number of the 1449 // sub-cases in sys/signal.h. Hopefully future versions of Darwin will 1450 // get this right. 1451 1452 // If we're blocked waiting on a syscall, it must be a user signal, because 1453 // the kernel won't generate sync signals within syscalls. 1454 if (VG_(threads)[tid].status == VgTs_WaitSys) { 1455 return False; 1456 1457 // If it's a SIGSEGV, use the proper condition, since it's fairly reliable. 1458 } else if (SIGSEGV == signum) { 1459 return ( si_code > 0 ? True : False ); 1460 1461 // If it's anything else, assume it's kernel-generated. Reason being that 1462 // kernel-generated sync signals are more common, and it's probable that 1463 // misdiagnosing a user signal as a kernel signal is better than the 1464 // opposite. 1465 } else { 1466 return True; 1467 } 1468 # else 1469 # error Unknown OS 1470 # endif 1471 } 1472 1473 // This is an arbitrary si_code that we only use internally. It corresponds 1474 // to the value SI_KERNEL on Linux, but that's not really of any significance 1475 // as far as I can determine. 1476 #define VKI_SEGV_MADE_UP_GPF 0x80 1477 1478 /* 1479 Perform the default action of a signal. If the signal is fatal, it 1480 marks all threads as needing to exit, but it doesn't actually kill 1481 the process or thread. 1482 1483 If we're not being quiet, then print out some more detail about 1484 fatal signals (esp. core dumping signals). 1485 */ 1486 static void default_action(const vki_siginfo_t *info, ThreadId tid) 1487 { 1488 Int sigNo = info->si_signo; 1489 Bool terminate = False; /* kills process */ 1490 Bool core = False; /* kills process w/ core */ 1491 struct vki_rlimit corelim; 1492 Bool could_core; 1493 1494 vg_assert(VG_(is_running_thread)(tid)); 1495 1496 switch(sigNo) { 1497 case VKI_SIGQUIT: /* core */ 1498 case VKI_SIGILL: /* core */ 1499 case VKI_SIGABRT: /* core */ 1500 case VKI_SIGFPE: /* core */ 1501 case VKI_SIGSEGV: /* core */ 1502 case VKI_SIGBUS: /* core */ 1503 case VKI_SIGTRAP: /* core */ 1504 case VKI_SIGXCPU: /* core */ 1505 case VKI_SIGXFSZ: /* core */ 1506 terminate = True; 1507 core = True; 1508 break; 1509 1510 case VKI_SIGHUP: /* term */ 1511 case VKI_SIGINT: /* term */ 1512 case VKI_SIGKILL: /* term - we won't see this */ 1513 case VKI_SIGPIPE: /* term */ 1514 case VKI_SIGALRM: /* term */ 1515 case VKI_SIGTERM: /* term */ 1516 case VKI_SIGUSR1: /* term */ 1517 case VKI_SIGUSR2: /* term */ 1518 case VKI_SIGIO: /* term */ 1519 # if defined(VKI_SIGPWR) 1520 case VKI_SIGPWR: /* term */ 1521 # endif 1522 case VKI_SIGSYS: /* term */ 1523 case VKI_SIGPROF: /* term */ 1524 case VKI_SIGVTALRM: /* term */ 1525 # if defined(VKI_SIGRTMIN) && defined(VKI_SIGRTMAX) 1526 case VKI_SIGRTMIN ... VKI_SIGRTMAX: /* term */ 1527 # endif 1528 terminate = True; 1529 break; 1530 } 1531 1532 vg_assert(!core || (core && terminate)); 1533 1534 if (VG_(clo_trace_signals)) 1535 VG_(dmsg)("delivering %d (code %d) to default handler; action: %s%s\n", 1536 sigNo, info->si_code, terminate ? "terminate" : "ignore", 1537 core ? "+core" : ""); 1538 1539 if (!terminate) 1540 return; /* nothing to do */ 1541 1542 could_core = core; 1543 1544 if (core) { 1545 /* If they set the core-size limit to zero, don't generate a 1546 core file */ 1547 1548 VG_(getrlimit)(VKI_RLIMIT_CORE, &corelim); 1549 1550 if (corelim.rlim_cur == 0) 1551 core = False; 1552 } 1553 1554 if ( (VG_(clo_verbosity) > 1 || 1555 (could_core && is_signal_from_kernel(tid, sigNo, info->si_code)) 1556 ) && 1557 !VG_(clo_xml) ) { 1558 VG_(umsg)( 1559 "\n" 1560 "Process terminating with default action of signal %d (%s)%s\n", 1561 sigNo, VG_(signame)(sigNo), core ? ": dumping core" : ""); 1562 1563 /* Be helpful - decode some more details about this fault */ 1564 if (is_signal_from_kernel(tid, sigNo, info->si_code)) { 1565 const Char *event = NULL; 1566 Bool haveaddr = True; 1567 1568 switch(sigNo) { 1569 case VKI_SIGSEGV: 1570 switch(info->si_code) { 1571 case VKI_SEGV_MAPERR: event = "Access not within mapped region"; 1572 break; 1573 case VKI_SEGV_ACCERR: event = "Bad permissions for mapped region"; 1574 break; 1575 case VKI_SEGV_MADE_UP_GPF: 1576 /* General Protection Fault: The CPU/kernel 1577 isn't telling us anything useful, but this 1578 is commonly the result of exceeding a 1579 segment limit. */ 1580 event = "General Protection Fault"; 1581 haveaddr = False; 1582 break; 1583 } 1584 #if 0 1585 { 1586 HChar buf[110]; 1587 VG_(am_show_nsegments)(0,"post segfault"); 1588 VG_(sprintf)(buf, "/bin/cat /proc/%d/maps", VG_(getpid)()); 1589 VG_(system)(buf); 1590 } 1591 #endif 1592 break; 1593 1594 case VKI_SIGILL: 1595 switch(info->si_code) { 1596 case VKI_ILL_ILLOPC: event = "Illegal opcode"; break; 1597 case VKI_ILL_ILLOPN: event = "Illegal operand"; break; 1598 case VKI_ILL_ILLADR: event = "Illegal addressing mode"; break; 1599 case VKI_ILL_ILLTRP: event = "Illegal trap"; break; 1600 case VKI_ILL_PRVOPC: event = "Privileged opcode"; break; 1601 case VKI_ILL_PRVREG: event = "Privileged register"; break; 1602 case VKI_ILL_COPROC: event = "Coprocessor error"; break; 1603 case VKI_ILL_BADSTK: event = "Internal stack error"; break; 1604 } 1605 break; 1606 1607 case VKI_SIGFPE: 1608 switch (info->si_code) { 1609 case VKI_FPE_INTDIV: event = "Integer divide by zero"; break; 1610 case VKI_FPE_INTOVF: event = "Integer overflow"; break; 1611 case VKI_FPE_FLTDIV: event = "FP divide by zero"; break; 1612 case VKI_FPE_FLTOVF: event = "FP overflow"; break; 1613 case VKI_FPE_FLTUND: event = "FP underflow"; break; 1614 case VKI_FPE_FLTRES: event = "FP inexact"; break; 1615 case VKI_FPE_FLTINV: event = "FP invalid operation"; break; 1616 case VKI_FPE_FLTSUB: event = "FP subscript out of range"; break; 1617 } 1618 break; 1619 1620 case VKI_SIGBUS: 1621 switch (info->si_code) { 1622 case VKI_BUS_ADRALN: event = "Invalid address alignment"; break; 1623 case VKI_BUS_ADRERR: event = "Non-existent physical address"; break; 1624 case VKI_BUS_OBJERR: event = "Hardware error"; break; 1625 } 1626 break; 1627 } /* switch (sigNo) */ 1628 1629 if (event != NULL) { 1630 if (haveaddr) 1631 VG_(umsg)(" %s at address %p\n", 1632 event, info->VKI_SIGINFO_si_addr); 1633 else 1634 VG_(umsg)(" %s\n", event); 1635 } 1636 } 1637 /* Print a stack trace. Be cautious if the thread's SP is in an 1638 obviously stupid place (not mapped readable) that would 1639 likely cause a segfault. */ 1640 if (VG_(is_valid_tid)(tid)) { 1641 Word first_ip_delta = 0; 1642 #if defined(VGO_linux) 1643 /* Make sure that the address stored in the stack pointer is 1644 located in a mapped page. That is not necessarily so. E.g. 1645 consider the scenario where the stack pointer was decreased 1646 and now has a value that is just below the end of a page that has 1647 not been mapped yet. In that case VG_(am_is_valid_for_client) 1648 will consider the address of the stack pointer invalid and that 1649 would cause a back-trace of depth 1 to be printed, instead of a 1650 full back-trace. */ 1651 if (tid == 1) { // main thread 1652 Addr esp = VG_(get_SP)(tid); 1653 Addr base = VG_PGROUNDDN(esp - VG_STACK_REDZONE_SZB); 1654 if (VG_(extend_stack)(base, VG_(threads)[tid].client_stack_szB)) { 1655 if (VG_(clo_trace_signals)) 1656 VG_(dmsg)(" -> extended stack base to %#lx\n", 1657 VG_PGROUNDDN(esp)); 1658 } 1659 } 1660 #endif 1661 #if defined(VGA_s390x) 1662 if (sigNo == VKI_SIGILL) { 1663 /* The guest instruction address has been adjusted earlier to 1664 point to the insn following the one that could not be decoded. 1665 When printing the back-trace here we need to undo that 1666 adjustment so the first line in the back-trace reports the 1667 correct address. */ 1668 Addr addr = (Addr)info->VKI_SIGINFO_si_addr; 1669 UChar byte = ((UChar *)addr)[0]; 1670 Int insn_length = ((((byte >> 6) + 1) >> 1) + 1) << 1; 1671 1672 first_ip_delta = -insn_length; 1673 } 1674 #endif 1675 ExeContext* ec = VG_(am_is_valid_for_client) 1676 (VG_(get_SP)(tid), sizeof(Addr), VKI_PROT_READ) 1677 ? VG_(record_ExeContext)( tid, first_ip_delta ) 1678 : VG_(record_depth_1_ExeContext)( tid, 1679 first_ip_delta ); 1680 vg_assert(ec); 1681 VG_(pp_ExeContext)( ec ); 1682 } 1683 if (sigNo == VKI_SIGSEGV 1684 && info && is_signal_from_kernel(tid, sigNo, info->si_code) 1685 && info->si_code == VKI_SEGV_MAPERR) { 1686 VG_(umsg)(" If you believe this happened as a result of a stack\n" ); 1687 VG_(umsg)(" overflow in your program's main thread (unlikely but\n"); 1688 VG_(umsg)(" possible), you can try to increase the size of the\n" ); 1689 VG_(umsg)(" main thread stack using the --main-stacksize= flag.\n" ); 1690 // FIXME: assumes main ThreadId == 1 1691 if (VG_(is_valid_tid)(1)) { 1692 VG_(umsg)( 1693 " The main thread stack size used in this run was %d.\n", 1694 (Int)VG_(threads)[1].client_stack_szB); 1695 } 1696 } 1697 } 1698 1699 if (VG_(is_action_requested)( "Attach to debugger", & VG_(clo_db_attach) )) { 1700 VG_(start_debugger)( tid ); 1701 } 1702 1703 if (core) { 1704 const static struct vki_rlimit zero = { 0, 0 }; 1705 1706 VG_(make_coredump)(tid, info, corelim.rlim_cur); 1707 1708 /* Make sure we don't get a confusing kernel-generated 1709 coredump when we finally exit */ 1710 VG_(setrlimit)(VKI_RLIMIT_CORE, &zero); 1711 } 1712 1713 /* stash fatal signal in main thread */ 1714 // what's this for? 1715 //VG_(threads)[VG_(master_tid)].os_state.fatalsig = sigNo; 1716 1717 /* everyone dies */ 1718 VG_(nuke_all_threads_except)(tid, VgSrc_FatalSig); 1719 VG_(threads)[tid].exitreason = VgSrc_FatalSig; 1720 VG_(threads)[tid].os_state.fatalsig = sigNo; 1721 } 1722 1723 /* 1724 This does the business of delivering a signal to a thread. It may 1725 be called from either a real signal handler, or from normal code to 1726 cause the thread to enter the signal handler. 1727 1728 This updates the thread state, but it does not set it to be 1729 Runnable. 1730 */ 1731 static void deliver_signal ( ThreadId tid, const vki_siginfo_t *info, 1732 const struct vki_ucontext *uc ) 1733 { 1734 Int sigNo = info->si_signo; 1735 SCSS_Per_Signal *handler = &scss.scss_per_sig[sigNo]; 1736 void *handler_fn; 1737 ThreadState *tst = VG_(get_ThreadState)(tid); 1738 1739 if (VG_(clo_trace_signals)) 1740 VG_(dmsg)("delivering signal %d (%s):%d to thread %d\n", 1741 sigNo, VG_(signame)(sigNo), info->si_code, tid ); 1742 1743 if (sigNo == VG_SIGVGKILL) { 1744 /* If this is a SIGVGKILL, we're expecting it to interrupt any 1745 blocked syscall. It doesn't matter whether the VCPU state is 1746 set to restart or not, because we don't expect it will 1747 execute any more client instructions. */ 1748 vg_assert(VG_(is_exiting)(tid)); 1749 return; 1750 } 1751 1752 /* If the client specifies SIG_IGN, treat it as SIG_DFL. 1753 1754 If deliver_signal() is being called on a thread, we want 1755 the signal to get through no matter what; if they're ignoring 1756 it, then we do this override (this is so we can send it SIGSEGV, 1757 etc). */ 1758 handler_fn = handler->scss_handler; 1759 if (handler_fn == VKI_SIG_IGN) 1760 handler_fn = VKI_SIG_DFL; 1761 1762 vg_assert(handler_fn != VKI_SIG_IGN); 1763 1764 if (handler_fn == VKI_SIG_DFL) { 1765 default_action(info, tid); 1766 } else { 1767 /* Create a signal delivery frame, and set the client's %ESP and 1768 %EIP so that when execution continues, we will enter the 1769 signal handler with the frame on top of the client's stack, 1770 as it expects. 1771 1772 Signal delivery can fail if the client stack is too small or 1773 missing, and we can't push the frame. If that happens, 1774 push_signal_frame will cause the whole process to exit when 1775 we next hit the scheduler. 1776 */ 1777 vg_assert(VG_(is_valid_tid)(tid)); 1778 1779 push_signal_frame ( tid, info, uc ); 1780 1781 if (handler->scss_flags & VKI_SA_ONESHOT) { 1782 /* Do the ONESHOT thing. */ 1783 handler->scss_handler = VKI_SIG_DFL; 1784 1785 handle_SCSS_change( False /* lazy update */ ); 1786 } 1787 1788 /* At this point: 1789 tst->sig_mask is the current signal mask 1790 tst->tmp_sig_mask is the same as sig_mask, unless we're in sigsuspend 1791 handler->scss_mask is the mask set by the handler 1792 1793 Handler gets a mask of tmp_sig_mask|handler_mask|signo 1794 */ 1795 tst->sig_mask = tst->tmp_sig_mask; 1796 if (!(handler->scss_flags & VKI_SA_NOMASK)) { 1797 VG_(sigaddset_from_set)(&tst->sig_mask, &handler->scss_mask); 1798 VG_(sigaddset)(&tst->sig_mask, sigNo); 1799 tst->tmp_sig_mask = tst->sig_mask; 1800 } 1801 } 1802 1803 /* Thread state is ready to go - just add Runnable */ 1804 } 1805 1806 static void resume_scheduler(ThreadId tid) 1807 { 1808 ThreadState *tst = VG_(get_ThreadState)(tid); 1809 1810 vg_assert(tst->os_state.lwpid == VG_(gettid)()); 1811 1812 if (tst->sched_jmpbuf_valid) { 1813 /* Can't continue; must longjmp back to the scheduler and thus 1814 enter the sighandler immediately. */ 1815 VG_MINIMAL_LONGJMP(tst->sched_jmpbuf); 1816 } 1817 } 1818 1819 static void synth_fault_common(ThreadId tid, Addr addr, Int si_code) 1820 { 1821 vki_siginfo_t info; 1822 1823 vg_assert(VG_(threads)[tid].status == VgTs_Runnable); 1824 1825 VG_(memset)(&info, 0, sizeof(info)); 1826 info.si_signo = VKI_SIGSEGV; 1827 info.si_code = si_code; 1828 info.VKI_SIGINFO_si_addr = (void*)addr; 1829 1830 /* even if gdbserver indicates to ignore the signal, we will deliver it */ 1831 VG_(gdbserver_report_signal) (VKI_SIGSEGV, tid); 1832 1833 /* If they're trying to block the signal, force it to be delivered */ 1834 if (VG_(sigismember)(&VG_(threads)[tid].sig_mask, VKI_SIGSEGV)) 1835 VG_(set_default_handler)(VKI_SIGSEGV); 1836 1837 deliver_signal(tid, &info, NULL); 1838 } 1839 1840 // Synthesize a fault where the address is OK, but the page 1841 // permissions are bad. 1842 void VG_(synth_fault_perms)(ThreadId tid, Addr addr) 1843 { 1844 synth_fault_common(tid, addr, VKI_SEGV_ACCERR); 1845 } 1846 1847 // Synthesize a fault where the address there's nothing mapped at the address. 1848 void VG_(synth_fault_mapping)(ThreadId tid, Addr addr) 1849 { 1850 synth_fault_common(tid, addr, VKI_SEGV_MAPERR); 1851 } 1852 1853 // Synthesize a misc memory fault. 1854 void VG_(synth_fault)(ThreadId tid) 1855 { 1856 synth_fault_common(tid, 0, VKI_SEGV_MADE_UP_GPF); 1857 } 1858 1859 // Synthesise a SIGILL. 1860 void VG_(synth_sigill)(ThreadId tid, Addr addr) 1861 { 1862 vki_siginfo_t info; 1863 1864 vg_assert(VG_(threads)[tid].status == VgTs_Runnable); 1865 1866 VG_(memset)(&info, 0, sizeof(info)); 1867 info.si_signo = VKI_SIGILL; 1868 info.si_code = VKI_ILL_ILLOPC; /* jrs: no idea what this should be */ 1869 info.VKI_SIGINFO_si_addr = (void*)addr; 1870 1871 if (VG_(gdbserver_report_signal) (VKI_SIGILL, tid)) { 1872 resume_scheduler(tid); 1873 deliver_signal(tid, &info, NULL); 1874 } 1875 else 1876 resume_scheduler(tid); 1877 } 1878 1879 // Synthesise a SIGBUS. 1880 void VG_(synth_sigbus)(ThreadId tid) 1881 { 1882 vki_siginfo_t info; 1883 1884 vg_assert(VG_(threads)[tid].status == VgTs_Runnable); 1885 1886 VG_(memset)(&info, 0, sizeof(info)); 1887 info.si_signo = VKI_SIGBUS; 1888 /* There are several meanings to SIGBUS (as per POSIX, presumably), 1889 but the most widely understood is "invalid address alignment", 1890 so let's use that. */ 1891 info.si_code = VKI_BUS_ADRALN; 1892 /* If we knew the invalid address in question, we could put it 1893 in .si_addr. Oh well. */ 1894 /* info.VKI_SIGINFO_si_addr = (void*)addr; */ 1895 1896 if (VG_(gdbserver_report_signal) (VKI_SIGBUS, tid)) { 1897 resume_scheduler(tid); 1898 deliver_signal(tid, &info, NULL); 1899 } 1900 else 1901 resume_scheduler(tid); 1902 } 1903 1904 // Synthesise a SIGTRAP. 1905 void VG_(synth_sigtrap)(ThreadId tid) 1906 { 1907 vki_siginfo_t info; 1908 struct vki_ucontext uc; 1909 # if defined(VGP_x86_darwin) 1910 struct __darwin_mcontext32 mc; 1911 # elif defined(VGP_amd64_darwin) 1912 struct __darwin_mcontext64 mc; 1913 # endif 1914 1915 vg_assert(VG_(threads)[tid].status == VgTs_Runnable); 1916 1917 VG_(memset)(&info, 0, sizeof(info)); 1918 VG_(memset)(&uc, 0, sizeof(uc)); 1919 info.si_signo = VKI_SIGTRAP; 1920 info.si_code = VKI_TRAP_BRKPT; /* tjh: only ever called for a brkpt ins */ 1921 1922 # if defined(VGP_mips32_linux) || defined(VGP_mips64_linux) 1923 /* This is for teq on mips. Teq on mips for ins: 0xXXX1f4 1924 * cases VKI_SIGFPE not VKI_SIGTRAP 1925 */ 1926 // JRS 2012-Jun-06: commented out until we know we need it 1927 // This isn't a clean solution; need something that avoids looking 1928 // at the guest code. 1929 //UInt *ins = (void*)(vgPlain_threads[tid].arch.vex.guest_PC-4); 1930 //UInt tcode = (((*ins) >> 6) & ((1 << 10) - 1)); 1931 //if (tcode == VKI_BRK_OVERFLOW || tcode == VKI_BRK_DIVZERO) { 1932 // if (tcode == VKI_BRK_DIVZERO) 1933 // info.si_code = VKI_FPE_INTDIV; 1934 // else 1935 // info.si_code = VKI_FPE_INTOVF; 1936 // info.si_signo = VKI_SIGFPE; 1937 // info.si_errno = 0; 1938 // info.VKI_SIGINFO_si_addr 1939 // = (void*)(vgPlain_threads[tid].arch.vex.guest_PC-4); 1940 //} 1941 # endif 1942 1943 # if defined(VGP_x86_linux) || defined(VGP_amd64_linux) 1944 uc.uc_mcontext.trapno = 3; /* tjh: this is the x86 trap number 1945 for a breakpoint trap... */ 1946 uc.uc_mcontext.err = 0; /* tjh: no error code for x86 1947 breakpoint trap... */ 1948 # elif defined(VGP_x86_darwin) || defined(VGP_amd64_darwin) 1949 /* the same thing, but using Darwin field/struct names */ 1950 VG_(memset)(&mc, 0, sizeof(mc)); 1951 uc.uc_mcontext = &mc; 1952 uc.uc_mcontext->__es.__trapno = 3; 1953 uc.uc_mcontext->__es.__err = 0; 1954 # endif 1955 1956 /* fixs390: do we need to do anything here for s390 ? */ 1957 if (VG_(gdbserver_report_signal) (VKI_SIGTRAP, tid)) { 1958 resume_scheduler(tid); 1959 deliver_signal(tid, &info, &uc); 1960 } 1961 else 1962 resume_scheduler(tid); 1963 } 1964 1965 /* Make a signal pending for a thread, for later delivery. 1966 VG_(poll_signals) will arrange for it to be delivered at the right 1967 time. 1968 1969 tid==0 means add it to the process-wide queue, and not sent it to a 1970 specific thread. 1971 */ 1972 static 1973 void queue_signal(ThreadId tid, const vki_siginfo_t *si) 1974 { 1975 ThreadState *tst; 1976 SigQueue *sq; 1977 vki_sigset_t savedmask; 1978 1979 tst = VG_(get_ThreadState)(tid); 1980 1981 /* Protect the signal queue against async deliveries */ 1982 block_all_host_signals(&savedmask); 1983 1984 if (tst->sig_queue == NULL) { 1985 tst->sig_queue = VG_(arena_malloc)(VG_AR_CORE, "signals.qs.1", 1986 sizeof(*tst->sig_queue)); 1987 VG_(memset)(tst->sig_queue, 0, sizeof(*tst->sig_queue)); 1988 } 1989 sq = tst->sig_queue; 1990 1991 if (VG_(clo_trace_signals)) 1992 VG_(dmsg)("Queueing signal %d (idx %d) to thread %d\n", 1993 si->si_signo, sq->next, tid); 1994 1995 /* Add signal to the queue. If the queue gets overrun, then old 1996 queued signals may get lost. 1997 1998 XXX We should also keep a sigset of pending signals, so that at 1999 least a non-siginfo signal gets deliviered. 2000 */ 2001 if (sq->sigs[sq->next].si_signo != 0) 2002 VG_(umsg)("Signal %d being dropped from thread %d's queue\n", 2003 sq->sigs[sq->next].si_signo, tid); 2004 2005 sq->sigs[sq->next] = *si; 2006 sq->next = (sq->next+1) % N_QUEUED_SIGNALS; 2007 2008 restore_all_host_signals(&savedmask); 2009 } 2010 2011 /* 2012 Returns the next queued signal for thread tid which is in "set". 2013 tid==0 means process-wide signal. Set si_signo to 0 when the 2014 signal has been delivered. 2015 2016 Must be called with all signals blocked, to protect against async 2017 deliveries. 2018 */ 2019 static vki_siginfo_t *next_queued(ThreadId tid, const vki_sigset_t *set) 2020 { 2021 ThreadState *tst = VG_(get_ThreadState)(tid); 2022 SigQueue *sq; 2023 Int idx; 2024 vki_siginfo_t *ret = NULL; 2025 2026 sq = tst->sig_queue; 2027 if (sq == NULL) 2028 goto out; 2029 2030 idx = sq->next; 2031 do { 2032 if (0) 2033 VG_(printf)("idx=%d si_signo=%d inset=%d\n", idx, 2034 sq->sigs[idx].si_signo, 2035 VG_(sigismember)(set, sq->sigs[idx].si_signo)); 2036 2037 if (sq->sigs[idx].si_signo != 0 2038 && VG_(sigismember)(set, sq->sigs[idx].si_signo)) { 2039 if (VG_(clo_trace_signals)) 2040 VG_(dmsg)("Returning queued signal %d (idx %d) for thread %d\n", 2041 sq->sigs[idx].si_signo, idx, tid); 2042 ret = &sq->sigs[idx]; 2043 goto out; 2044 } 2045 2046 idx = (idx + 1) % N_QUEUED_SIGNALS; 2047 } while(idx != sq->next); 2048 out: 2049 return ret; 2050 } 2051 2052 static int sanitize_si_code(int si_code) 2053 { 2054 #if defined(VGO_linux) 2055 /* The linux kernel uses the top 16 bits of si_code for it's own 2056 use and only exports the bottom 16 bits to user space - at least 2057 that is the theory, but it turns out that there are some kernels 2058 around that forget to mask out the top 16 bits so we do it here. 2059 2060 The kernel treats the bottom 16 bits as signed and (when it does 2061 mask them off) sign extends them when exporting to user space so 2062 we do the same thing here. */ 2063 return (Short)si_code; 2064 #elif defined(VGO_darwin) 2065 return si_code; 2066 #else 2067 # error Unknown OS 2068 #endif 2069 } 2070 2071 /* 2072 Receive an async signal from the kernel. 2073 2074 This should only happen when the thread is blocked in a syscall, 2075 since that's the only time this set of signals is unblocked. 2076 */ 2077 static 2078 void async_signalhandler ( Int sigNo, 2079 vki_siginfo_t *info, struct vki_ucontext *uc ) 2080 { 2081 ThreadId tid = VG_(lwpid_to_vgtid)(VG_(gettid)()); 2082 ThreadState* tst = VG_(get_ThreadState)(tid); 2083 SysRes sres; 2084 2085 /* The thread isn't currently running, make it so before going on */ 2086 vg_assert(tst->status == VgTs_WaitSys); 2087 VG_(acquire_BigLock)(tid, "async_signalhandler"); 2088 2089 info->si_code = sanitize_si_code(info->si_code); 2090 2091 if (VG_(clo_trace_signals)) 2092 VG_(dmsg)("async signal handler: signal=%d, tid=%d, si_code=%d\n", 2093 sigNo, tid, info->si_code); 2094 2095 /* Update thread state properly. The signal can only have been 2096 delivered whilst we were in 2097 coregrind/m_syswrap/syscall-<PLAT>.S, and only then in the 2098 window between the two sigprocmask calls, since at all other 2099 times, we run with async signals on the host blocked. Hence 2100 make enquiries on the basis that we were in or very close to a 2101 syscall, and attempt to fix up the guest state accordingly. 2102 2103 (normal async signals occurring during computation are blocked, 2104 but periodically polled for using VG_(sigtimedwait_zero), and 2105 delivered at a point convenient for us. Hence this routine only 2106 deals with signals that are delivered to a thread during a 2107 syscall.) */ 2108 2109 /* First, extract a SysRes from the ucontext_t* given to this 2110 handler. If it is subsequently established by 2111 VG_(fixup_guest_state_after_syscall_interrupted) that the 2112 syscall was complete but the results had not been committed yet 2113 to the guest state, then it'll have to commit the results itself 2114 "by hand", and so we need to extract the SysRes. Of course if 2115 the thread was not in that particular window then the 2116 SysRes will be meaningless, but that's OK too because 2117 VG_(fixup_guest_state_after_syscall_interrupted) will detect 2118 that the thread was not in said window and ignore the SysRes. */ 2119 2120 /* To make matters more complex still, on Darwin we need to know 2121 the "class" of the syscall under consideration in order to be 2122 able to extract the a correct SysRes. The class will have been 2123 saved just before the syscall, by VG_(client_syscall), into this 2124 thread's tst->arch.vex.guest_SC_CLASS. Hence: */ 2125 # if defined(VGO_darwin) 2126 sres = VG_UCONTEXT_SYSCALL_SYSRES(uc, tst->arch.vex.guest_SC_CLASS); 2127 # else 2128 sres = VG_UCONTEXT_SYSCALL_SYSRES(uc); 2129 # endif 2130 2131 /* (1) */ 2132 VG_(fixup_guest_state_after_syscall_interrupted)( 2133 tid, 2134 VG_UCONTEXT_INSTR_PTR(uc), 2135 sres, 2136 !!(scss.scss_per_sig[sigNo].scss_flags & VKI_SA_RESTART) 2137 ); 2138 2139 /* (2) */ 2140 /* Set up the thread's state to deliver a signal */ 2141 if (!is_sig_ign(info->si_signo, tid)) 2142 deliver_signal(tid, info, uc); 2143 2144 /* It's crucial that (1) and (2) happen in the order (1) then (2) 2145 and not the other way around. (1) fixes up the guest thread 2146 state to reflect the fact that the syscall was interrupted -- 2147 either to restart the syscall or to return EINTR. (2) then sets 2148 up the thread state to deliver the signal. Then we resume 2149 execution. First, the signal handler is run, since that's the 2150 second adjustment we made to the thread state. If that returns, 2151 then we resume at the guest state created by (1), viz, either 2152 the syscall returns EINTR or is restarted. 2153 2154 If (2) was done before (1) the outcome would be completely 2155 different, and wrong. */ 2156 2157 /* longjmp back to the thread's main loop to start executing the 2158 handler. */ 2159 resume_scheduler(tid); 2160 2161 VG_(core_panic)("async_signalhandler: got unexpected signal " 2162 "while outside of scheduler"); 2163 } 2164 2165 /* Extend the stack to cover addr. maxsize is the limit the stack can grow to. 2166 2167 Returns True on success, False on failure. 2168 2169 Succeeds without doing anything if addr is already within a segment. 2170 2171 Failure could be caused by: 2172 - addr not below a growable segment 2173 - new stack size would exceed maxsize 2174 - mmap failed for some other reason 2175 */ 2176 Bool VG_(extend_stack)(Addr addr, UInt maxsize) 2177 { 2178 SizeT udelta; 2179 2180 /* Find the next Segment above addr */ 2181 NSegment const* seg 2182 = VG_(am_find_nsegment)(addr); 2183 NSegment const* seg_next 2184 = seg ? VG_(am_next_nsegment)( (NSegment*)seg, True/*fwds*/ ) 2185 : NULL; 2186 2187 if (seg && seg->kind == SkAnonC) 2188 /* addr is already mapped. Nothing to do. */ 2189 return True; 2190 2191 /* Check that the requested new base is in a shrink-down 2192 reservation section which abuts an anonymous mapping that 2193 belongs to the client. */ 2194 if ( ! (seg 2195 && seg->kind == SkResvn 2196 && seg->smode == SmUpper 2197 && seg_next 2198 && seg_next->kind == SkAnonC 2199 && seg->end+1 == seg_next->start)) 2200 return False; 2201 2202 udelta = VG_PGROUNDUP(seg_next->start - addr); 2203 VG_(debugLog)(1, "signals", 2204 "extending a stack base 0x%llx down by %lld\n", 2205 (ULong)seg_next->start, (ULong)udelta); 2206 if (! VG_(am_extend_into_adjacent_reservation_client) 2207 ( (NSegment*)seg_next, -(SSizeT)udelta )) { 2208 VG_(debugLog)(1, "signals", "extending a stack base: FAILED\n"); 2209 return False; 2210 } 2211 2212 /* When we change the main stack, we have to let the stack handling 2213 code know about it. */ 2214 VG_(change_stack)(VG_(clstk_id), addr, VG_(clstk_end)); 2215 2216 if (VG_(clo_sanity_level) > 2) 2217 VG_(sanity_check_general)(False); 2218 2219 return True; 2220 } 2221 2222 static void (*fault_catcher)(Int sig, Addr addr) = NULL; 2223 2224 void VG_(set_fault_catcher)(void (*catcher)(Int, Addr)) 2225 { 2226 if (0) 2227 VG_(debugLog)(0, "signals", "set fault catcher to %p\n", catcher); 2228 vg_assert2(NULL == catcher || NULL == fault_catcher, 2229 "Fault catcher is already registered"); 2230 2231 fault_catcher = catcher; 2232 } 2233 2234 static 2235 void sync_signalhandler_from_user ( ThreadId tid, 2236 Int sigNo, vki_siginfo_t *info, struct vki_ucontext *uc ) 2237 { 2238 ThreadId qtid; 2239 2240 /* If some user-process sent us a sync signal (ie. it's not the result 2241 of a faulting instruction), then how we treat it depends on when it 2242 arrives... */ 2243 2244 if (VG_(threads)[tid].status == VgTs_WaitSys) { 2245 /* Signal arrived while we're blocked in a syscall. This means that 2246 the client's signal mask was applied. In other words, so we can't 2247 get here unless the client wants this signal right now. This means 2248 we can simply use the async_signalhandler. */ 2249 if (VG_(clo_trace_signals)) 2250 VG_(dmsg)("Delivering user-sent sync signal %d as async signal\n", 2251 sigNo); 2252 2253 async_signalhandler(sigNo, info, uc); 2254 VG_(core_panic)("async_signalhandler returned!?\n"); 2255 2256 } else { 2257 /* Signal arrived while in generated client code, or while running 2258 Valgrind core code. That means that every thread has these signals 2259 unblocked, so we can't rely on the kernel to route them properly, so 2260 we need to queue them manually. */ 2261 if (VG_(clo_trace_signals)) 2262 VG_(dmsg)("Routing user-sent sync signal %d via queue\n", sigNo); 2263 2264 # if defined(VGO_linux) 2265 /* On Linux, first we have to do a sanity check of the siginfo. */ 2266 if (info->VKI_SIGINFO_si_pid == 0) { 2267 /* There's a per-user limit of pending siginfo signals. If 2268 you exceed this, by having more than that number of 2269 pending signals with siginfo, then new signals are 2270 delivered without siginfo. This condition can be caused 2271 by any unrelated program you're running at the same time 2272 as Valgrind, if it has a large number of pending siginfo 2273 signals which it isn't taking delivery of. 2274 2275 Since we depend on siginfo to work out why we were sent a 2276 signal and what we should do about it, we really can't 2277 continue unless we get it. */ 2278 VG_(umsg)("Signal %d (%s) appears to have lost its siginfo; " 2279 "I can't go on.\n", sigNo, VG_(signame)(sigNo)); 2280 VG_(printf)( 2281 " This may be because one of your programs has consumed your ration of\n" 2282 " siginfo structures. For more information, see:\n" 2283 " http://kerneltrap.org/mailarchive/1/message/25599/thread\n" 2284 " Basically, some program on your system is building up a large queue of\n" 2285 " pending signals, and this causes the siginfo data for other signals to\n" 2286 " be dropped because it's exceeding a system limit. However, Valgrind\n" 2287 " absolutely needs siginfo for SIGSEGV. A workaround is to track down the\n" 2288 " offending program and avoid running it while using Valgrind, but there\n" 2289 " is no easy way to do this. Apparently the problem was fixed in kernel\n" 2290 " 2.6.12.\n"); 2291 2292 /* It's a fatal signal, so we force the default handler. */ 2293 VG_(set_default_handler)(sigNo); 2294 deliver_signal(tid, info, uc); 2295 resume_scheduler(tid); 2296 VG_(exit)(99); /* If we can't resume, then just exit */ 2297 } 2298 # endif 2299 2300 qtid = 0; /* shared pending by default */ 2301 # if defined(VGO_linux) 2302 if (info->si_code == VKI_SI_TKILL) 2303 qtid = tid; /* directed to us specifically */ 2304 # endif 2305 queue_signal(qtid, info); 2306 } 2307 } 2308 2309 /* Returns the reported fault address for an exact address */ 2310 static Addr fault_mask(Addr in) 2311 { 2312 /* We have to use VG_PGROUNDDN because faults on s390x only deliver 2313 the page address but not the address within a page. 2314 */ 2315 # if defined(VGA_s390x) 2316 return VG_PGROUNDDN(in); 2317 # else 2318 return in; 2319 #endif 2320 } 2321 2322 /* Returns True if the sync signal was due to the stack requiring extension 2323 and the extension was successful. 2324 */ 2325 static Bool extend_stack_if_appropriate(ThreadId tid, vki_siginfo_t* info) 2326 { 2327 Addr fault; 2328 Addr esp; 2329 NSegment const* seg; 2330 NSegment const* seg_next; 2331 2332 if (info->si_signo != VKI_SIGSEGV) 2333 return False; 2334 2335 fault = (Addr)info->VKI_SIGINFO_si_addr; 2336 esp = VG_(get_SP)(tid); 2337 seg = VG_(am_find_nsegment)(fault); 2338 seg_next = seg ? VG_(am_next_nsegment)( (NSegment*)seg, True/*fwds*/ ) 2339 : NULL; 2340 2341 if (VG_(clo_trace_signals)) { 2342 if (seg == NULL) 2343 VG_(dmsg)("SIGSEGV: si_code=%d faultaddr=%#lx tid=%d ESP=%#lx " 2344 "seg=NULL\n", 2345 info->si_code, fault, tid, esp); 2346 else 2347 VG_(dmsg)("SIGSEGV: si_code=%d faultaddr=%#lx tid=%d ESP=%#lx " 2348 "seg=%#lx-%#lx\n", 2349 info->si_code, fault, tid, esp, seg->start, seg->end); 2350 } 2351 2352 if (info->si_code == VKI_SEGV_MAPERR 2353 && seg 2354 && seg->kind == SkResvn 2355 && seg->smode == SmUpper 2356 && seg_next 2357 && seg_next->kind == SkAnonC 2358 && seg->end+1 == seg_next->start 2359 && fault >= fault_mask(esp - VG_STACK_REDZONE_SZB)) { 2360 /* If the fault address is above esp but below the current known 2361 stack segment base, and it was a fault because there was 2362 nothing mapped there (as opposed to a permissions fault), 2363 then extend the stack segment. 2364 */ 2365 Addr base = VG_PGROUNDDN(esp - VG_STACK_REDZONE_SZB); 2366 if (VG_(extend_stack)(base, VG_(threads)[tid].client_stack_szB)) { 2367 if (VG_(clo_trace_signals)) 2368 VG_(dmsg)(" -> extended stack base to %#lx\n", 2369 VG_PGROUNDDN(fault)); 2370 return True; 2371 } else { 2372 VG_(umsg)("Stack overflow in thread %d: can't grow stack to %#lx\n", 2373 tid, fault); 2374 return False; 2375 } 2376 } else { 2377 return False; 2378 } 2379 } 2380 2381 static 2382 void sync_signalhandler_from_kernel ( ThreadId tid, 2383 Int sigNo, vki_siginfo_t *info, struct vki_ucontext *uc ) 2384 { 2385 /* Check to see if some part of Valgrind itself is interested in faults. 2386 The fault catcher should never be set whilst we're in generated code, so 2387 check for that. AFAIK the only use of the catcher right now is 2388 memcheck's leak detector. */ 2389 if (fault_catcher) { 2390 vg_assert(VG_(in_generated_code) == False); 2391 2392 (*fault_catcher)(sigNo, (Addr)info->VKI_SIGINFO_si_addr); 2393 /* If the catcher returns, then it didn't handle the fault, 2394 so carry on panicking. */ 2395 } 2396 2397 if (extend_stack_if_appropriate(tid, info)) { 2398 /* Stack extension occurred, so we don't need to do anything else; upon 2399 returning from this function, we'll restart the host (hence guest) 2400 instruction. */ 2401 } else { 2402 /* OK, this is a signal we really have to deal with. If it came 2403 from the client's code, then we can jump back into the scheduler 2404 and have it delivered. Otherwise it's a Valgrind bug. */ 2405 ThreadState *tst = VG_(get_ThreadState)(tid); 2406 2407 if (VG_(sigismember)(&tst->sig_mask, sigNo)) { 2408 /* signal is blocked, but they're not allowed to block faults */ 2409 VG_(set_default_handler)(sigNo); 2410 } 2411 2412 if (VG_(in_generated_code)) { 2413 if (VG_(gdbserver_report_signal) (sigNo, tid) 2414 || VG_(sigismember)(&tst->sig_mask, sigNo)) { 2415 /* Can't continue; must longjmp back to the scheduler and thus 2416 enter the sighandler immediately. */ 2417 deliver_signal(tid, info, uc); 2418 resume_scheduler(tid); 2419 } 2420 else 2421 resume_scheduler(tid); 2422 } 2423 2424 /* If resume_scheduler returns or its our fault, it means we 2425 don't have longjmp set up, implying that we weren't running 2426 client code, and therefore it was actually generated by 2427 Valgrind internally. 2428 */ 2429 VG_(dmsg)("VALGRIND INTERNAL ERROR: Valgrind received " 2430 "a signal %d (%s) - exiting\n", 2431 sigNo, VG_(signame)(sigNo)); 2432 2433 VG_(dmsg)("si_code=%x; Faulting address: %p; sp: %#lx\n", 2434 info->si_code, info->VKI_SIGINFO_si_addr, 2435 VG_UCONTEXT_STACK_PTR(uc)); 2436 2437 if (0) 2438 VG_(kill_self)(sigNo); /* generate a core dump */ 2439 2440 //if (tid == 0) /* could happen after everyone has exited */ 2441 // tid = VG_(master_tid); 2442 vg_assert(tid != 0); 2443 2444 UnwindStartRegs startRegs; 2445 VG_(memset)(&startRegs, 0, sizeof(startRegs)); 2446 2447 VG_UCONTEXT_TO_UnwindStartRegs(&startRegs, uc); 2448 VG_(core_panic_at)("Killed by fatal signal", &startRegs); 2449 } 2450 } 2451 2452 /* 2453 Receive a sync signal from the host. 2454 */ 2455 static 2456 void sync_signalhandler ( Int sigNo, 2457 vki_siginfo_t *info, struct vki_ucontext *uc ) 2458 { 2459 ThreadId tid = VG_(lwpid_to_vgtid)(VG_(gettid)()); 2460 Bool from_user; 2461 2462 if (0) 2463 VG_(printf)("sync_sighandler(%d, %p, %p)\n", sigNo, info, uc); 2464 2465 vg_assert(info != NULL); 2466 vg_assert(info->si_signo == sigNo); 2467 vg_assert(sigNo == VKI_SIGSEGV || 2468 sigNo == VKI_SIGBUS || 2469 sigNo == VKI_SIGFPE || 2470 sigNo == VKI_SIGILL || 2471 sigNo == VKI_SIGTRAP); 2472 2473 info->si_code = sanitize_si_code(info->si_code); 2474 2475 from_user = !is_signal_from_kernel(tid, sigNo, info->si_code); 2476 2477 if (VG_(clo_trace_signals)) { 2478 VG_(dmsg)("sync signal handler: " 2479 "signal=%d, si_code=%d, EIP=%#lx, eip=%#lx, from %s\n", 2480 sigNo, info->si_code, VG_(get_IP)(tid), 2481 VG_UCONTEXT_INSTR_PTR(uc), 2482 ( from_user ? "user" : "kernel" )); 2483 } 2484 vg_assert(sigNo >= 1 && sigNo <= VG_(max_signal)); 2485 2486 /* // debug code: 2487 if (0) { 2488 VG_(printf)("info->si_signo %d\n", info->si_signo); 2489 VG_(printf)("info->si_errno %d\n", info->si_errno); 2490 VG_(printf)("info->si_code %d\n", info->si_code); 2491 VG_(printf)("info->si_pid %d\n", info->si_pid); 2492 VG_(printf)("info->si_uid %d\n", info->si_uid); 2493 VG_(printf)("info->si_status %d\n", info->si_status); 2494 VG_(printf)("info->si_addr %p\n", info->si_addr); 2495 } 2496 */ 2497 2498 /* Figure out if the signal is being sent from outside the process. 2499 (Why do we care?) If the signal is from the user rather than the 2500 kernel, then treat it more like an async signal than a sync signal -- 2501 that is, merely queue it for later delivery. */ 2502 if (from_user) { 2503 sync_signalhandler_from_user( tid, sigNo, info, uc); 2504 } else { 2505 sync_signalhandler_from_kernel(tid, sigNo, info, uc); 2506 } 2507 } 2508 2509 2510 /* 2511 Kill this thread. Makes it leave any syscall it might be currently 2512 blocked in, and return to the scheduler. This doesn't mark the thread 2513 as exiting; that's the caller's job. 2514 */ 2515 static void sigvgkill_handler(int signo, vki_siginfo_t *si, 2516 struct vki_ucontext *uc) 2517 { 2518 ThreadId tid = VG_(lwpid_to_vgtid)(VG_(gettid)()); 2519 ThreadStatus at_signal = VG_(threads)[tid].status; 2520 2521 if (VG_(clo_trace_signals)) 2522 VG_(dmsg)("sigvgkill for lwp %d tid %d\n", VG_(gettid)(), tid); 2523 2524 VG_(acquire_BigLock)(tid, "sigvgkill_handler"); 2525 2526 vg_assert(signo == VG_SIGVGKILL); 2527 vg_assert(si->si_signo == signo); 2528 2529 /* jrs 2006 August 3: the following assertion seems incorrect to 2530 me, and fails on AIX. sigvgkill could be sent to a thread which 2531 is runnable - see VG_(nuke_all_threads_except) in the scheduler. 2532 Hence comment these out .. 2533 2534 vg_assert(VG_(threads)[tid].status == VgTs_WaitSys); 2535 VG_(post_syscall)(tid); 2536 2537 and instead do: 2538 */ 2539 if (at_signal == VgTs_WaitSys) 2540 VG_(post_syscall)(tid); 2541 /* jrs 2006 August 3 ends */ 2542 2543 resume_scheduler(tid); 2544 2545 VG_(core_panic)("sigvgkill_handler couldn't return to the scheduler\n"); 2546 } 2547 2548 static __attribute((unused)) 2549 void pp_ksigaction ( vki_sigaction_toK_t* sa ) 2550 { 2551 Int i; 2552 VG_(printf)("pp_ksigaction: handler %p, flags 0x%x, restorer %p\n", 2553 sa->ksa_handler, 2554 (UInt)sa->sa_flags, 2555 # if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) 2556 sa->sa_restorer 2557 # else 2558 (void*)0 2559 # endif 2560 ); 2561 VG_(printf)("pp_ksigaction: { "); 2562 for (i = 1; i <= VG_(max_signal); i++) 2563 if (VG_(sigismember(&(sa->sa_mask),i))) 2564 VG_(printf)("%d ", i); 2565 VG_(printf)("}\n"); 2566 } 2567 2568 /* 2569 Force signal handler to default 2570 */ 2571 void VG_(set_default_handler)(Int signo) 2572 { 2573 vki_sigaction_toK_t sa; 2574 2575 sa.ksa_handler = VKI_SIG_DFL; 2576 sa.sa_flags = 0; 2577 # if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) 2578 sa.sa_restorer = 0; 2579 # endif 2580 VG_(sigemptyset)(&sa.sa_mask); 2581 2582 VG_(do_sys_sigaction)(signo, &sa, NULL); 2583 } 2584 2585 /* 2586 Poll for pending signals, and set the next one up for delivery. 2587 */ 2588 void VG_(poll_signals)(ThreadId tid) 2589 { 2590 vki_siginfo_t si, *sip; 2591 vki_sigset_t pollset; 2592 ThreadState *tst = VG_(get_ThreadState)(tid); 2593 vki_sigset_t saved_mask; 2594 2595 /* look for all the signals this thread isn't blocking */ 2596 /* pollset = ~tst->sig_mask */ 2597 VG_(sigcomplementset)( &pollset, &tst->sig_mask ); 2598 2599 block_all_host_signals(&saved_mask); // protect signal queue 2600 2601 /* First look for any queued pending signals */ 2602 sip = next_queued(tid, &pollset); /* this thread */ 2603 2604 if (sip == NULL) 2605 sip = next_queued(0, &pollset); /* process-wide */ 2606 2607 /* If there was nothing queued, ask the kernel for a pending signal */ 2608 if (sip == NULL && VG_(sigtimedwait_zero)(&pollset, &si) > 0) { 2609 if (VG_(clo_trace_signals)) 2610 VG_(dmsg)("poll_signals: got signal %d for thread %d\n", 2611 si.si_signo, tid); 2612 sip = &si; 2613 } 2614 2615 if (sip != NULL) { 2616 /* OK, something to do; deliver it */ 2617 if (VG_(clo_trace_signals)) 2618 VG_(dmsg)("Polling found signal %d for tid %d\n", sip->si_signo, tid); 2619 if (!is_sig_ign(sip->si_signo, tid)) 2620 deliver_signal(tid, sip, NULL); 2621 else if (VG_(clo_trace_signals)) 2622 VG_(dmsg)(" signal %d ignored\n", sip->si_signo); 2623 2624 sip->si_signo = 0; /* remove from signal queue, if that's 2625 where it came from */ 2626 } 2627 2628 restore_all_host_signals(&saved_mask); 2629 } 2630 2631 /* At startup, copy the process' real signal state to the SCSS. 2632 Whilst doing this, block all real signals. Then calculate SKSS and 2633 set the kernel to that. Also initialise DCSS. 2634 */ 2635 void VG_(sigstartup_actions) ( void ) 2636 { 2637 Int i, ret, vKI_SIGRTMIN; 2638 vki_sigset_t saved_procmask; 2639 vki_sigaction_fromK_t sa; 2640 2641 VG_(memset)(&scss, 0, sizeof(scss)); 2642 VG_(memset)(&skss, 0, sizeof(skss)); 2643 2644 # if defined(VKI_SIGRTMIN) 2645 vKI_SIGRTMIN = VKI_SIGRTMIN; 2646 # else 2647 vKI_SIGRTMIN = 0; /* eg Darwin */ 2648 # endif 2649 2650 /* VG_(printf)("SIGSTARTUP\n"); */ 2651 /* Block all signals. saved_procmask remembers the previous mask, 2652 which the first thread inherits. 2653 */ 2654 block_all_host_signals( &saved_procmask ); 2655 2656 /* Copy per-signal settings to SCSS. */ 2657 for (i = 1; i <= _VKI_NSIG; i++) { 2658 /* Get the old host action */ 2659 ret = VG_(sigaction)(i, NULL, &sa); 2660 2661 # if defined(VGP_x86_darwin) || defined(VGP_amd64_darwin) 2662 /* apparently we may not even ask about the disposition of these 2663 signals, let alone change them */ 2664 if (ret != 0 && (i == VKI_SIGKILL || i == VKI_SIGSTOP)) 2665 continue; 2666 # endif 2667 2668 if (ret != 0) 2669 break; 2670 2671 /* Try setting it back to see if this signal is really 2672 available */ 2673 if (vKI_SIGRTMIN > 0 /* it actually exists on this platform */ 2674 && i >= vKI_SIGRTMIN) { 2675 vki_sigaction_toK_t tsa, sa2; 2676 2677 tsa.ksa_handler = (void *)sync_signalhandler; 2678 tsa.sa_flags = VKI_SA_SIGINFO; 2679 # if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) 2680 tsa.sa_restorer = 0; 2681 # endif 2682 VG_(sigfillset)(&tsa.sa_mask); 2683 2684 /* try setting it to some arbitrary handler */ 2685 if (VG_(sigaction)(i, &tsa, NULL) != 0) { 2686 /* failed - not really usable */ 2687 break; 2688 } 2689 2690 VG_(convert_sigaction_fromK_to_toK)( &sa, &sa2 ); 2691 ret = VG_(sigaction)(i, &sa2, NULL); 2692 vg_assert(ret == 0); 2693 } 2694 2695 VG_(max_signal) = i; 2696 2697 if (VG_(clo_trace_signals) && VG_(clo_verbosity) > 2) 2698 VG_(printf)("snaffling handler 0x%lx for signal %d\n", 2699 (Addr)(sa.ksa_handler), i ); 2700 2701 scss.scss_per_sig[i].scss_handler = sa.ksa_handler; 2702 scss.scss_per_sig[i].scss_flags = sa.sa_flags; 2703 scss.scss_per_sig[i].scss_mask = sa.sa_mask; 2704 2705 scss.scss_per_sig[i].scss_restorer = NULL; 2706 # if !defined(VGP_x86_darwin) && !defined(VGP_amd64_darwin) 2707 scss.scss_per_sig[i].scss_restorer = sa.sa_restorer; 2708 # endif 2709 2710 scss.scss_per_sig[i].scss_sa_tramp = NULL; 2711 # if defined(VGP_x86_darwin) || defined(VGP_amd64_darwin) 2712 scss.scss_per_sig[i].scss_sa_tramp = NULL; 2713 /*sa.sa_tramp;*/ 2714 /* We can't know what it was, because Darwin's sys_sigaction 2715 doesn't tell us. */ 2716 # endif 2717 } 2718 2719 if (VG_(clo_trace_signals)) 2720 VG_(dmsg)("Max kernel-supported signal is %d\n", VG_(max_signal)); 2721 2722 /* Our private internal signals are treated as ignored */ 2723 scss.scss_per_sig[VG_SIGVGKILL].scss_handler = VKI_SIG_IGN; 2724 scss.scss_per_sig[VG_SIGVGKILL].scss_flags = VKI_SA_SIGINFO; 2725 VG_(sigfillset)(&scss.scss_per_sig[VG_SIGVGKILL].scss_mask); 2726 2727 /* Copy the process' signal mask into the root thread. */ 2728 vg_assert(VG_(threads)[1].status == VgTs_Init); 2729 for (i = 2; i < VG_N_THREADS; i++) 2730 vg_assert(VG_(threads)[i].status == VgTs_Empty); 2731 2732 VG_(threads)[1].sig_mask = saved_procmask; 2733 VG_(threads)[1].tmp_sig_mask = saved_procmask; 2734 2735 /* Calculate SKSS and apply it. This also sets the initial kernel 2736 mask we need to run with. */ 2737 handle_SCSS_change( True /* forced update */ ); 2738 2739 /* Leave with all signals still blocked; the thread scheduler loop 2740 will set the appropriate mask at the appropriate time. */ 2741 } 2742 2743 /*--------------------------------------------------------------------*/ 2744 /*--- end ---*/ 2745 /*--------------------------------------------------------------------*/ 2746