traceback_test.mock_tmpl 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. // +build !race,amd64,go1.16,!go1.25
  2. // Code generated by Makefile, DO NOT EDIT.
  3. /*
  4. * Copyright 2021 ByteDance Inc.
  5. *
  6. * Licensed under the Apache License, Version 2.0 (the License );
  7. * you may not use this file except in compliance with the License.
  8. * You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an AS IS BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. package {{PACKAGE}}
  19. import (
  20. "unsafe"
  21. "testing"
  22. "github.com/bytedance/sonic/loader"
  23. )
  24. // copied from g01.20.4 signal_linux_amd64.go
  25. type sigctxt struct {
  26. info unsafe.Pointer
  27. ctxt unsafe.Pointer
  28. }
  29. type stackt struct {
  30. ss_sp *byte
  31. ss_flags int32
  32. pad_cgo_0 [4]byte
  33. ss_size uintptr
  34. }
  35. type mcontext struct {
  36. gregs [23]uint64
  37. fpregs unsafe.Pointer
  38. __reserved1 [8]uint64
  39. }
  40. type sigcontext struct {
  41. r8 uint64
  42. r9 uint64
  43. r10 uint64
  44. r11 uint64
  45. r12 uint64
  46. r13 uint64
  47. r14 uint64
  48. r15 uint64
  49. rdi uint64
  50. rsi uint64
  51. rbp uint64
  52. rbx uint64
  53. rdx uint64
  54. rax uint64
  55. rcx uint64
  56. rsp uint64
  57. rip uint64
  58. eflags uint64
  59. cs uint16
  60. gs uint16
  61. fs uint16
  62. __pad0 uint16
  63. err uint64
  64. trapno uint64
  65. oldmask uint64
  66. cr2 uint64
  67. fpstate unsafe.Pointer
  68. __reserved1 [8]uint64
  69. }
  70. type ucontext struct {
  71. uc_flags uint64
  72. uc_link *ucontext
  73. uc_stack stackt
  74. uc_mcontext mcontext
  75. }
  76. //go:nosplit
  77. func (c *sigctxt) regs() *sigcontext {
  78. return (*sigcontext)(unsafe.Pointer(&(*ucontext)(c.ctxt).uc_mcontext))
  79. }
  80. func (c *sigctxt) rsp() uint64 { return c.regs().rsp }
  81. //go:nosplit
  82. func (c *sigctxt) sigpc() uintptr { return uintptr(c.rip()) }
  83. //go:nosplit
  84. func (c *sigctxt) rip() uint64 { return c.regs().rip }
  85. func (c *sigctxt) sigsp() uintptr { return uintptr(c.rsp()) }
  86. func (c *sigctxt) siglr() uintptr { return 0 }
  87. // only used for test sonic trace
  88. //go:linkname testSigtrap runtime.testSigtrap
  89. var testSigtrap func(info unsafe.Pointer, c *sigctxt, gp unsafe.Pointer) bool
  90. func init() {
  91. if testSigtrap == nil {
  92. testSigtrap = sonicSigTrap
  93. }
  94. }
  95. //go:linkname traceback1 runtime.traceback1
  96. func traceback1(pc, sp, lr uintptr, gp unsafe.Pointer, flags uint);
  97. func sonicSigTrap(info unsafe.Pointer, c *sigctxt, gp unsafe.Pointer) bool {
  98. pc := c.sigpc()
  99. sp := c.sigsp()
  100. lr := c.siglr()
  101. traceback1(pc, sp, lr, gp, 0);
  102. return true
  103. }
  104. // =================== register mocked functions ===================
  105. var F_mock_f32toa func()
  106. var S_mock_f32toa uintptr
  107. //go:nosplit
  108. func mock_f32toa() {
  109. F_mock_f32toa()
  110. }
  111. var F_mock_f64toa func()
  112. var S_mock_f64toa uintptr
  113. //go:nosplit
  114. func mock_f64toa() {
  115. F_mock_f64toa()
  116. }
  117. var F_mock_get_by_path func()
  118. var S_mock_get_by_path uintptr
  119. //go:nosplit
  120. func mock_get_by_path() {
  121. F_mock_get_by_path()
  122. }
  123. var F_mock_html_escape func()
  124. var S_mock_html_escape uintptr
  125. //go:nosplit
  126. func mock_html_escape() {
  127. F_mock_html_escape()
  128. }
  129. var F_mock_i64toa func()
  130. var S_mock_i64toa uintptr
  131. //go:nosplit
  132. func mock_i64toa() {
  133. F_mock_i64toa()
  134. }
  135. var F_mock_lspace func()
  136. var S_mock_lspace uintptr
  137. //go:nosplit
  138. func mock_lspace() {
  139. F_mock_lspace()
  140. }
  141. var F_mock_quote func()
  142. var S_mock_quote uintptr
  143. //go:nosplit
  144. func mock_quote() {
  145. F_mock_quote()
  146. }
  147. var F_mock_skip_array func()
  148. var S_mock_skip_array uintptr
  149. //go:nosplit
  150. func mock_skip_array() {
  151. F_mock_skip_array()
  152. }
  153. var F_mock_skip_number func()
  154. var S_mock_skip_number uintptr
  155. //go:nosplit
  156. func mock_skip_number() {
  157. F_mock_skip_number()
  158. }
  159. var F_mock_skip_one func()
  160. var S_mock_skip_one uintptr
  161. //go:nosplit
  162. func mock_skip_one() {
  163. F_mock_skip_one()
  164. }
  165. var F_mock_skip_object func()
  166. var S_mock_skip_object uintptr
  167. //go:nosplit
  168. func mock_skip_object() {
  169. F_mock_skip_object()
  170. }
  171. var F_mock_skip_one_fast func()
  172. var S_mock_skip_one_fast uintptr
  173. //go:nosplit
  174. func mock_skip_one_fast() {
  175. F_mock_skip_one_fast()
  176. }
  177. var F_mock_u64toa func()
  178. var S_mock_u64toa uintptr
  179. //go:nosplit
  180. func mock_u64toa() {
  181. F_mock_u64toa()
  182. }
  183. var F_mock_unquote func()
  184. var S_mock_unquote uintptr
  185. //go:nosplit
  186. func mock_unquote() {
  187. F_mock_unquote()
  188. }
  189. var F_mock_validate_one func()
  190. var S_mock_validate_one uintptr
  191. //go:nosplit
  192. func mock_validate_one() {
  193. F_mock_validate_one()
  194. }
  195. var F_mock_validate_utf8 func()
  196. var S_mock_validate_utf8 uintptr
  197. //go:nosplit
  198. func mock_validate_utf8() {
  199. F_mock_validate_utf8()
  200. }
  201. var F_mock_validate_utf8_fast func()
  202. var S_mock_validate_utf8_fast uintptr
  203. //go:nosplit
  204. func mock_validate_utf8_fast() {
  205. F_mock_validate_utf8_fast()
  206. }
  207. var F_mock_vnumber func()
  208. var S_mock_vnumber uintptr
  209. //go:nosplit
  210. func mock_vnumber() {
  211. F_mock_vnumber()
  212. }
  213. var F_mock_vsigned func()
  214. var S_mock_vsigned uintptr
  215. //go:nosplit
  216. func mock_vsigned() {
  217. F_mock_vsigned()
  218. }
  219. var F_mock_vunsigned func()
  220. var S_mock_vunsigned uintptr
  221. //go:nosplit
  222. func mock_vunsigned() {
  223. F_mock_vunsigned()
  224. }
  225. var F_mock_vstring func()
  226. var S_mock_vstring uintptr
  227. //go:nosplit
  228. func mock_vstring() {
  229. F_mock_vstring()
  230. }
  231. var F_mock_value func()
  232. var S_mock_value uintptr
  233. //go:nosplit
  234. func mock_value() {
  235. F_mock_value()
  236. }
  237. var F_mock_parse_with_padding func()
  238. var S_mock_parse_with_padding uintptr
  239. //go:nosplit
  240. func mock_parse_with_padding() {
  241. F_mock_parse_with_padding()
  242. }
  243. var F_mock_lookup_small_key func()
  244. var S_mock_lookup_small_key uintptr
  245. //go:nosplit
  246. func mock_lookup_small_key() {
  247. F_mock_lookup_small_key()
  248. }
  249. func init() {
  250. Mock()
  251. }
  252. func Mock() {
  253. loader.WrapGoC(_mock_text_f64toa, _cfunc_f64toa, []loader.GoC{{"_f64toa", &S_mock_f64toa, &F_mock_f64toa}}, "{{PACKAGE}}", "{{PACKAGE}}/f64toa.c")
  254. loader.WrapGoC(_mock_text_f32toa, _cfunc_f32toa, []loader.GoC{{"_f32toa", &S_mock_f32toa, &F_mock_f32toa}}, "{{PACKAGE}}", "{{PACKAGE}}/f32toa.c")
  255. loader.WrapGoC(_mock_text_get_by_path, _cfunc_get_by_path, []loader.GoC{{"_get_by_path", &S_mock_get_by_path, &F_mock_get_by_path}}, "{{PACKAGE}}", "{{PACKAGE}}/get_by_path.c")
  256. loader.WrapGoC(_mock_text_html_escape, _cfunc_html_escape, []loader.GoC{{"_html_escape", &S_mock_html_escape, &F_mock_html_escape}}, "{{PACKAGE}}", "{{PACKAGE}}/html_escape.c")
  257. loader.WrapGoC(_mock_text_i64toa, _cfunc_i64toa, []loader.GoC{{"_i64toa", &S_mock_i64toa, &F_mock_i64toa}}, "{{PACKAGE}}", "{{PACKAGE}}/i64toa.c")
  258. loader.WrapGoC(_mock_text_lspace, _cfunc_lspace, []loader.GoC{{"_lspace", &S_mock_lspace, &F_mock_lspace}}, "{{PACKAGE}}", "{{PACKAGE}}/lspace.c")
  259. loader.WrapGoC(_mock_text_quote, _cfunc_quote, []loader.GoC{{"_quote", &S_mock_quote, &F_mock_quote}}, "{{PACKAGE}}", "{{PACKAGE}}/quote.c")
  260. loader.WrapGoC(_mock_text_skip_array, _cfunc_skip_array, []loader.GoC{{"_skip_array", &S_mock_skip_array, &F_mock_skip_array}}, "{{PACKAGE}}", "{{PACKAGE}}/skip_array.c")
  261. loader.WrapGoC(_mock_text_skip_number, _cfunc_skip_number, []loader.GoC{{"_skip_number", &S_mock_skip_number, &F_mock_skip_number}}, "{{PACKAGE}}", "{{PACKAGE}}/skip_number.c")
  262. loader.WrapGoC(_mock_text_skip_one, _cfunc_skip_one, []loader.GoC{{"_skip_one", &S_mock_skip_one, &F_mock_skip_one}}, "{{PACKAGE}}", "{{PACKAGE}}/skip_one.c")
  263. loader.WrapGoC(_mock_text_skip_object, _cfunc_skip_object, []loader.GoC{{"_skip_object", &S_mock_skip_object, &F_mock_skip_object}}, "{{PACKAGE}}", "{{PACKAGE}}/skip_object.c")
  264. loader.WrapGoC(_mock_text_skip_one_fast, _cfunc_skip_one_fast, []loader.GoC{{"_skip_one_fast", &S_mock_skip_one_fast, &F_mock_skip_one_fast}}, "{{PACKAGE}}", "{{PACKAGE}}/skip_one_fast.c")
  265. loader.WrapGoC(_mock_text_u64toa, _cfunc_u64toa, []loader.GoC{{"_u64toa", &S_mock_u64toa, &F_mock_u64toa}}, "{{PACKAGE}}", "{{PACKAGE}}/u64toa.c")
  266. loader.WrapGoC(_mock_text_unquote, _cfunc_unquote, []loader.GoC{{"_unquote", &S_mock_unquote, &F_mock_unquote}}, "{{PACKAGE}}", "{{PACKAGE}}/unquote.c")
  267. loader.WrapGoC(_mock_text_validate_one, _cfunc_validate_one, []loader.GoC{{"_validate_one", &S_mock_validate_one, &F_mock_validate_one}}, "{{PACKAGE}}", "{{PACKAGE}}/validate_one.c")
  268. loader.WrapGoC(_mock_text_validate_utf8, _cfunc_validate_utf8, []loader.GoC{{"_validate_utf8", &S_mock_validate_utf8, &F_mock_validate_utf8}}, "{{PACKAGE}}", "{{PACKAGE}}/validate_utf8.c")
  269. loader.WrapGoC(_mock_text_validate_utf8_fast, _cfunc_validate_utf8_fast, []loader.GoC{{"_validate_utf8_fast", &S_mock_validate_utf8_fast, &F_mock_validate_utf8_fast}}, "{{PACKAGE}}", "{{PACKAGE}}/validate_utf8_fast.c")
  270. loader.WrapGoC(_mock_text_vnumber, _cfunc_vnumber, []loader.GoC{{"_vnumber", &S_mock_vnumber, &F_mock_vnumber}}, "{{PACKAGE}}", "{{PACKAGE}}/vnumber.c")
  271. loader.WrapGoC(_mock_text_vsigned, _cfunc_vsigned, []loader.GoC{{"_vsigned", &S_mock_vsigned, &F_mock_vsigned}}, "{{PACKAGE}}", "{{PACKAGE}}/vsigned.c")
  272. loader.WrapGoC(_mock_text_vunsigned, _cfunc_vunsigned, []loader.GoC{{"_vunsigned", &S_mock_vunsigned, &F_mock_vunsigned}}, "{{PACKAGE}}", "{{PACKAGE}}/vunsigned.c")
  273. loader.WrapGoC(_mock_text_vstring, _cfunc_vstring, []loader.GoC{{"_vstring", &S_mock_vstring, &F_mock_vstring}}, "{{PACKAGE}}", "{{PACKAGE}}/vstring.c")
  274. loader.WrapGoC(_mock_text_value, _cfunc_value, []loader.GoC{{"_value", &S_mock_value, &F_mock_value}}, "{{PACKAGE}}", "{{PACKAGE}}/value.c")
  275. loader.WrapGoC(_mock_text_parse_with_padding, _cfunc_parse_with_padding, []loader.GoC{{"_parse_with_padding", &S_mock_parse_with_padding, &F_mock_parse_with_padding}}, "{{PACKAGE}}", "{{PACKAGE}}/parse_with_padding.c")
  276. loader.WrapGoC(_mock_text_lookup_small_key, _cfunc_lookup_small_key, []loader.GoC{{"_lookup_small_key", &S_mock_lookup_small_key, &F_mock_lookup_small_key}}, "{{PACKAGE}}", "{{PACKAGE}}/lookup_small_key.c")
  277. }
  278. func TestTraceback(t *testing.T) {
  279. tests := []func() {
  280. mock_lspace,
  281. mock_f32toa,
  282. mock_f64toa,
  283. mock_html_escape,
  284. mock_i64toa,
  285. mock_quote,
  286. mock_skip_array,
  287. mock_skip_number,
  288. mock_skip_one,
  289. mock_get_by_path,
  290. mock_skip_object,
  291. mock_skip_one_fast,
  292. mock_u64toa,
  293. mock_unquote,
  294. mock_validate_one,
  295. mock_validate_utf8,
  296. mock_validate_utf8_fast,
  297. mock_vnumber,
  298. mock_vsigned,
  299. mock_vunsigned,
  300. mock_vstring,
  301. mock_value,
  302. mock_parse_with_padding,
  303. mock_lookup_small_key,
  304. }
  305. for _, f := range tests {
  306. f()
  307. }
  308. }