1800b99b8Sopenharmony_ci/*
2800b99b8Sopenharmony_ci * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
3800b99b8Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4800b99b8Sopenharmony_ci * you may not use this file except in compliance with the License.
5800b99b8Sopenharmony_ci * You may obtain a copy of the License at
6800b99b8Sopenharmony_ci *
7800b99b8Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8800b99b8Sopenharmony_ci *
9800b99b8Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10800b99b8Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11800b99b8Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12800b99b8Sopenharmony_ci * See the License for the specific language governing permissions and
13800b99b8Sopenharmony_ci * limitations under the License.
14800b99b8Sopenharmony_ci */
15800b99b8Sopenharmony_ci
16800b99b8Sopenharmony_ci#ifndef DFX_CRASHER_H
17800b99b8Sopenharmony_ci#define DFX_CRASHER_H
18800b99b8Sopenharmony_ci
19800b99b8Sopenharmony_ci#include <stdint.h>
20800b99b8Sopenharmony_ci
21800b99b8Sopenharmony_ci#define NOINLINE __attribute__((noinline))
22800b99b8Sopenharmony_ci
23800b99b8Sopenharmony_ci#define GEN_TEST_FUNCTION(FuncNumA, FuncNumB)          \
24800b99b8Sopenharmony_ci    __attribute__((noinline)) int TestFunc##FuncNumA() \
25800b99b8Sopenharmony_ci    {                                                  \
26800b99b8Sopenharmony_ci        return TestFunc##FuncNumB();                   \
27800b99b8Sopenharmony_ci    }
28800b99b8Sopenharmony_ci
29800b99b8Sopenharmony_ci
30800b99b8Sopenharmony_ciint RaiseAbort(void);
31800b99b8Sopenharmony_ciint Abort(void);
32800b99b8Sopenharmony_ciint RaiseBusError(void);
33800b99b8Sopenharmony_ciint RaiseFloatingPointException(void);
34800b99b8Sopenharmony_ciint RaiseIllegalInstructionException(void);
35800b99b8Sopenharmony_ciint IllegalInstructionException(void);
36800b99b8Sopenharmony_ciint RaiseSegmentFaultException(void);
37800b99b8Sopenharmony_ciint SegmentFaultException(void);
38800b99b8Sopenharmony_ciint RaiseTrapException(void);
39800b99b8Sopenharmony_ciint CrashTest(void);
40800b99b8Sopenharmony_ci
41800b99b8Sopenharmony_ci
42800b99b8Sopenharmony_civoid PrintUsage(void);
43800b99b8Sopenharmony_civoid *DoCrashInThread(void *inputArg);
44800b99b8Sopenharmony_civoid *SleepThread(void *argv);
45800b99b8Sopenharmony_ci
46800b99b8Sopenharmony_ciuint64_t DoActionOnSubThread(const char *arg);
47800b99b8Sopenharmony_ciuint64_t ParseAndDoCrash(const char *arg);
48800b99b8Sopenharmony_ciint MaxStackDepth(void);
49800b99b8Sopenharmony_ci
50800b99b8Sopenharmony_ci//           1         2         3         4         5         6         7
51800b99b8Sopenharmony_ci//  1234567890123456789012345678901234567890123456789012345678901234567890
52800b99b8Sopenharmony_ciint MaxMethodNameTest12345678901234567890123456789012345678901234567890ABC(void);
53800b99b8Sopenharmony_ci
54800b99b8Sopenharmony_ciint TriggerSegmentFaultException(void);
55800b99b8Sopenharmony_ciint TriggerTrapException(void);
56800b99b8Sopenharmony_ci
57800b99b8Sopenharmony_ci// test functions for callstack depth test
58800b99b8Sopenharmony_ciint TestFunc0(void);
59800b99b8Sopenharmony_ciint TestFunc1(void);
60800b99b8Sopenharmony_ciint TestFunc2(void);
61800b99b8Sopenharmony_ciint TestFunc3(void);
62800b99b8Sopenharmony_ciint TestFunc4(void);
63800b99b8Sopenharmony_ciint TestFunc5(void);
64800b99b8Sopenharmony_ciint TestFunc6(void);
65800b99b8Sopenharmony_ciint TestFunc7(void);
66800b99b8Sopenharmony_ciint TestFunc8(void);
67800b99b8Sopenharmony_ciint TestFunc9(void);
68800b99b8Sopenharmony_ciint TestFunc10(void);
69800b99b8Sopenharmony_ciint TestFunc11(void);
70800b99b8Sopenharmony_ciint TestFunc12(void);
71800b99b8Sopenharmony_ciint TestFunc13(void);
72800b99b8Sopenharmony_ciint TestFunc14(void);
73800b99b8Sopenharmony_ciint TestFunc15(void);
74800b99b8Sopenharmony_ciint TestFunc16(void);
75800b99b8Sopenharmony_ciint TestFunc17(void);
76800b99b8Sopenharmony_ciint TestFunc18(void);
77800b99b8Sopenharmony_ciint TestFunc19(void);
78800b99b8Sopenharmony_ciint TestFunc20(void);
79800b99b8Sopenharmony_ciint TestFunc21(void);
80800b99b8Sopenharmony_ciint TestFunc22(void);
81800b99b8Sopenharmony_ciint TestFunc23(void);
82800b99b8Sopenharmony_ciint TestFunc24(void);
83800b99b8Sopenharmony_ciint TestFunc25(void);
84800b99b8Sopenharmony_ciint TestFunc26(void);
85800b99b8Sopenharmony_ciint TestFunc27(void);
86800b99b8Sopenharmony_ciint TestFunc28(void);
87800b99b8Sopenharmony_ciint TestFunc29(void);
88800b99b8Sopenharmony_ciint TestFunc30(void);
89800b99b8Sopenharmony_ciint TestFunc31(void);
90800b99b8Sopenharmony_ciint TestFunc32(void);
91800b99b8Sopenharmony_ciint TestFunc33(void);
92800b99b8Sopenharmony_ciint TestFunc34(void);
93800b99b8Sopenharmony_ciint TestFunc35(void);
94800b99b8Sopenharmony_ciint TestFunc36(void);
95800b99b8Sopenharmony_ciint TestFunc37(void);
96800b99b8Sopenharmony_ciint TestFunc38(void);
97800b99b8Sopenharmony_ciint TestFunc39(void);
98800b99b8Sopenharmony_ciint TestFunc40(void);
99800b99b8Sopenharmony_ciint TestFunc41(void);
100800b99b8Sopenharmony_ciint TestFunc42(void);
101800b99b8Sopenharmony_ciint TestFunc43(void);
102800b99b8Sopenharmony_ciint TestFunc44(void);
103800b99b8Sopenharmony_ciint TestFunc45(void);
104800b99b8Sopenharmony_ciint TestFunc46(void);
105800b99b8Sopenharmony_ciint TestFunc47(void);
106800b99b8Sopenharmony_ciint TestFunc48(void);
107800b99b8Sopenharmony_ciint TestFunc49(void);
108800b99b8Sopenharmony_ciint TestFunc50(void);
109800b99b8Sopenharmony_ciint TestFunc51(void);
110800b99b8Sopenharmony_ciint TestFunc52(void);
111800b99b8Sopenharmony_ciint TestFunc53(void);
112800b99b8Sopenharmony_ciint TestFunc54(void);
113800b99b8Sopenharmony_ciint TestFunc55(void);
114800b99b8Sopenharmony_ciint TestFunc56(void);
115800b99b8Sopenharmony_ciint TestFunc57(void);
116800b99b8Sopenharmony_ciint TestFunc58(void);
117800b99b8Sopenharmony_ciint TestFunc59(void);
118800b99b8Sopenharmony_ciint TestFunc60(void);
119800b99b8Sopenharmony_ciint TestFunc61(void);
120800b99b8Sopenharmony_ciint TestFunc62(void);
121800b99b8Sopenharmony_ciint TestFunc63(void);
122800b99b8Sopenharmony_ciint TestFunc64(void);
123800b99b8Sopenharmony_ciint TestFunc65(void);
124800b99b8Sopenharmony_ciint TestFunc66(void);
125800b99b8Sopenharmony_ciint TestFunc67(void);
126800b99b8Sopenharmony_ciint TestFunc68(void);
127800b99b8Sopenharmony_ciint TestFunc69(void);
128800b99b8Sopenharmony_ciint TestFunc70(void);
129800b99b8Sopenharmony_ci
130800b99b8Sopenharmony_ci#endif // DFX_CRASHER_H
131