HPCToolkit
unw-throw.c
Go to the documentation of this file.
1 // -*-Mode: C++;-*- // technically C99
2 
3 // * BeginRiceCopyright *****************************************************
4 //
5 // $HeadURL$
6 // $Id$
7 //
8 // --------------------------------------------------------------------------
9 // Part of HPCToolkit (hpctoolkit.org)
10 //
11 // Information about sources of support for research and development of
12 // HPCToolkit is at 'hpctoolkit.org' and in 'README.Acknowledgments'.
13 // --------------------------------------------------------------------------
14 //
15 // Copyright ((c)) 2002-2019, Rice University
16 // All rights reserved.
17 //
18 // Redistribution and use in source and binary forms, with or without
19 // modification, are permitted provided that the following conditions are
20 // met:
21 //
22 // * Redistributions of source code must retain the above copyright
23 // notice, this list of conditions and the following disclaimer.
24 //
25 // * Redistributions in binary form must reproduce the above copyright
26 // notice, this list of conditions and the following disclaimer in the
27 // documentation and/or other materials provided with the distribution.
28 //
29 // * Neither the name of Rice University (RICE) nor the names of its
30 // contributors may be used to endorse or promote products derived from
31 // this software without specific prior written permission.
32 //
33 // This software is provided by RICE and contributors "as is" and any
34 // express or implied warranties, including, but not limited to, the
35 // implied warranties of merchantability and fitness for a particular
36 // purpose are disclaimed. In no event shall RICE or contributors be
37 // liable for any direct, indirect, incidental, special, exemplary, or
38 // consequential damages (including, but not limited to, procurement of
39 // substitute goods or services; loss of use, data, or profits; or
40 // business interruption) however caused and on any theory of liability,
41 // whether in contract, strict liability, or tort (including negligence
42 // or otherwise) arising in any way out of the use of this software, even
43 // if advised of the possibility of such damage.
44 //
45 // ******************************************************* EndRiceCopyright *
46 
47 // Purpose:
48 // Common code for abandoning an unwind via a longjump to the (thread-local) jmpbuf
49 
50 //*************************************************************************
51 // System Includes
52 //*************************************************************************
53 
54 #include <stdlib.h>
55 #include <stddef.h>
56 #include <stdint.h>
57 #include <inttypes.h>
58 #include <stdbool.h>
59 
60 #include <setjmp.h>
61 
62 
63 //*************************************************************************
64 // Local Includes
65 //*************************************************************************
66 #include <messages/messages.h>
68 #include <hpcrun/thread_data.h>
69 #include <hpcrun/main.h>
70 
71 #include "unw-throw.h"
72 
73 //*************************************************************************
74 // Interface functions
75 //*************************************************************************
76 
77 //****************************************************************************
78 // Local data
79 //****************************************************************************
80 
81 static int DEBUG_NO_LONGJMP = 0;
82 
83 //
84 // Actually drop a sample, as opposed to recording a partial unwind
85 //
86 void
88 {
90  td->btbuf_cur = td->btbuf_beg; // flush any collected backtrace frames
91 
92  sigjmp_buf_t *it = &(td->bad_unwind);
93  (*hpcrun_get_real_siglongjmp())(it->jb, 9);
94 }
95 
96 void
98 {
99  if (DEBUG_NO_LONGJMP) return;
100 
102  hpcrun_bt_dump(TD_GET(btbuf_cur), "PARTIAL");
103  }
104 
106 
107  sigjmp_buf_t *it = &(TD_GET(bad_unwind));
108  (*hpcrun_get_real_siglongjmp())(it->jb, 9);
109 }
frame_t * btbuf_cur
Definition: thread_data.h:184
int hpcrun_below_pmsg_threshold(void)
sigjmp_buf_t bad_unwind
Definition: thread_data.h:213
void hpcrun_unw_drop(void)
Definition: unw-throw.c:87
void hpcrun_up_pmsg_count(void)
void hpcrun_unw_throw(void)
Definition: unw-throw.c:97
#define TD_GET(field)
Definition: thread_data.h:256
frame_t * btbuf_beg
Definition: thread_data.h:185
void hpcrun_bt_dump(frame_t *unwind, const char *tag)
Definition: backtrace.c:90
static int DEBUG_NO_LONGJMP
Definition: unw-throw.c:81
siglongjmp_fcn * hpcrun_get_real_siglongjmp(void)
Definition: main.c:1142
sigjmp_buf jb
Definition: thread_data.h:74
thread_data_t *(* hpcrun_get_thread_data)(void)
Definition: thread_data.c:168