Advertisement
Guest User

Untitled

a guest
Jan 25th, 2017
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.88 KB | None | 0 0
  1. # stap -vvv traceio2.stp 0xfb00
  2. Systemtap translator/driver (version 3.1/0.159, commit release-3.0-416-g100bca3f1249 + changes)
  3. Copyright (C) 2005-2016 Red Hat, Inc. and others
  4. This is free software; see the source for copying conditions.
  5. tested kernel versions: 2.6.18 ... 4.10-rc0
  6. enabled features: PYTHON2 NLS
  7. Created temporary directory "/tmp/stapKaDNR5"
  8. Session arch: x86_64 release: 4.4.35-2-pve
  9. Parsed kernel "/lib/modules/4.4.35-2-pve/build/.config", containing 6620 tuples
  10. Parsed kernel "/lib/modules/4.4.35-2-pve/build/Module.symvers", containing 8609 vmlinux exports
  11. Kernel symbol table /lib/modules/4.4.35-2-pve/build/System.map unavailable, (No such file or directory)
  12. Parsed kernel "/boot/System.map-4.4.35-2-pve", containing 42939 symbols
  13. Processing tapset "/usr/local/share/systemtap/tapset/linux/context.stpm"
  14. Processing tapset "/usr/local/share/systemtap/tapset/linux/json.stpm"
  15. Processing tapset "/usr/local/share/systemtap/tapset/linux/nfs_proc.stpm"
  16. Processing tapset "/usr/local/share/systemtap/tapset/linux/syscalls.stpm"
  17. Processing tapset "/usr/local/share/systemtap/tapset/linux/task.stpm"
  18. Searched for library macro files: "/usr/local/share/systemtap/tapset/linux", found: 5, processed: 5
  19. Processing tapset "/usr/local/share/systemtap/tapset/choose_defined.stpm"
  20. Processing tapset "/usr/local/share/systemtap/tapset/container_of.stpm"
  21. Processing tapset "/usr/local/share/systemtap/tapset/macros.stpm"
  22. Processing tapset "/usr/local/share/systemtap/tapset/offsetof.stpm"
  23. Processing tapset "/usr/local/share/systemtap/tapset/print_stats.stpm"
  24. Processing tapset "/usr/local/share/systemtap/tapset/private30.stpm"
  25. Processing tapset "/usr/local/share/systemtap/tapset/sizeof.stpm"
  26. Processing tapset "/usr/local/share/systemtap/tapset/try_assign.stpm"
  27. Processing tapset "/usr/local/share/systemtap/tapset/type_defined.stpm"
  28. Searched for library macro files: "/usr/local/share/systemtap/tapset", found: 9, processed: 9
  29. Processing tapset "/usr/local/share/systemtap/tapset/linux/x86_64/aux_syscalls.stp"
  30. Processing tapset "/usr/local/share/systemtap/tapset/linux/x86_64/nd_syscalls.stp"
  31. Processing tapset "/usr/local/share/systemtap/tapset/linux/x86_64/syscall_num.stp"
  32. Processing tapset "/usr/local/share/systemtap/tapset/linux/x86_64/syscalls.stp"
  33. Searched: "/usr/local/share/systemtap/tapset/linux/x86_64", found: 4, processed: 4
  34. Processing tapset "/usr/local/share/systemtap/tapset/linux/atomic.stp"
  35. Processing tapset "/usr/local/share/systemtap/tapset/linux/aux_syscalls.stp"
  36. Processing tapset "/usr/local/share/systemtap/tapset/linux/context-caller.stp"
  37. Processing tapset "/usr/local/share/systemtap/tapset/linux/context-envvar.stp"
  38. Processing tapset "/usr/local/share/systemtap/tapset/linux/context-symbols.stp"
  39. Processing tapset "/usr/local/share/systemtap/tapset/linux/context-unwind.stp"
  40. Processing tapset "/usr/local/share/systemtap/tapset/linux/context.stp"
  41. Processing tapset "/usr/local/share/systemtap/tapset/linux/conversions-guru.stp"
  42. Processing tapset "/usr/local/share/systemtap/tapset/linux/conversions.stp"
  43. Processing tapset "/usr/local/share/systemtap/tapset/linux/ctime.stp"
  44. Processing tapset "/usr/local/share/systemtap/tapset/linux/dentry.stp"
  45. Processing tapset "/usr/local/share/systemtap/tapset/linux/dev.stp"
  46. Processing tapset "/usr/local/share/systemtap/tapset/linux/endian.stp"
  47. Processing tapset "/usr/local/share/systemtap/tapset/linux/guru-delay.stp"
  48. Processing tapset "/usr/local/share/systemtap/tapset/linux/guru-signal.stp"
  49. Processing tapset "/usr/local/share/systemtap/tapset/linux/inet.stp"
  50. Processing tapset "/usr/local/share/systemtap/tapset/linux/inet_sock.stp"
  51. Processing tapset "/usr/local/share/systemtap/tapset/linux/ioblock.stp"
  52. Processing tapset "/usr/local/share/systemtap/tapset/linux/ioscheduler.stp"
  53. Processing tapset "/usr/local/share/systemtap/tapset/linux/ip.stp"
  54. Processing tapset "/usr/local/share/systemtap/tapset/linux/ipmib-filter-default.stp"
  55. Processing tapset "/usr/local/share/systemtap/tapset/linux/ipmib.stp"
  56. Processing tapset "/usr/local/share/systemtap/tapset/linux/irq.stp"
  57. Processing tapset "/usr/local/share/systemtap/tapset/linux/json.stp"
  58. Processing tapset "/usr/local/share/systemtap/tapset/linux/kprocess.stp"
  59. Processing tapset "/usr/local/share/systemtap/tapset/linux/kretprobe.stp"
  60. Processing tapset "/usr/local/share/systemtap/tapset/linux/linuxmib-filter-default.stp"
  61. Processing tapset "/usr/local/share/systemtap/tapset/linux/linuxmib.stp"
  62. Processing tapset "/usr/local/share/systemtap/tapset/linux/loadavg.stp"
  63. Processing tapset "/usr/local/share/systemtap/tapset/linux/logging.stp"
  64. Processing tapset "/usr/local/share/systemtap/tapset/linux/memory.stp"
  65. Processing tapset "/usr/local/share/systemtap/tapset/linux/nd_syscalls.stp"
  66. Processing tapset "/usr/local/share/systemtap/tapset/linux/nd_syscalls2.stp"
  67. Processing tapset "/usr/local/share/systemtap/tapset/linux/netfilter.stp"
  68. Processing tapset "/usr/local/share/systemtap/tapset/linux/networking.stp"
  69. Processing tapset "/usr/local/share/systemtap/tapset/linux/nfs.stp"
  70. Processing tapset "/usr/local/share/systemtap/tapset/linux/nfs_proc.stp"
  71. Processing tapset "/usr/local/share/systemtap/tapset/linux/nfsd.stp"
  72. Processing tapset "/usr/local/share/systemtap/tapset/linux/nfsderrno.stp"
  73. Processing tapset "/usr/local/share/systemtap/tapset/linux/panic.stp"
  74. Processing tapset "/usr/local/share/systemtap/tapset/linux/perf.stp"
  75. Processing tapset "/usr/local/share/systemtap/tapset/linux/proc_mem.stp"
  76. Processing tapset "/usr/local/share/systemtap/tapset/linux/pstrace.stp"
  77. Processing tapset "/usr/local/share/systemtap/tapset/linux/rcu.stp"
  78. Processing tapset "/usr/local/share/systemtap/tapset/linux/rlimit.stp"
  79. Processing tapset "/usr/local/share/systemtap/tapset/linux/rpc.stp"
  80. Processing tapset "/usr/local/share/systemtap/tapset/linux/scheduler.stp"
  81. Processing tapset "/usr/local/share/systemtap/tapset/linux/scsi.stp"
  82. Processing tapset "/usr/local/share/systemtap/tapset/linux/signal.stp"
  83. Processing tapset "/usr/local/share/systemtap/tapset/linux/socket.stp"
  84. Processing tapset "/usr/local/share/systemtap/tapset/linux/syscall_table.stp"
  85. Processing tapset "/usr/local/share/systemtap/tapset/linux/syscalls.stp"
  86. Processing tapset "/usr/local/share/systemtap/tapset/linux/syscalls2.stp"
  87. Processing tapset "/usr/local/share/systemtap/tapset/linux/syscalls_cfg_trunc.stp"
  88. Processing tapset "/usr/local/share/systemtap/tapset/linux/target_set.stp"
  89. Processing tapset "/usr/local/share/systemtap/tapset/linux/task.stp"
  90. Processing tapset "/usr/local/share/systemtap/tapset/linux/task_ancestry.stp"
  91. Processing tapset "/usr/local/share/systemtap/tapset/linux/task_time.stp"
  92. Processing tapset "/usr/local/share/systemtap/tapset/linux/tcp.stp"
  93. Processing tapset "/usr/local/share/systemtap/tapset/linux/tcpmib-filter-default.stp"
  94. Processing tapset "/usr/local/share/systemtap/tapset/linux/tcpmib.stp"
  95. Processing tapset "/usr/local/share/systemtap/tapset/linux/timestamp.stp"
  96. Processing tapset "/usr/local/share/systemtap/tapset/linux/timestamp_gtod.stp"
  97. Processing tapset "/usr/local/share/systemtap/tapset/linux/timestamp_monotonic.stp"
  98. Processing tapset "/usr/local/share/systemtap/tapset/linux/tty.stp"
  99. Processing tapset "/usr/local/share/systemtap/tapset/linux/tzinfo.stp"
  100. Processing tapset "/usr/local/share/systemtap/tapset/linux/ucontext-symbols.stp"
  101. Processing tapset "/usr/local/share/systemtap/tapset/linux/ucontext-unwind.stp"
  102. Processing tapset "/usr/local/share/systemtap/tapset/linux/ucontext.stp"
  103. Processing tapset "/usr/local/share/systemtap/tapset/linux/udp.stp"
  104. Processing tapset "/usr/local/share/systemtap/tapset/linux/utrace.stp"
  105. Processing tapset "/usr/local/share/systemtap/tapset/linux/vfs.stp"
  106. Searched: "/usr/local/share/systemtap/tapset/linux", found: 72, processed: 72
  107. Processing tapset "/usr/local/share/systemtap/tapset/x86_64/registers.stp"
  108. Searched: "/usr/local/share/systemtap/tapset/x86_64", found: 1, processed: 1
  109. Processing tapset "/usr/local/share/systemtap/tapset/ansi.stp"
  110. Processing tapset "/usr/local/share/systemtap/tapset/argv.stp"
  111. Processing tapset "/usr/local/share/systemtap/tapset/context.stp"
  112. Processing tapset "/usr/local/share/systemtap/tapset/errno.stp"
  113. Processing tapset "/usr/local/share/systemtap/tapset/indent-default.stp"
  114. Processing tapset "/usr/local/share/systemtap/tapset/indent.stp"
  115. Processing tapset "/usr/local/share/systemtap/tapset/init.stp"
  116. Processing tapset "/usr/local/share/systemtap/tapset/java.stp"
  117. Processing tapset "/usr/local/share/systemtap/tapset/logging.stp"
  118. Processing tapset "/usr/local/share/systemtap/tapset/null.stp"
  119. Processing tapset "/usr/local/share/systemtap/tapset/oneshot.stp"
  120. Processing tapset "/usr/local/share/systemtap/tapset/pn.stp"
  121. Processing tapset "/usr/local/share/systemtap/tapset/python2.stp"
  122. Processing tapset "/usr/local/share/systemtap/tapset/python3.stp"
  123. Processing tapset "/usr/local/share/systemtap/tapset/queue_stats.stp"
  124. Processing tapset "/usr/local/share/systemtap/tapset/random.stp"
  125. Processing tapset "/usr/local/share/systemtap/tapset/registers.stp"
  126. Processing tapset "/usr/local/share/systemtap/tapset/speculative.stp"
  127. Processing tapset "/usr/local/share/systemtap/tapset/stap_staticmarkers.stp"
  128. Processing tapset "/usr/local/share/systemtap/tapset/stopwatch.stp"
  129. Processing tapset "/usr/local/share/systemtap/tapset/string.stp"
  130. Processing tapset "/usr/local/share/systemtap/tapset/switchfile.stp"
  131. Processing tapset "/usr/local/share/systemtap/tapset/system.stp"
  132. Processing tapset "/usr/local/share/systemtap/tapset/timers.stp"
  133. Processing tapset "/usr/local/share/systemtap/tapset/tokenize.stp"
  134. Processing tapset "/usr/local/share/systemtap/tapset/tzinfo.stp"
  135. Processing tapset "/usr/local/share/systemtap/tapset/uconversions-guru.stp"
  136. Processing tapset "/usr/local/share/systemtap/tapset/uconversions.stp"
  137. Searched: "/usr/local/share/systemtap/tapset", found: 28, processed: 28
  138. Pass 1: parsed user script and 119 library scripts using 71616virt/43948res/4720shr/39912data kb, in 130usr/10sys/139real ms.
  139. Attempting to extract kernel debuginfo build ID from /lib/modules/4.4.35-2-pve/build/vmlinux.id
  140. Attempting to extract kernel debuginfo build ID from /sys/kernel/notes
  141. semantic error: while resolving probe point: identifier 'kernel' at /usr/local/share/systemtap/tapset/linux/vfs.stp:987:19
  142. thrown from: elaborate.cxx:1080
  143. source: probe vfs.write = kernel.function("vfs_write")
  144. ^
  145.  
  146. semantic error: missing x86_64 kernel/module debuginfo [man warning::debuginfo] under '/lib/modules/4.4.35-2-pve/build'
  147. thrown from: dwflpp.cxx:356
  148. semantic error: resolution failed in alias expansion builder
  149. thrown from: elaborate.cxx:1092
  150. semantic error: while resolving probe point: identifier 'vfs' at traceio2.stp:14:7
  151. thrown from: elaborate.cxx:1080
  152. source: probe vfs.write, vfs.read
  153. ^
  154.  
  155. semantic error: no match
  156. thrown from: elaborate.cxx:1043
  157. Attempting to extract kernel debuginfo build ID from /lib/modules/4.4.35-2-pve/build/vmlinux.id
  158. Attempting to extract kernel debuginfo build ID from /sys/kernel/notes
  159. semantic error: while resolving probe point: identifier 'kernel' at /usr/local/share/systemtap/tapset/linux/vfs.stp:915:18
  160. thrown from: elaborate.cxx:1080
  161. source: probe vfs.read = kernel.function("vfs_read")
  162. ^
  163.  
  164. semantic error: missing x86_64 kernel/module debuginfo [man warning::debuginfo] under '/lib/modules/4.4.35-2-pve/build'
  165. thrown from: dwflpp.cxx:356
  166. semantic error: resolution failed in alias expansion builder
  167. thrown from: elaborate.cxx:1092
  168. semantic error: while resolving probe point: identifier 'vfs' at traceio2.stp:14:18
  169. thrown from: elaborate.cxx:1080
  170. source: probe vfs.write, vfs.read
  171. ^
  172.  
  173. semantic error: no match
  174. thrown from: elaborate.cxx:1043
  175. Attempting to extract kernel debuginfo build ID from /lib/modules/4.4.35-2-pve/build/vmlinux.id
  176. Attempting to extract kernel debuginfo build ID from /sys/kernel/notes
  177. # global embedded code
  178. %{
  179. #include <linux/kdev_t.h>
  180. %}
  181. # globals
  182. device_of_interest:unknown
  183. # functions
  184. MAJOR:long (dev:long)
  185. %{ /* pure */
  186. STAP_RETVALUE = MAJOR(STAP_ARG_dev);
  187. %}
  188. MINOR:long (dev:long)
  189. %{ /* pure */
  190. STAP_RETVALUE = MINOR(STAP_ARG_dev);
  191. %}
  192. MKDEV:long (major:long, minor:long)
  193. %{ /* pure */
  194. STAP_RETVALUE = MKDEV(STAP_ARG_major,STAP_ARG_minor);
  195. %}
  196. bdevname:string (bdev:long)
  197. # locals
  198. hd:unknown
  199. partno:unknown
  200. disk_name:unknown
  201. {
  202. (bdev) = (&@cast(bdev, "block_device", "kernel"));
  203. if ((bdev) == (0)) return "N/A"
  204. ;
  205. (hd) = ((bdev)->bd_disk);
  206. if ((bdev)->bd_part) (partno) = ((bdev)->bd_part->partno)
  207. else (partno) = ((__global_MINOR__overload_0((bdev)->bd_dev)) - ((hd)->first_minor))
  208. ;
  209. if (!(partno)) return __global_kernel_string__overload_0((hd)->disk_name)
  210. ;
  211. (disk_name) = (__global_kernel_string__overload_0((hd)->disk_name));
  212. if (__global_isdigit__overload_0(__global_substr__overload_0(disk_name, (__global_strlen__overload_0(disk_name)) - (1), 1))) return sprintf("%sp%d", disk_name, partno)
  213. else return sprintf("%s%d", disk_name, partno)
  214. ;
  215. }
  216. isdigit:long (str:string)
  217. %{ /* pure */ /* unprivileged */ /* unmodified-fnargs */
  218. STAP_RETURN(isdigit(STAP_ARG_str[0]));
  219. %}
  220. isinstr:long (s1:string, s2:string)
  221. %{ /* pure */ /* unprivileged */ /* unmodified-fnargs */
  222. STAP_RETURN (strstr(STAP_ARG_s1,STAP_ARG_s2) != NULL);
  223. %}
  224. kernel_buffer_quoted:string (addr:long, inlen:long)
  225. {
  226. return __global_kernel_buffer_quoted__overload_1(addr, inlen, %{ /* pure */ MAXSTRINGLEN %});
  227. }
  228. kernel_buffer_quoted:string (addr:long, inlen:long, outlen:long)
  229. %{ /* pure */
  230. size_t outlen = (size_t)clamp_t(int, STAP_ARG_outlen, 0, MAXSTRINGLEN);
  231. if (outlen == 0)
  232. return;
  233. if ( _stp_text_str(STAP_RETVALUE, (char *)(uintptr_t)STAP_ARG_addr,
  234. STAP_ARG_inlen, outlen, 1, 0, 1) < 0)
  235. snprintf(STAP_RETVALUE, outlen, "0x%lx",
  236. (unsigned long)(void *)(uintptr_t)STAP_ARG_addr);
  237. %}
  238. kernel_buffer_quoted_error:string (addr:long, inlen:long, outlen:long)
  239. %{ /* pure */
  240. size_t outlen = (size_t)clamp_t(int, STAP_ARG_outlen, 0, MAXSTRINGLEN);
  241. if (outlen == 0
  242. || _stp_text_str(STAP_RETVALUE, (char *) (uintptr_t) STAP_ARG_addr,
  243. STAP_ARG_inlen, outlen, 1, 0, 1) < 0)
  244. STAP_ERROR("Unable to access kernel space data at 0x%lx",
  245. (unsigned long)(void *)(uintptr_t)STAP_ARG_addr);
  246. %}
  247. kernel_char:long (addr:long)
  248. %{ /* pure */
  249. STAP_RETVALUE = kread((char *) (intptr_t) STAP_ARG_addr);
  250. if (0) {
  251. deref_fault: /* branched to from kread() */
  252. snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer),
  253. "kernel char copy fault at 0x%p [man error::fault]", (void *) (uintptr_t) STAP_ARG_addr);
  254. CONTEXT->last_error = CONTEXT->error_buffer;
  255. }
  256. %}
  257. kernel_int:long (addr:long)
  258. %{ /* pure */
  259. STAP_RETVALUE = kread((int *) (intptr_t) STAP_ARG_addr);
  260. if (0) {
  261. deref_fault: /* branched to from kread() */
  262. snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer),
  263. "kernel int copy fault at 0x%p [man error::fault]", (void *) (uintptr_t) STAP_ARG_addr);
  264. CONTEXT->last_error = CONTEXT->error_buffer;
  265. }
  266. %}
  267. kernel_long:long (addr:long)
  268. %{ /* pure */
  269. STAP_RETVALUE = kread((long *) (intptr_t) STAP_ARG_addr);
  270. if (0) {
  271. deref_fault: /* branched to from kread() */
  272. snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer),
  273. "kernel long copy fault at 0x%p [man error::fault]", (void *) (uintptr_t) STAP_ARG_addr);
  274. CONTEXT->last_error = CONTEXT->error_buffer;
  275. }
  276. %}
  277. kernel_pointer:long (addr:long)
  278. %{ /* pure */
  279. STAP_RETVALUE = (uintptr_t) kread((void **) (uintptr_t) STAP_ARG_addr);
  280. if (0) {
  281. deref_fault: /* branched to from kread() */
  282. snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer),
  283. "kernel pointer copy fault at 0x%p [man error::fault]", (void *) (uintptr_t) STAP_ARG_addr);
  284. CONTEXT->last_error = CONTEXT->error_buffer;
  285. }
  286. %}
  287. kernel_short:long (addr:long)
  288. %{ /* pure */
  289. STAP_RETVALUE = kread((short *) (intptr_t) STAP_ARG_addr);
  290. if (0) {
  291. deref_fault: /* branched to from kread() */
  292. snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer),
  293. "kernel short copy fault at 0x%p [man error::fault]", (void *) (uintptr_t) STAP_ARG_addr);
  294. CONTEXT->last_error = CONTEXT->error_buffer;
  295. }
  296. %}
  297. kernel_string:string (addr:long)
  298. %{ /* pure */
  299. char *destination = STAP_RETVALUE;
  300. kderef_string (destination, STAP_ARG_addr, MAXSTRINGLEN);
  301. if (0) {
  302. deref_fault: /* branched to from deref_string() */
  303. /* Why '%1p' below? On newer kernels, the snprintf() function pads
  304. * out '(null)' to the same width as other pointers, which looks
  305. * really odd in the following error message. Setting a format
  306. * width of '1' fixes this. */
  307. snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer),
  308. "kernel string copy fault at 0x%p [man error::fault]", (void *) (uintptr_t) STAP_ARG_addr);
  309. CONTEXT->last_error = CONTEXT->error_buffer;
  310. }
  311. %}
  312. kernel_string:string (addr:long, err_msg:string)
  313. {
  314. try {
  315. {
  316. return __global_kernel_string__overload_0(addr);
  317. }
  318. } catch {
  319. {
  320. return err_msg;
  321. }
  322. }
  323. ;
  324. }
  325. kernel_string_n:string (addr:long, n:long)
  326. %{ /* pure */
  327. char *destination = STAP_RETVALUE;
  328. int64_t len = clamp_t(int64_t, STAP_ARG_n + 1, 1, MAXSTRINGLEN);
  329. kderef_string (destination, STAP_ARG_addr, len);
  330. if (0) {
  331. deref_fault: /* branched to from deref_string() */
  332. snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer),
  333. "kernel string copy fault at 0x%p [man error::fault]", (void *) (uintptr_t) STAP_ARG_addr);
  334. CONTEXT->last_error = CONTEXT->error_buffer;
  335. }
  336. %}
  337. kernel_string_quoted:string (addr:long)
  338. %{ /* pure */
  339. int rc = 0;
  340. if (STAP_ARG_addr != 0)
  341. rc = _stp_text_str(STAP_RETVALUE,
  342. (char *)(uintptr_t)STAP_ARG_addr,
  343. MAXSTRINGLEN, MAXSTRINGLEN, 1, 0, 0);
  344. if (STAP_ARG_addr == 0 || rc < 0)
  345. snprintf(STAP_RETVALUE, MAXSTRINGLEN, "%p", (void *)(long)STAP_ARG_addr);
  346. %}
  347. kernel_string_quoted_utf16:string (addr:long)
  348. {
  349. try {
  350. {
  351. return __global_string_quoted__overload_0(__global_kernel_string_utf16__overload_0(addr));
  352. }
  353. } catch {
  354. {
  355. return sprintf("0x%x", addr);
  356. }
  357. }
  358. ;
  359. }
  360. kernel_string_quoted_utf32:string (addr:long)
  361. {
  362. try {
  363. {
  364. return __global_string_quoted__overload_0(__global_kernel_string_utf32__overload_0(addr));
  365. }
  366. } catch {
  367. {
  368. return sprintf("0x%x", addr);
  369. }
  370. }
  371. ;
  372. }
  373. kernel_string_utf16:string (addr:long)
  374. %{ /* pure */
  375. int rc = 0, len = MAXSTRINGLEN;
  376. uint32_t c32;
  377. uint16_t c16low, *source = (uint16_t*)(intptr_t)STAP_ARG_addr;
  378. char *destination = STAP_RETVALUE;
  379.  
  380. *destination = '\0';
  381. while (len > 1 && (c32 = kread(source))) {
  382. /* Check for a UTF-16 high surrogate, then its low pair, and combine them.
  383. * Broken surrogates will just fall through to _stp_convert_utf32 and get
  384. * flagged as an error there. (Or even allowed, if we decide to be lax.)
  385. */
  386. if (c32 >= 0xD800 && c32 <= 0xDBFF) {
  387. ++source;
  388. c16low = kread(source);
  389. if (c16low >= 0xDC00 && c16low <= 0xDFFF)
  390. c32 = 0x10000 + ((c32 & 0x3FF) << 10) + (c16low & 0x3FF);
  391. else
  392. --source;
  393. }
  394.  
  395. if ((rc = _stp_convert_utf32(destination, len, c32)) <= 0) {
  396. if (rc < 0) {
  397. snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer),
  398. "invalid UTF-16 character U+%X at 0x%p", c32, source);
  399. CONTEXT->last_error = CONTEXT->error_buffer;
  400. }
  401. break;
  402. }
  403. ++source;
  404. destination += rc;
  405. len -= rc;
  406. }
  407.  
  408. if (0) {
  409. deref_fault: /* branched to from deref_string() */
  410. snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer),
  411. "kernel string copy fault at 0x%p [man error::fault]", source);
  412. CONTEXT->last_error = CONTEXT->error_buffer;
  413. }
  414. %}
  415. kernel_string_utf16:string (addr:long, err_msg:string)
  416. {
  417. try {
  418. {
  419. return __global_kernel_string_utf16__overload_0(addr);
  420. }
  421. } catch {
  422. {
  423. return err_msg;
  424. }
  425. }
  426. ;
  427. }
  428. kernel_string_utf32:string (addr:long)
  429. %{ /* pure */
  430. int rc = 0, len = MAXSTRINGLEN;
  431. uint32_t c32, *source = (uint32_t*)(intptr_t)STAP_ARG_addr;
  432. char *destination = STAP_RETVALUE;
  433.  
  434. *destination = '\0';
  435. while (len > 1 && (c32 = kread(source))) {
  436. if ((rc = _stp_convert_utf32(destination, len, c32)) <= 0) {
  437. if (rc < 0) {
  438. snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer),
  439. "invalid UTF-32 character U+%X at 0x%p", c32, source);
  440. CONTEXT->last_error = CONTEXT->error_buffer;
  441. }
  442. break;
  443. }
  444. ++source;
  445. destination += rc;
  446. len -= rc;
  447. }
  448.  
  449. if (0) {
  450. deref_fault: /* branched to from deref_string() */
  451. snprintf (CONTEXT->error_buffer, sizeof(CONTEXT->error_buffer),
  452. "kernel string copy fault at 0x%p [man error::fault]", source);
  453. CONTEXT->last_error = CONTEXT->error_buffer;
  454. }
  455. %}
  456. kernel_string_utf32:string (addr:long, err_msg:string)
  457. {
  458. try {
  459. {
  460. return __global_kernel_string_utf32__overload_0(addr);
  461. }
  462. } catch {
  463. {
  464. return err_msg;
  465. }
  466. }
  467. ;
  468. }
  469. str_replace:string (prnt_str:string, srch_str:string, rplc_str:string)
  470. %{ /* pure */ /* unprivileged */
  471. char *ptr = STAP_ARG_prnt_str;
  472. char *ptr_base = STAP_ARG_prnt_str;
  473. int strlen_srch_str = strlen(STAP_ARG_srch_str);
  474.  
  475. STAP_RETVALUE[0] = '\0';
  476. if(strlen_srch_str == 0) {
  477. STAP_RETURN (ptr_base);
  478. }
  479.  
  480. while((ptr = strstr(ptr, STAP_ARG_srch_str)) != NULL) {
  481.  
  482. *ptr = '\0';
  483. strlcat(STAP_RETVALUE, ptr_base, MAXSTRINGLEN);
  484. strlcat(STAP_RETVALUE, STAP_ARG_rplc_str, MAXSTRINGLEN);
  485. ptr = ptr + strlen_srch_str;
  486. ptr_base = ptr;
  487. }
  488.  
  489. strlcat(STAP_RETVALUE, ptr_base, MAXSTRINGLEN);
  490. return;
  491. %}
  492. string_quoted:string (str:string)
  493. %{ /* pure */ /* unmodified-fnargs */
  494. /* This can't fail, since the input string is already in stap context space. */
  495. (void) _stp_text_str(STAP_RETVALUE,
  496. (char *)(uintptr_t)STAP_ARG_str,
  497. MAXSTRINGLEN, MAXSTRINGLEN, 1, 0, 0);
  498. %}
  499. stringat:long (str:string, pos:long)
  500. %{ /* pure */ /* unprivileged */ /* unmodified-fnargs */
  501. if (STAP_ARG_pos >= 0 && STAP_ARG_pos < strlen(STAP_ARG_str))
  502. STAP_RETURN(STAP_ARG_str[STAP_ARG_pos]);
  503. else {
  504. STAP_RETVALUE = 0;
  505. #if STAP_COMPAT_VERSION >= STAP_VERSION(2,3) // PR15044
  506. STAP_ERROR("Position out of bounds");
  507. #endif
  508. }
  509. %}
  510. strlen:long (s:string)
  511. %{ /* pure */ /* unprivileged */ /* unmodified-fnargs */
  512. STAP_RETURN(strlen(STAP_ARG_s));
  513. %}
  514. strtol:long (str:string, base:long)
  515. %{ /* pure */ /* unprivileged */ /* unmodified-fnargs */
  516. STAP_RETURN(simple_strtol(STAP_ARG_str, NULL, STAP_ARG_base));
  517. %}
  518. substr:string (str:string, start:long, length:long)
  519. %{ /* pure */ /* unprivileged */ /* unmodified-fnargs */
  520. int64_t length = clamp_t(int64_t, STAP_ARG_length + 1, 0, MAXSTRINGLEN);
  521. if (STAP_ARG_start >= 0 && STAP_ARG_start < strlen(STAP_ARG_str))
  522. strlcpy(STAP_RETVALUE, STAP_ARG_str + STAP_ARG_start, length);
  523. %}
  524. text_str:string (input:string)
  525. %{ /* pure */ /* unprivileged */ /* unmodified-fnargs */
  526. if (_stp_text_str(STAP_RETVALUE, STAP_ARG_input, 0, 0, 0, 0, 0) < 0) {
  527. STAP_RETVALUE[0] = '\0';
  528. }
  529. %}
  530. text_strn:string (input:string, len:long, quoted:long)
  531. %{ /* pure */ /* unprivileged */ /* unmodified-fnargs */
  532. int64_t len = clamp_t(int64_t, STAP_ARG_len, 0, MAXSTRINGLEN);
  533. if (_stp_text_str(
  534. STAP_RETVALUE, STAP_ARG_input, 0, len, STAP_ARG_quoted, 0, 0) < 0) {
  535. STAP_RETVALUE[0] = '\0';
  536. }
  537. %}
  538. usrdev2kerndev:long (dev:long)
  539. %{ /* pure */
  540. STAP_RETVALUE = new_decode_dev(STAP_ARG_dev);
  541. %}
  542. # probes
  543. begin /* <- begin */
  544. # locals
  545. dev:unknown
  546. {
  547. (dev) = (__global_usrdev2kerndev__overload_0(64256));
  548. (__global_device_of_interest) = (__global_MKDEV__overload_0(__global_MAJOR__overload_0(dev), __global_MINOR__overload_0(dev)));
  549. }
  550. Pass 2: analyzed script: 1 probe, 33 functions, 1 embed, 1 global using 72392virt/46100res/6036shr/40688data kb, in 40usr/100sys/144real ms.
  551. Pass 2: analysis failed. [man error::pass2]
  552. Running rm -rf /tmp/stapKaDNR5
  553. Spawn waitpid result (0x0): 0
  554. Removed temporary directory "/tmp/stapKaDNR5"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement