1d4e76214Sopenharmony_ci/* libunwind - a platform-independent unwind library
2d4e76214Sopenharmony_ci   Copyright (C) 2003-2004 Hewlett-Packard Co
3d4e76214Sopenharmony_ci        Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
4d4e76214Sopenharmony_ci
5d4e76214Sopenharmony_ciThis file is part of libunwind.
6d4e76214Sopenharmony_ci
7d4e76214Sopenharmony_ciPermission is hereby granted, free of charge, to any person obtaining
8d4e76214Sopenharmony_cia copy of this software and associated documentation files (the
9d4e76214Sopenharmony_ci"Software"), to deal in the Software without restriction, including
10d4e76214Sopenharmony_ciwithout limitation the rights to use, copy, modify, merge, publish,
11d4e76214Sopenharmony_cidistribute, sublicense, and/or sell copies of the Software, and to
12d4e76214Sopenharmony_cipermit persons to whom the Software is furnished to do so, subject to
13d4e76214Sopenharmony_cithe following conditions:
14d4e76214Sopenharmony_ci
15d4e76214Sopenharmony_ciThe above copyright notice and this permission notice shall be
16d4e76214Sopenharmony_ciincluded in all copies or substantial portions of the Software.
17d4e76214Sopenharmony_ci
18d4e76214Sopenharmony_ciTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19d4e76214Sopenharmony_ciEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20d4e76214Sopenharmony_ciMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21d4e76214Sopenharmony_ciNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22d4e76214Sopenharmony_ciLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23d4e76214Sopenharmony_ciOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24d4e76214Sopenharmony_ciWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
25d4e76214Sopenharmony_ci
26d4e76214Sopenharmony_ci#include "unwind-internal.h"
27d4e76214Sopenharmony_ci
28d4e76214Sopenharmony_ci_Unwind_Reason_Code
29d4e76214Sopenharmony_ci_Unwind_ForcedUnwind (struct _Unwind_Exception *exception_object,
30d4e76214Sopenharmony_ci                      _Unwind_Stop_Fn stop, void *stop_parameter)
31d4e76214Sopenharmony_ci{
32d4e76214Sopenharmony_ci  struct _Unwind_Context context;
33d4e76214Sopenharmony_ci  unw_context_t uc;
34d4e76214Sopenharmony_ci
35d4e76214Sopenharmony_ci  /* We check "stop" here to tell the compiler's inliner that
36d4e76214Sopenharmony_ci     exception_object->private_1 isn't NULL when calling
37d4e76214Sopenharmony_ci     _Unwind_Phase2().  */
38d4e76214Sopenharmony_ci  if (!stop)
39d4e76214Sopenharmony_ci    return _URC_FATAL_PHASE2_ERROR;
40d4e76214Sopenharmony_ci
41d4e76214Sopenharmony_ci  if (_Unwind_InitContext (&context, &uc) < 0)
42d4e76214Sopenharmony_ci    return _URC_FATAL_PHASE2_ERROR;
43d4e76214Sopenharmony_ci
44d4e76214Sopenharmony_ci  exception_object->private_1 = (unsigned long) stop;
45d4e76214Sopenharmony_ci  exception_object->private_2 = (unsigned long) stop_parameter;
46d4e76214Sopenharmony_ci
47d4e76214Sopenharmony_ci  return _Unwind_Phase2 (exception_object, &context);
48d4e76214Sopenharmony_ci}
49d4e76214Sopenharmony_ci
50d4e76214Sopenharmony_ci_Unwind_Reason_Code __libunwind_Unwind_ForcedUnwind (struct _Unwind_Exception*,
51d4e76214Sopenharmony_ci                                                     _Unwind_Stop_Fn, void *)
52d4e76214Sopenharmony_ci     ALIAS (_Unwind_ForcedUnwind);
53