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
>
67
#include <
unwind/common/backtrace.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
87
hpcrun_unw_drop
(
void
)
88
{
89
thread_data_t
* td =
hpcrun_get_thread_data
();
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
97
hpcrun_unw_throw
(
void
)
98
{
99
if
(
DEBUG_NO_LONGJMP
)
return
;
100
101
if
(
hpcrun_below_pmsg_threshold
()) {
102
hpcrun_bt_dump
(
TD_GET
(btbuf_cur),
"PARTIAL"
);
103
}
104
105
hpcrun_up_pmsg_count
();
106
107
sigjmp_buf_t
*it = &(
TD_GET
(bad_unwind));
108
(*
hpcrun_get_real_siglongjmp
())(it->
jb
, 9);
109
}
backtrace.h
messages.h
unw-throw.h
thread_data_t::btbuf_cur
frame_t * btbuf_cur
Definition:
thread_data.h:184
hpcrun_below_pmsg_threshold
int hpcrun_below_pmsg_threshold(void)
Definition:
messages-sync.c:270
sigjmp_buf_t
Definition:
thread_data.h:73
thread_data_t::bad_unwind
sigjmp_buf_t bad_unwind
Definition:
thread_data.h:213
main.h
hpcrun_unw_drop
void hpcrun_unw_drop(void)
Definition:
unw-throw.c:87
hpcrun_up_pmsg_count
void hpcrun_up_pmsg_count(void)
Definition:
messages-sync.c:277
hpcrun_unw_throw
void hpcrun_unw_throw(void)
Definition:
unw-throw.c:97
TD_GET
#define TD_GET(field)
Definition:
thread_data.h:256
thread_data_t::btbuf_beg
frame_t * btbuf_beg
Definition:
thread_data.h:185
hpcrun_bt_dump
void hpcrun_bt_dump(frame_t *unwind, const char *tag)
Definition:
backtrace.c:90
DEBUG_NO_LONGJMP
static int DEBUG_NO_LONGJMP
Definition:
unw-throw.c:81
hpcrun_get_real_siglongjmp
siglongjmp_fcn * hpcrun_get_real_siglongjmp(void)
Definition:
main.c:1142
thread_data.h
thread_data_t
Definition:
thread_data.h:137
sigjmp_buf_t::jb
sigjmp_buf jb
Definition:
thread_data.h:74
hpcrun_get_thread_data
thread_data_t *(* hpcrun_get_thread_data)(void)
Definition:
thread_data.c:168
src
tool
hpcrun
unwind
common
unw-throw.c
Generated by
1.8.13