test.go 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. /*
  2. * Copyright (C) 2019 Intel Corporation. All rights reserved.
  3. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  4. */
  5. package main
  6. import (
  7. "gitlab.alipay-inc.com/TNT_Runtime/ant-runtime/bindings/go/wamr"
  8. "fmt"
  9. )
  10. var wasmBytes = []byte {
  11. 0x00, 0x61, 0x73, 0x6D, 0x01, 0x00, 0x00, 0x00, 0x01, 0x29, 0x07, 0x60,
  12. 0x01, 0x7F, 0x01, 0x7F, 0x60, 0x02, 0x7F, 0x7F, 0x01, 0x7F, 0x60, 0x01,
  13. 0x7F, 0x00, 0x60, 0x04, 0x7F, 0x7E, 0x7D, 0x7C, 0x00, 0x60, 0x02, 0x7E,
  14. 0x7E, 0x01, 0x7E, 0x60, 0x02, 0x7C, 0x7F, 0x01, 0x7D, 0x60, 0x02, 0x7D,
  15. 0x7C, 0x01, 0x7C, 0x02, 0x31, 0x04, 0x03, 0x65, 0x6E, 0x76, 0x06, 0x70,
  16. 0x72, 0x69, 0x6E, 0x74, 0x66, 0x00, 0x01, 0x03, 0x65, 0x6E, 0x76, 0x04,
  17. 0x70, 0x75, 0x74, 0x73, 0x00, 0x00, 0x03, 0x65, 0x6E, 0x76, 0x06, 0x6D,
  18. 0x61, 0x6C, 0x6C, 0x6F, 0x63, 0x00, 0x00, 0x03, 0x65, 0x6E, 0x76, 0x04,
  19. 0x66, 0x72, 0x65, 0x65, 0x00, 0x02, 0x03, 0x07, 0x06, 0x00, 0x03, 0x04,
  20. 0x06, 0x05, 0x01, 0x05, 0x03, 0x01, 0x00, 0x01, 0x06, 0x13, 0x03, 0x7F,
  21. 0x01, 0x41, 0x90, 0x29, 0x0B, 0x7F, 0x00, 0x41, 0x90, 0x09, 0x0B, 0x7F,
  22. 0x00, 0x41, 0x90, 0x29, 0x0B, 0x07, 0x5F, 0x09, 0x06, 0x6D, 0x65, 0x6D,
  23. 0x6F, 0x72, 0x79, 0x02, 0x00, 0x04, 0x66, 0x69, 0x62, 0x32, 0x00, 0x04,
  24. 0x05, 0x74, 0x65, 0x73, 0x74, 0x31, 0x00, 0x05, 0x05, 0x74, 0x65, 0x73,
  25. 0x74, 0x32, 0x00, 0x06, 0x05, 0x74, 0x65, 0x73, 0x74, 0x33, 0x00, 0x07,
  26. 0x05, 0x74, 0x65, 0x73, 0x74, 0x34, 0x00, 0x08, 0x10, 0x5F, 0x5F, 0x6D,
  27. 0x61, 0x69, 0x6E, 0x5F, 0x61, 0x72, 0x67, 0x63, 0x5F, 0x61, 0x72, 0x67,
  28. 0x76, 0x00, 0x09, 0x0A, 0x5F, 0x5F, 0x64, 0x61, 0x74, 0x61, 0x5F, 0x65,
  29. 0x6E, 0x64, 0x03, 0x01, 0x0B, 0x5F, 0x5F, 0x68, 0x65, 0x61, 0x70, 0x5F,
  30. 0x62, 0x61, 0x73, 0x65, 0x03, 0x02, 0x0A, 0xA5, 0x03, 0x06, 0x37, 0x01,
  31. 0x01, 0x7F, 0x41, 0x01, 0x21, 0x01, 0x20, 0x00, 0x41, 0x02, 0x4F, 0x04,
  32. 0x7F, 0x41, 0x00, 0x21, 0x01, 0x03, 0x40, 0x20, 0x00, 0x41, 0x02, 0x6B,
  33. 0x10, 0x04, 0x20, 0x01, 0x6A, 0x21, 0x01, 0x20, 0x00, 0x41, 0x01, 0x6B,
  34. 0x22, 0x00, 0x41, 0x01, 0x4B, 0x0D, 0x00, 0x0B, 0x20, 0x01, 0x41, 0x01,
  35. 0x6A, 0x05, 0x41, 0x01, 0x0B, 0x0B, 0x3F, 0x01, 0x01, 0x7F, 0x23, 0x00,
  36. 0x41, 0x20, 0x6B, 0x22, 0x04, 0x24, 0x00, 0x20, 0x04, 0x41, 0x18, 0x6A,
  37. 0x20, 0x03, 0x39, 0x03, 0x00, 0x20, 0x04, 0x41, 0x10, 0x6A, 0x20, 0x02,
  38. 0xBB, 0x39, 0x03, 0x00, 0x20, 0x04, 0x20, 0x01, 0x37, 0x03, 0x08, 0x20,
  39. 0x04, 0x20, 0x00, 0x36, 0x02, 0x00, 0x41, 0xD0, 0x08, 0x20, 0x04, 0x10,
  40. 0x00, 0x1A, 0x20, 0x04, 0x41, 0x20, 0x6A, 0x24, 0x00, 0x0B, 0x3B, 0x01,
  41. 0x01, 0x7F, 0x23, 0x00, 0x41, 0x20, 0x6B, 0x22, 0x02, 0x24, 0x00, 0x20,
  42. 0x02, 0x20, 0x00, 0x37, 0x03, 0x00, 0x20, 0x02, 0x20, 0x01, 0x37, 0x03,
  43. 0x08, 0x20, 0x02, 0x41, 0x10, 0x6A, 0x20, 0x00, 0x20, 0x01, 0x7C, 0x22,
  44. 0x00, 0x37, 0x03, 0x00, 0x41, 0xF6, 0x08, 0x20, 0x02, 0x10, 0x00, 0x1A,
  45. 0x20, 0x02, 0x41, 0x20, 0x6A, 0x24, 0x00, 0x20, 0x00, 0x0B, 0x40, 0x02,
  46. 0x01, 0x7F, 0x01, 0x7C, 0x23, 0x00, 0x41, 0x20, 0x6B, 0x22, 0x02, 0x24,
  47. 0x00, 0x20, 0x02, 0x20, 0x01, 0x39, 0x03, 0x08, 0x20, 0x02, 0x20, 0x00,
  48. 0xBB, 0x22, 0x03, 0x39, 0x03, 0x00, 0x20, 0x02, 0x41, 0x10, 0x6A, 0x20,
  49. 0x03, 0x20, 0x01, 0xA2, 0x22, 0x01, 0x39, 0x03, 0x00, 0x41, 0xB4, 0x08,
  50. 0x20, 0x02, 0x10, 0x00, 0x1A, 0x20, 0x02, 0x41, 0x20, 0x6A, 0x24, 0x00,
  51. 0x20, 0x01, 0x0B, 0x3D, 0x01, 0x01, 0x7F, 0x23, 0x00, 0x41, 0x20, 0x6B,
  52. 0x22, 0x02, 0x24, 0x00, 0x20, 0x02, 0x20, 0x00, 0x39, 0x03, 0x00, 0x20,
  53. 0x02, 0x20, 0x01, 0x36, 0x02, 0x08, 0x20, 0x02, 0x41, 0x10, 0x6A, 0x20,
  54. 0x00, 0x20, 0x01, 0xB7, 0xA3, 0x22, 0x00, 0x39, 0x03, 0x00, 0x41, 0xC2,
  55. 0x08, 0x20, 0x02, 0x10, 0x00, 0x1A, 0x20, 0x02, 0x41, 0x20, 0x6A, 0x24,
  56. 0x00, 0x20, 0x00, 0xB6, 0x0B, 0x70, 0x00, 0x23, 0x00, 0x41, 0x20, 0x6B,
  57. 0x22, 0x00, 0x24, 0x00, 0x41, 0x9A, 0x08, 0x10, 0x01, 0x1A, 0x02, 0x7F,
  58. 0x41, 0x80, 0x08, 0x10, 0x02, 0x22, 0x01, 0x45, 0x04, 0x40, 0x41, 0x88,
  59. 0x08, 0x10, 0x01, 0x1A, 0x41, 0x7F, 0x0C, 0x01, 0x0B, 0x20, 0x00, 0x20,
  60. 0x01, 0x36, 0x02, 0x10, 0x41, 0xA7, 0x08, 0x20, 0x00, 0x41, 0x10, 0x6A,
  61. 0x10, 0x00, 0x1A, 0x20, 0x01, 0x41, 0x04, 0x6A, 0x41, 0x8E, 0x09, 0x2F,
  62. 0x00, 0x00, 0x3B, 0x00, 0x00, 0x20, 0x01, 0x41, 0x8A, 0x09, 0x28, 0x00,
  63. 0x00, 0x36, 0x00, 0x00, 0x20, 0x00, 0x20, 0x01, 0x36, 0x02, 0x00, 0x41,
  64. 0x80, 0x08, 0x20, 0x00, 0x10, 0x00, 0x1A, 0x20, 0x01, 0x10, 0x03, 0x41,
  65. 0x00, 0x0B, 0x20, 0x00, 0x41, 0x20, 0x6A, 0x24, 0x00, 0x0B, 0x0B, 0x97,
  66. 0x01, 0x01, 0x00, 0x41, 0x80, 0x08, 0x0B, 0x8F, 0x01, 0x62, 0x75, 0x66,
  67. 0x3A, 0x20, 0x25, 0x73, 0x00, 0x6D, 0x61, 0x6C, 0x6C, 0x6F, 0x63, 0x20,
  68. 0x62, 0x75, 0x66, 0x20, 0x66, 0x61, 0x69, 0x6C, 0x65, 0x64, 0x00, 0x48,
  69. 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64, 0x21, 0x00,
  70. 0x62, 0x75, 0x66, 0x20, 0x70, 0x74, 0x72, 0x3A, 0x20, 0x25, 0x70, 0x0A,
  71. 0x00, 0x25, 0x66, 0x20, 0x2A, 0x20, 0x25, 0x66, 0x20, 0x3D, 0x20, 0x25,
  72. 0x66, 0x0A, 0x00, 0x25, 0x66, 0x20, 0x2F, 0x20, 0x25, 0x64, 0x20, 0x3D,
  73. 0x20, 0x25, 0x66, 0x0A, 0x00, 0x69, 0x33, 0x32, 0x3A, 0x20, 0x25, 0x64,
  74. 0x2C, 0x20, 0x69, 0x36, 0x34, 0x3A, 0x20, 0x25, 0x6C, 0x6C, 0x64, 0x2C,
  75. 0x20, 0x66, 0x33, 0x32, 0x3A, 0x20, 0x25, 0x66, 0x2C, 0x20, 0x66, 0x36,
  76. 0x34, 0x3A, 0x20, 0x25, 0x66, 0x0A, 0x00, 0x25, 0x6C, 0x6C, 0x64, 0x20,
  77. 0x2B, 0x20, 0x25, 0x6C, 0x6C, 0x64, 0x20, 0x3D, 0x20, 0x25, 0x6C, 0x6C,
  78. 0x64, 0x0A, 0x00, 0x31, 0x32, 0x33, 0x34, 0x0A }
  79. var global_heap []byte = make([]byte, 128 * 1024, 128 * 1024)
  80. func main() {
  81. var module *wamr.Module
  82. var instance *wamr.Instance
  83. var argv []uint32
  84. var results []interface{}
  85. var offset uint32
  86. var native_addr *uint8
  87. var err error
  88. fmt.Print("Init wasm runtime with global heap buf\n");
  89. err = wamr.Runtime().FullInit(true, global_heap, 1)
  90. if err != nil {
  91. return
  92. }
  93. fmt.Print("Destroy runtime\n");
  94. wamr.Runtime().Destroy()
  95. fmt.Print("Init wasm runtime without global heap buf\n");
  96. err = wamr.Runtime().FullInit(false, nil, 1)
  97. if err != nil {
  98. return
  99. }
  100. wamr.Runtime().SetLogLevel(wamr.LOG_LEVEL_WARNING)
  101. fmt.Print("Load wasm module\n");
  102. module, err = wamr.NewModule(wasmBytes)
  103. if err != nil {
  104. fmt.Println(err)
  105. goto fail
  106. }
  107. fmt.Print("Instantiate wasm module\n");
  108. instance, err = wamr.NewInstance(module, 16384, 16384)
  109. if err != nil {
  110. fmt.Println(err)
  111. goto fail
  112. }
  113. results = make([]interface{}, 8, 8)
  114. argv = make([]uint32, 8)
  115. fmt.Print("\nCall func __main_argc_argv with CallFunc:\n");
  116. err = instance.CallFunc("__main_argc_argv", 2, argv)
  117. if err != nil {
  118. fmt.Println(err)
  119. goto fail
  120. }
  121. fmt.Print("\nCall func __main_argc_argv with CallFuncV:\n");
  122. err = instance.CallFuncV("__main_argc_argv", 2, results,
  123. (int32)(0), (int32)(0))
  124. if err != nil {
  125. fmt.Println(err)
  126. goto fail
  127. }
  128. fmt.Print("\nCall func `i32 fib2(i32)` with CallFunc:\n");
  129. argv[0] = 32
  130. err = instance.CallFunc("fib2", 1, argv)
  131. if err != nil {
  132. fmt.Println(err)
  133. goto fail
  134. }
  135. fmt.Printf("fib2(32) return: %d\n", argv[0]);
  136. fmt.Print("\nCall func `void test1(i32, i64, f32, f64)` with CallFuncV:\n");
  137. err = instance.CallFuncV("test1", 0, nil,
  138. (int32)(12345678),
  139. (int64)(3344556677889900),
  140. (float32)(5678.1234),
  141. (float64)(987654321.5678))
  142. if err != nil {
  143. fmt.Println(err)
  144. goto fail
  145. }
  146. fmt.Print("\nCall func `i64 test2(i64, i64)` with CallFuncV:\n");
  147. err = instance.CallFuncV("test2", 1, results,
  148. (int64)(3344556677889900),
  149. (int64)(1122331122110099))
  150. if err != nil {
  151. fmt.Println(err)
  152. goto fail
  153. }
  154. fmt.Printf("test2(3344556677889900, 1122331122110099) return: %d\n",
  155. results[0].(int64))
  156. fmt.Print("\nCall func `f64 test3(f32, f64)` with CallFuncV:\n");
  157. err = instance.CallFuncV("test3", 1, results,
  158. (float32)(3456.1234),
  159. (float64)(7890.4567))
  160. if err != nil {
  161. fmt.Println(err)
  162. goto fail
  163. }
  164. fmt.Printf("test3(3456.1234, 7890.4567) return: %f\n",
  165. results[0].(float64))
  166. fmt.Print("\nCall func `f32 test4(f64, i32)` with CallFuncV:\n");
  167. err = instance.CallFuncV("test4", 1, results,
  168. (float64)(8912.3456),
  169. (int32)(123))
  170. if err != nil {
  171. fmt.Println(err)
  172. goto fail
  173. }
  174. fmt.Printf("test4(8912.3456, 123) return: %f\n",
  175. results[0].(float32))
  176. fmt.Print("\nTest ModuleMalloc")
  177. offset, native_addr = instance.ModuleMalloc(1024)
  178. fmt.Printf("ModuleMalloc(%d) return offset: %d, native addr: %p\n",
  179. 1024, offset, native_addr)
  180. if (!instance.ValidateAppAddr(offset, 1024)) {
  181. fmt.Print("Validate app addr failed\n")
  182. }
  183. if (!instance.ValidateNativeAddr(native_addr, 1024)) {
  184. fmt.Print("Validate native addr failed\n")
  185. }
  186. if (native_addr != instance.AddrAppToNative(offset)) {
  187. fmt.Print("Convert app addr to native addr failed\n")
  188. }
  189. if (offset != instance.AddrNativeToApp(native_addr)) {
  190. fmt.Print("Convert app addr to native addr failed\n")
  191. }
  192. instance.ModuleFree(offset)
  193. /*
  194. instance.DumpMemoryConsumption()
  195. instance.DumpCallStack()
  196. */
  197. fmt.Print("\n");
  198. fail:
  199. if (instance != nil) {
  200. fmt.Print("Destroy instance\n");
  201. instance.Destroy()
  202. }
  203. if (module != nil) {
  204. fmt.Print("Destroy module\n");
  205. module.Destroy()
  206. }
  207. fmt.Print("Destroy wasm runtime\n");
  208. wamr.Runtime().Destroy()
  209. }