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