summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/kernel/svc.cpp8
-rw-r--r--src/core/hle/kernel/svc_wrap.h56
2 files changed, 36 insertions, 28 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index 3e4dd61dc..863ecfa74 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -370,15 +370,15 @@ static ResultCode ArbitrateUnlock(VAddr mutex_addr) {
370 370
371struct BreakReason { 371struct BreakReason {
372 union { 372 union {
373 u64 raw; 373 u32 raw;
374 BitField<31, 1, u64> dont_kill_application; 374 BitField<31, 1, u32> signal_debugger;
375 }; 375 };
376}; 376};
377 377
378/// Break program execution 378/// Break program execution
379static void Break(u64 reason, u64 info1, u64 info2) { 379static void Break(u32 reason, u64 info1, u64 info2) {
380 BreakReason break_reason{reason}; 380 BreakReason break_reason{reason};
381 if (break_reason.dont_kill_application) { 381 if (break_reason.signal_debugger) {
382 LOG_ERROR( 382 LOG_ERROR(
383 Debug_Emulated, 383 Debug_Emulated,
384 "Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}", 384 "Emulated program broke execution! reason=0x{:016X}, info1=0x{:016X}, info2=0x{:016X}",
diff --git a/src/core/hle/kernel/svc_wrap.h b/src/core/hle/kernel/svc_wrap.h
index 22712e64f..cbb80c3c4 100644
--- a/src/core/hle/kernel/svc_wrap.h
+++ b/src/core/hle/kernel/svc_wrap.h
@@ -35,18 +35,18 @@ void SvcWrap() {
35 35
36template <ResultCode func(u32)> 36template <ResultCode func(u32)>
37void SvcWrap() { 37void SvcWrap() {
38 FuncReturn(func((u32)Param(0)).raw); 38 FuncReturn(func(static_cast<u32>(Param(0))).raw);
39} 39}
40 40
41template <ResultCode func(u32, u32)> 41template <ResultCode func(u32, u32)>
42void SvcWrap() { 42void SvcWrap() {
43 FuncReturn(func((u32)Param(0), (u32)Param(1)).raw); 43 FuncReturn(func(static_cast<u32>(Param(0)), static_cast<u32>(Param(1))).raw);
44} 44}
45 45
46template <ResultCode func(u32*, u32)> 46template <ResultCode func(u32*, u32)>
47void SvcWrap() { 47void SvcWrap() {
48 u32 param_1 = 0; 48 u32 param_1 = 0;
49 u32 retval = func(&param_1, (u32)Param(1)).raw; 49 u32 retval = func(&param_1, static_cast<u32>(Param(1))).raw;
50 Core::CurrentArmInterface().SetReg(1, param_1); 50 Core::CurrentArmInterface().SetReg(1, param_1);
51 FuncReturn(retval); 51 FuncReturn(retval);
52} 52}
@@ -61,7 +61,7 @@ void SvcWrap() {
61 61
62template <ResultCode func(u64, s32)> 62template <ResultCode func(u64, s32)>
63void SvcWrap() { 63void SvcWrap() {
64 FuncReturn(func(Param(0), (s32)Param(1)).raw); 64 FuncReturn(func(Param(0), static_cast<s32>(Param(1))).raw);
65} 65}
66 66
67template <ResultCode func(u64, u32)> 67template <ResultCode func(u64, u32)>
@@ -79,19 +79,19 @@ void SvcWrap() {
79 79
80template <ResultCode func(u32, u64)> 80template <ResultCode func(u32, u64)>
81void SvcWrap() { 81void SvcWrap() {
82 FuncReturn(func((u32)(Param(0) & 0xFFFFFFFF), Param(1)).raw); 82 FuncReturn(func(static_cast<u32>(Param(0)), Param(1)).raw);
83} 83}
84 84
85template <ResultCode func(u32, u32, u64)> 85template <ResultCode func(u32, u32, u64)>
86void SvcWrap() { 86void SvcWrap() {
87 FuncReturn(func((u32)(Param(0) & 0xFFFFFFFF), (u32)(Param(1) & 0xFFFFFFFF), Param(2)).raw); 87 FuncReturn(func(static_cast<u32>(Param(0)), static_cast<u32>(Param(1)), Param(2)).raw);
88} 88}
89 89
90template <ResultCode func(u32, u32*, u64*)> 90template <ResultCode func(u32, u32*, u64*)>
91void SvcWrap() { 91void SvcWrap() {
92 u32 param_1 = 0; 92 u32 param_1 = 0;
93 u64 param_2 = 0; 93 u64 param_2 = 0;
94 ResultCode retval = func((u32)(Param(2) & 0xFFFFFFFF), &param_1, &param_2); 94 ResultCode retval = func(static_cast<u32>(Param(2)), &param_1, &param_2);
95 Core::CurrentArmInterface().SetReg(1, param_1); 95 Core::CurrentArmInterface().SetReg(1, param_1);
96 Core::CurrentArmInterface().SetReg(2, param_2); 96 Core::CurrentArmInterface().SetReg(2, param_2);
97 FuncReturn(retval.raw); 97 FuncReturn(retval.raw);
@@ -100,12 +100,12 @@ void SvcWrap() {
100template <ResultCode func(u64, u64, u32, u32)> 100template <ResultCode func(u64, u64, u32, u32)>
101void SvcWrap() { 101void SvcWrap() {
102 FuncReturn( 102 FuncReturn(
103 func(Param(0), Param(1), (u32)(Param(3) & 0xFFFFFFFF), (u32)(Param(3) & 0xFFFFFFFF)).raw); 103 func(Param(0), Param(1), static_cast<u32>(Param(3)), static_cast<u32>(Param(3))).raw);
104} 104}
105 105
106template <ResultCode func(u32, u64, u32)> 106template <ResultCode func(u32, u64, u32)>
107void SvcWrap() { 107void SvcWrap() {
108 FuncReturn(func((u32)Param(0), Param(1), (u32)Param(2)).raw); 108 FuncReturn(func(static_cast<u32>(Param(0)), Param(1), static_cast<u32>(Param(2))).raw);
109} 109}
110 110
111template <ResultCode func(u64, u64, u64)> 111template <ResultCode func(u64, u64, u64)>
@@ -115,25 +115,28 @@ void SvcWrap() {
115 115
116template <ResultCode func(u32, u64, u64, u32)> 116template <ResultCode func(u32, u64, u64, u32)>
117void SvcWrap() { 117void SvcWrap() {
118 FuncReturn(func((u32)Param(0), Param(1), Param(2), (u32)Param(3)).raw); 118 FuncReturn(
119 func(static_cast<u32>(Param(0)), Param(1), Param(2), static_cast<u32>(Param(3))).raw);
119} 120}
120 121
121template <ResultCode func(u32, u64, u64)> 122template <ResultCode func(u32, u64, u64)>
122void SvcWrap() { 123void SvcWrap() {
123 FuncReturn(func((u32)Param(0), Param(1), Param(2)).raw); 124 FuncReturn(func(static_cast<u32>(Param(0)), Param(1), Param(2)).raw);
124} 125}
125 126
126template <ResultCode func(u32*, u64, u64, s64)> 127template <ResultCode func(u32*, u64, u64, s64)>
127void SvcWrap() { 128void SvcWrap() {
128 u32 param_1 = 0; 129 u32 param_1 = 0;
129 ResultCode retval = func(&param_1, Param(1), (u32)(Param(2) & 0xFFFFFFFF), (s64)Param(3)); 130 ResultCode retval =
131 func(&param_1, Param(1), static_cast<u32>(Param(2)), static_cast<s64>(Param(3)));
130 Core::CurrentArmInterface().SetReg(1, param_1); 132 Core::CurrentArmInterface().SetReg(1, param_1);
131 FuncReturn(retval.raw); 133 FuncReturn(retval.raw);
132} 134}
133 135
134template <ResultCode func(u64, u64, u32, s64)> 136template <ResultCode func(u64, u64, u32, s64)>
135void SvcWrap() { 137void SvcWrap() {
136 FuncReturn(func(Param(0), Param(1), (u32)Param(2), (s64)Param(3)).raw); 138 FuncReturn(
139 func(Param(0), Param(1), static_cast<u32>(Param(2)), static_cast<s64>(Param(3))).raw);
137} 140}
138 141
139template <ResultCode func(u64*, u64, u64, u64)> 142template <ResultCode func(u64*, u64, u64, u64)>
@@ -147,9 +150,9 @@ void SvcWrap() {
147template <ResultCode func(u32*, u64, u64, u64, u32, s32)> 150template <ResultCode func(u32*, u64, u64, u64, u32, s32)>
148void SvcWrap() { 151void SvcWrap() {
149 u32 param_1 = 0; 152 u32 param_1 = 0;
150 u32 retval = 153 u32 retval = func(&param_1, Param(1), Param(2), Param(3), static_cast<u32>(Param(4)),
151 func(&param_1, Param(1), Param(2), Param(3), (u32)Param(4), (s32)(Param(5) & 0xFFFFFFFF)) 154 static_cast<s32>(Param(5)))
152 .raw; 155 .raw;
153 Core::CurrentArmInterface().SetReg(1, param_1); 156 Core::CurrentArmInterface().SetReg(1, param_1);
154 FuncReturn(retval); 157 FuncReturn(retval);
155} 158}
@@ -172,7 +175,7 @@ void SvcWrap() {
172template <ResultCode func(u32*, u64, u64, u32)> 175template <ResultCode func(u32*, u64, u64, u32)>
173void SvcWrap() { 176void SvcWrap() {
174 u32 param_1 = 0; 177 u32 param_1 = 0;
175 u32 retval = func(&param_1, Param(1), Param(2), (u32)(Param(3) & 0xFFFFFFFF)).raw; 178 u32 retval = func(&param_1, Param(1), Param(2), static_cast<u32>(Param(3))).raw;
176 Core::CurrentArmInterface().SetReg(1, param_1); 179 Core::CurrentArmInterface().SetReg(1, param_1);
177 FuncReturn(retval); 180 FuncReturn(retval);
178} 181}
@@ -181,22 +184,22 @@ template <ResultCode func(Handle*, u64, u32, u32)>
181void SvcWrap() { 184void SvcWrap() {
182 u32 param_1 = 0; 185 u32 param_1 = 0;
183 u32 retval = 186 u32 retval =
184 func(&param_1, Param(1), (u32)(Param(2) & 0xFFFFFFFF), (u32)(Param(3) & 0xFFFFFFFF)).raw; 187 func(&param_1, Param(1), static_cast<u32>(Param(2)), static_cast<u32>(Param(3))).raw;
185 Core::CurrentArmInterface().SetReg(1, param_1); 188 Core::CurrentArmInterface().SetReg(1, param_1);
186 FuncReturn(retval); 189 FuncReturn(retval);
187} 190}
188 191
189template <ResultCode func(u64, u32, s32, s64)> 192template <ResultCode func(u64, u32, s32, s64)>
190void SvcWrap() { 193void SvcWrap() {
191 FuncReturn( 194 FuncReturn(func(Param(0), static_cast<u32>(Param(1)), static_cast<s32>(Param(2)),
192 func(Param(0), (u32)(Param(1) & 0xFFFFFFFF), (s32)(Param(2) & 0xFFFFFFFF), (s64)Param(3)) 195 static_cast<s64>(Param(3)))
193 .raw); 196 .raw);
194} 197}
195 198
196template <ResultCode func(u64, u32, s32, s32)> 199template <ResultCode func(u64, u32, s32, s32)>
197void SvcWrap() { 200void SvcWrap() {
198 FuncReturn(func(Param(0), (u32)(Param(1) & 0xFFFFFFFF), (s32)(Param(2) & 0xFFFFFFFF), 201 FuncReturn(func(Param(0), static_cast<u32>(Param(1)), static_cast<s32>(Param(2)),
199 (s32)(Param(3) & 0xFFFFFFFF)) 202 static_cast<s32>(Param(3)))
200 .raw); 203 .raw);
201} 204}
202 205
@@ -226,7 +229,7 @@ void SvcWrap() {
226 229
227template <void func(s64)> 230template <void func(s64)>
228void SvcWrap() { 231void SvcWrap() {
229 func((s64)Param(0)); 232 func(static_cast<s64>(Param(0)));
230} 233}
231 234
232template <void func(u64, u64 len)> 235template <void func(u64, u64 len)>
@@ -239,4 +242,9 @@ void SvcWrap() {
239 func(Param(0), Param(1), Param(2)); 242 func(Param(0), Param(1), Param(2));
240} 243}
241 244
245template <void func(u32, u64, u64)>
246void SvcWrap() {
247 func(static_cast<u32>(Param(0)), Param(1), Param(2));
248}
249
242} // namespace Kernel 250} // namespace Kernel